Ë
    œëiJ  ã                   ó²   — d dl mZ ddlmZmZmZmZ ddlmZ dd„Z	d„ Z
dd„Zdd„Zd	„ Zdd
„Zd„ Zd„ Zdd„Zdd„Zdd„Zdd„Zdd„Zd„ Zd„ Zd„ Z	 	 dd„Zy)é    )Úchainé   )ÚAtRuleÚDeclarationÚ
ParseErrorÚQualifiedRule)Úparse_component_value_listc                 óP   — t        | t        «      rt        | |«      } t        | «      S )aq  Iterate component values out of string or component values iterable.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments: If the input is a string, ignore all CSS comments.
    :returns: An iterator yielding :term:`component values`.

    )Ú
isinstanceÚstrr	   Úiter)ÚinputÚskip_commentss     úO/var/www/html/chat/reports/venv/lib/python3.12/site-packages/tinycss2/parser.pyÚ_to_token_iteratorr      s$   € ô �%œÔÜ*¨5°-Ó@ˆÜ�‹;Ðó    c                 ó6   — | D ]  }|j                   dvsŒ|c S  y)zçReturn the next significant (neither whitespace or comment) token.

    :type tokens: :term:`iterator`
    :param tokens: An iterator yielding :term:`component values`.
    :returns: A :term:`component value`, or :obj:`None`.

    ©Ú
whitespaceÚcommentN)Útype)ÚtokensÚtokens     r   Ú_next_significantr      s%   € ð ò ˆØ�:‰:Ð6Ò6ØŠLñr   c                 ó²   — t        | |«      }t        |«      }t        |«      }|€t        dddd«      S |�"t        |j                  |j                  dd«      S |S )aú  Parse a single :diagram:`component value`.

    This is used e.g. for an attribute value
    referred to by ``attr(foo length)``.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments: If the input is a string, ignore all CSS comments.
    :returns:
        A :term:`component value` (that is neither whitespace or comment),
        or a :class:`~tinycss2.ast.ParseError`.

    r   ÚemptyúInput is emptyúextra-inputzGot more than one token)r   r   r   Úsource_lineÚsource_column)r   r   r   ÚfirstÚseconds        r   Úparse_one_component_valuer#   #   sk   € ô    }Ó5€FÜ˜fÓ%€EÜ˜vÓ&€FØ€}Ü˜!˜Q Ð)9Ó:Ð:ØÐÜØ×Ñ × 4Ñ 4°mØ%ó'ð 	'ð ˆr   c                 óh   — t        | |«      }t        |«      }|€t        dddd«      S t        ||«      S )a?  Parse a single :diagram:`declaration`.

    This is used e.g. for a declaration in an `@supports
    <https://drafts.csswg.org/css-conditional/#at-supports>`_ test.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments: If the input is a string, ignore all CSS comments.
    :returns:
        A :class:`~tinycss2.ast.Declaration`
        or :class:`~tinycss2.ast.ParseError`.

    Any whitespace or comment before the ``:`` colon is dropped.

    r   r   r   )r   r   r   Ú_parse_declaration)r   r   r   Úfirst_tokens       r   Úparse_one_declarationr'   ?   s?   € ô"    }Ó5€FÜ# FÓ+€KØÐÜ˜!˜Q Ð)9Ó:Ð:Ü˜k¨6Ó2Ð2r   c                 ó4   — | D ]  }|dk(  r y |sŒ|dk(  sŒ y  y )Nú;ú}© )r   Únestedr   s      r   Ú_consume_remnantsr-   W   s'   € Øò ˆØ�CŠ<ÙÚ˜ ›Ùñ	r   c           	      ób  — | }|j                   dk7  r<t        ||«       t        |j                  |j                  dd|j                   › d�«      S t        |«      }|€.t        ||«       t        |j                  |j                  dd«      S |dk7  r.t        ||«       t        |j                  |j                  dd«      S g }d	}d
}d
}t        |«      D ]t  \  }	}
|d	k(  r
|
dk(  rd}|	}nO|dk(  r!|
j                   dk(  r|
j                  dk(  rd}n)|
j                   dvrd	}|
j                   dk(  r|rd}nd}nd}|j                  |
«       Œv |dk(  r|d…= |r$|r"t        |j                  |j                  dd«      S t        |j                  |j                  |j                  |j                  ||dk(  «      S )a  Parse a declaration.

    Consume :obj:`tokens` until the end of the declaration or the first error.

    :type first_token: :term:`component value`
    :param first_token: The first component value of the rule.
    :type tokens: :term:`iterator`
    :param tokens: An iterator yielding :term:`component values`.
    :type nested: :obj:`bool`
    :param nested: Whether the declaration is nested or top-level.
    :returns:
        A :class:`~tinycss2.ast.Declaration`
        or :class:`~tinycss2.ast.ParseError`.

    ÚidentÚinvalidz+Expected <ident> for declaration name, got ú.Nz,Expected ':' after declaration name, got EOFú:z6Expected ':' after declaration name, got {colon.type}.ÚvalueFú!ÚbangÚ	importantr   ú{} blockTzDeclaration contains {} block)r   r-   r   r   r    r   Ú	enumerateÚlower_valueÚappendr   r3   )r&   r   r,   ÚnameÚcolonr3   ÚstateÚcontains_non_whitespaceÚcontains_simple_blockÚir   Úbang_positions               r   r%   r%   _   sê  € ð  €DØ‡y�y�GÒÜ˜& &Ô)ÜØ×Ñ˜d×0Ñ0°)Ø9¸$¿)¹)¸ÀAÐFóHð 	Hô ˜fÓ%€EØ€}Ü˜& &Ô)ÜØ×Ñ˜d×0Ñ0°)Ø:ó<ð 	<ð 
�#ŠÜ˜& &Ô)ÜØ×Ñ˜u×2Ñ2°IØDóFð 	Fð €EØ€EØ#ÐØ!ÐÜ˜fÓ%ò ‰ˆˆ5Ø�GÒ ¨¢ØˆEØ‰MØ�vŠo %§*¡*°Ò"7Ø×%Ñ%¨Ò4Ø‰EØ�Z‰ZÐ8Ñ8ØˆEØ�z‰z˜ZÒ'Ù*Ø,0Ñ)à.2Ñ+à*.Ð'Ø�‰�UÕð!ð$ �ÒØ�-‘.Ð!ñ Ñ!8ÜØ×Ñ˜u×2Ñ2°IØ+ó-ð 	-ô Ø×Ñ˜$×,Ñ,¨d¯j©j¸$×:JÑ:JØˆu˜Ñ#ó%ð %r   c                 ó<  — g }g }| dk7  rP| j                   dk7  rA|D ]<  }|dk(  r|j                  |«        n$|j                  |«       |j                   dk(  sŒ< n t        | t        |«      d¬«      }|j                   dk(  r|S t	        |||«      }t        | |dd¬«      S )z#Consume declaration or nested rule.r)   r7   T)r,   Údeclaration)Ú
stop_tokenr,   )r   r:   r%   r   r   Ú_consume_qualified_rule)r&   r   Údeclaration_tokensÚsemicolon_tokenr   rC   s         r   Ú_consume_blocks_contentrH   ©   s´   € àÐØ€OØ�cÒ˜k×.Ñ.°*Ò<Øò 	ˆEØ˜Š|Ø×&Ñ& uÔ-ÙØ×%Ñ% eÔ,Ø�z‰z˜ZÓ'Ùð	ô %Ø”TÐ,Ó-°dô<€Kà×Ñ˜=Ò(ØÐäÐ)¨?¸FÓCˆÜ& {°FÀsÐSWÔXÐXr   c                 ón   — g }|D ]  }|dk(  r n|j                  |«       Œ t        | t        |«      «      S )z�Like :func:`_parse_declaration`, but stop at the first ``;``.

    Deprecated, use :func:`_consume_blocks_content` instead.

    r)   )r:   r%   r   )r&   r   Úother_declaration_tokensr   s       r   Ú_consume_declaration_in_listrK   ¾   sF   € ð  "ÐØò /ˆØ�CŠ<ÙØ ×'Ñ'¨Õ.ð/ô ˜k¬4Ð0HÓ+IÓJÐJr   c                 óX  — t        | |«      }g }|D ]–  }|j                  dk(  r|rŒ|j                  |«       Œ'|j                  dk(  r|rŒ9|j                  |«       ŒK|j                  dk(  r|j                  t        ||«      «       Œv|dk7  sŒ||j                  t	        ||«      «       Œ˜ |S )u–  Parse a blockâ€™s contents.

    This is used e.g. for the :attr:`~tinycss2.ast.QualifiedRule.content`
    of a style rule or ``@page`` rule, or for the ``style`` attribute of an
    HTML element.

    In contexts that donâ€™t expect any at-rule and/or qualified rule,
    all :class:`~tinycss2.ast.AtRule` and/or
    :class:`~tinycss2.ast.QualifiedRule` objects should simply be rejected as
    invalid.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        Ignore CSS comments at the top-level of the list.
        If the input is a string, ignore all comments.
    :type skip_whitespace: :obj:`bool`
    :param skip_whitespace:
        Ignore whitespace at the top-level of the list.
        Whitespace is still preserved
        in the :attr:`~tinycss2.ast.Declaration.value` of declarations
        and the :attr:`~tinycss2.ast.AtRule.prelude`
        and :attr:`~tinycss2.ast.AtRule.content` of at-rules.
    :returns:
        A list of
        :class:`~tinycss2.ast.Declaration`,
        :class:`~tinycss2.ast.AtRule`,
        :class:`~tinycss2.ast.QualifiedRule`,
        :class:`~tinycss2.ast.Comment` (if ``skip_comments`` is false),
        :class:`~tinycss2.ast.WhitespaceToken`
        (if ``skip_whitespace`` is false),
        and :class:`~tinycss2.ast.ParseError` objects

    r   r   ú
at-keywordr)   )r   r   r:   Ú_consume_at_rulerH   ©r   r   Úskip_whitespacer   Úresultr   s         r   Úparse_blocks_contentsrR   Ì   sŸ   € ôH    }Ó5€FØ€FØò 
BˆØ�:‰:˜Ò%Ú"Ø—‘˜eÕ$Ø�Z‰Z˜9Ò$Ú Ø—‘˜eÕ$Ø�Z‰Z˜<Ò'Ø�M‰MÔ*¨5°&Ó9Õ:Ø�c‹\Ø�M‰MÔ1°%¸Ó@ÕAð
Bð €Mr   c                 óX  — t        | |«      }g }|D ]–  }|j                  dk(  r|rŒ|j                  |«       Œ'|j                  dk(  r|rŒ9|j                  |«       ŒK|j                  dk(  r|j                  t        ||«      «       Œv|dk7  sŒ||j                  t	        ||«      «       Œ˜ |S )u­  Parse a :diagram:`declaration list` (which may also contain at-rules).

    Deprecated and removed from CSS Syntax Level 3. Use
    :func:`parse_blocks_contents` instead.

    This is used e.g. for the :attr:`~tinycss2.ast.QualifiedRule.content`
    of a style rule or ``@page`` rule, or for the ``style`` attribute of an
    HTML element.

    In contexts that donâ€™t expect any at-rule, all
    :class:`~tinycss2.ast.AtRule` objects should simply be rejected as invalid.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        Ignore CSS comments at the top-level of the list.
        If the input is a string, ignore all comments.
    :type skip_whitespace: :obj:`bool`
    :param skip_whitespace:
        Ignore whitespace at the top-level of the list.
        Whitespace is still preserved
        in the :attr:`~tinycss2.ast.Declaration.value` of declarations
        and the :attr:`~tinycss2.ast.AtRule.prelude`
        and :attr:`~tinycss2.ast.AtRule.content` of at-rules.
    :returns:
        A list of
        :class:`~tinycss2.ast.Declaration`,
        :class:`~tinycss2.ast.AtRule`,
        :class:`~tinycss2.ast.Comment` (if ``skip_comments`` is false),
        :class:`~tinycss2.ast.WhitespaceToken`
        (if ``skip_whitespace`` is false),
        and :class:`~tinycss2.ast.ParseError` objects

    r   r   rM   r)   )r   r   r:   rN   rK   rO   s         r   Úparse_declaration_listrT      sŸ   € ôH    }Ó5€FØ€FØò 
GˆØ�:‰:˜Ò%Ú"Ø—‘˜eÕ$Ø�Z‰Z˜9Ò$Ú Ø—‘˜eÕ$Ø�Z‰Z˜<Ò'Ø�M‰MÔ*¨5°&Ó9Õ:Ø�c‹\Ø�M‰MÔ6°u¸fÓEÕFð
Gð €Mr   c                 óä   — t        | |«      }t        |«      }|€t        dddd«      S t        ||«      }t        |«      }|�/t        |j                  |j
                  dd|j                  z  «      S |S )a¬  Parse a single :diagram:`qualified rule` or :diagram:`at-rule`.

    This would be used e.g. by `insertRule()
    <https://drafts.csswg.org/cssom/#dom-cssstylesheet-insertrule>`_
    in an implementation of CSSOM.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        If the input is a string, ignore all CSS comments.
    :returns:
        A :class:`~tinycss2.ast.QualifiedRule`,
        :class:`~tinycss2.ast.AtRule`,
        or :class:`~tinycss2.ast.ParseError` objects.

    Any whitespace or comment before or after the rule is dropped.

    r   r   r   r   z4Expected a single rule, got %s after the first rule.)r   r   r   Ú_consume_ruler   r    r   )r   r   r   r!   ÚruleÚnexts         r   Úparse_one_rulerY   4  s‚   € ô(    }Ó5€FÜ˜fÓ%€EØ€}Ü˜!˜Q Ð)9Ó:Ð:ä˜ Ó'€DÜ˜VÓ$€DØÐÜØ×Ñ˜d×0Ñ0°-ØBÀTÇYÁYÑNóPð 	Pð €Kr   c                 óö   — t        | |«      }g }|D ]e  }|j                  dk(  r|rŒ|j                  |«       Œ'|j                  dk(  r|rŒ9|j                  |«       ŒK|j                  t        ||«      «       Œg |S )a  Parse a non-top-level :diagram:`rule list`.

    Deprecated and removed from CSS Syntax. Use :func:`parse_blocks_contents`
    instead.

    This is used for parsing the :attr:`~tinycss2.ast.AtRule.content`
    of nested rules like ``@media``.
    This differs from :func:`parse_stylesheet` in that
    top-level ``<!--`` and ``-->`` tokens are not ignored.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        Ignore CSS comments at the top-level of the list.
        If the input is a string, ignore all comments.
    :type skip_whitespace: :obj:`bool`
    :param skip_whitespace:
        Ignore whitespace at the top-level of the list.
        Whitespace is still preserved
        in the :attr:`~tinycss2.ast.QualifiedRule.prelude`
        and the :attr:`~tinycss2.ast.QualifiedRule.content` of rules.
    :returns:
        A list of
        :class:`~tinycss2.ast.QualifiedRule`,
        :class:`~tinycss2.ast.AtRule`,
        :class:`~tinycss2.ast.Comment` (if ``skip_comments`` is false),
        :class:`~tinycss2.ast.WhitespaceToken`
        (if ``skip_whitespace`` is false),
        and :class:`~tinycss2.ast.ParseError` objects.

    r   r   ©r   r   r:   rV   rO   s         r   Úparse_rule_listr\   V  su   € ôB    }Ó5€FØ€FØò 8ˆØ�:‰:˜Ò%Ú"Ø—‘˜eÕ$Ø�Z‰Z˜9Ò$Ú Ø—‘˜eÕ$à�M‰Mœ-¨¨vÓ6Õ7ð8ð €Mr   c                 ó   — t        | |«      }g }|D ]j  }|j                  dk(  r|rŒ|j                  |«       Œ'|j                  dk(  r|rŒ9|j                  |«       ŒK|dvsŒP|j                  t        ||«      «       Œl |S )a²  Parse :diagram:`stylesheet` from text.

    This is used e.g. for a ``<style>`` HTML element.

    This differs from :func:`parse_rule_list` in that
    top-level ``<!--`` and ``-->`` tokens are ignored.
    This is a legacy quirk for the ``<style>`` HTML element.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        Ignore CSS comments at the top-level of the stylesheet.
        If the input is a string, ignore all comments.
    :type skip_whitespace: :obj:`bool`
    :param skip_whitespace:
        Ignore whitespace at the top-level of the stylesheet.
        Whitespace is still preserved
        in the :attr:`~tinycss2.ast.QualifiedRule.prelude`
        and the :attr:`~tinycss2.ast.QualifiedRule.content` of rules.
    :returns:
        A list of
        :class:`~tinycss2.ast.QualifiedRule`,
        :class:`~tinycss2.ast.AtRule`,
        :class:`~tinycss2.ast.Comment` (if ``skip_comments`` is false),
        :class:`~tinycss2.ast.WhitespaceToken`
        (if ``skip_whitespace`` is false),
        and :class:`~tinycss2.ast.ParseError` objects.

    r   r   )z<!--z-->r[   rO   s         r   Úparse_stylesheetr^   …  s|   € ô>    }Ó5€FØ€FØò 8ˆØ�:‰:˜Ò%Ú"Ø—‘˜eÕ$Ø�Z‰Z˜9Ò$Ú Ø—‘˜eÕ$Ø˜/Ò)Ø�M‰Mœ-¨¨vÓ6Õ7ð8ð €Mr   c                 óP   — | j                   dk(  rt        | |«      S t        | |«      S )aÈ  Parse a qualified rule or at-rule.

    Consume just enough of :obj:`tokens` for this rule.

    :type first_token: :term:`component value`
    :param first_token: The first component value of the rule.
    :type tokens: :term:`iterator`
    :param tokens: An iterator yielding :term:`component values`.
    :returns:
        A :class:`~tinycss2.ast.QualifiedRule`,
        :class:`~tinycss2.ast.AtRule`,
        or :class:`~tinycss2.ast.ParseError`.

    rM   )r   rN   rE   )r&   r   s     r   rV   rV   ²  s,   € ð ×Ñ˜<Ò'Ü ¨VÓ4Ð4Ü" ;°Ó7Ð7r   c                 óò   — g }d}|D ]7  }|j                   dk(  r|j                  } n|dk(  r n|j                  |«       Œ9 t        | j                  | j
                  | j                  | j                  ||«      S )aò  Parse an at-rule.

    Consume just enough of :obj:`tokens` for this rule.

    :type at_keyword: :class:`AtKeywordToken`
    :param at_keyword: The at-rule keyword token starting this rule.
    :type tokens: :term:`iterator`
    :param tokens: An iterator yielding :term:`component values`.
    :type nested: :obj:`bool`
    :param nested: Whether the at-rule is nested or top-level.
    :returns:
        A :class:`~tinycss2.ast.QualifiedRule`,
        or :class:`~tinycss2.ast.ParseError`.

    Nr7   r)   )r   Úcontentr:   r   r   r    r3   r9   )Ú
at_keywordr   Úpreludera   r   s        r   rN   rN   Æ  s‚   € ð  €GØ€GØò ˆØ�:‰:˜Ò#ð —m‘mˆGÙØ�cŠ\ÙØ�‰�uÕðô Ø×Ñ 
× 8Ñ 8¸*×:JÑ:JØ×Ñ ¨ó2ð 2r   c                 óL   — t        | j                  | j                  d|› d�«      S )z6Create rule parse error raised because of given token.r0   z. reached before {} block for a qualified rule.)r   r   r    )r   r;   s     r   Ú_rule_errorre   æ  s/   € äØ×Ñ˜5×.Ñ.°	Øˆ&Ð@ÐAóCð Cr   Nc                 óD  — | |k(  rt        | d«      S | j                  dk(  rg }| }nP| g}|D ]9  }||k(  rt        |d«      c S |j                  dk(  r|} n"|j                  |«       Œ; t        |d   d«      S t        | j                  | j
                  ||j                  «      S )aø  Consume a qualified rule.

    Consume just enough of :obj:`tokens` for this rule.

    :type first_token: :term:`component value`
    :param first_token: The first component value of the rule.
    :type tokens: :term:`iterator`
    :param tokens: An iterator yielding :term:`component values`.
    :type nested: :obj:`bool`
    :param nested: Whether the rule is nested or top-level.
    :type stop_token: :class:`~tinycss2.ast.Node`
    :param stop_token: A token that ends rule parsing when met.

    z
Stop tokenr7   éÿÿÿÿÚEOF)re   r   r:   r   r   r    ra   )r&   r   r,   rD   rc   Úblockr   s          r   rE   rE   í  s¹   € ð  �jÒ Ü˜;¨Ó5Ð5Ø×Ñ˜:Ò%ØˆØ‰à�-ˆØò 
	3ˆEØ˜
Ò"Ü" 5¨,Ó7Ò7Ø�z‰z˜ZÒ'Ø�ñ Ø�N‰N˜5Õ!ð
	3ô ˜w r™{¨EÓ2Ð2ÜØ×Ñ ×!:Ñ!:¸GÀUÇ]Á]óTð Tr   )F)T)FF)FN)Ú	itertoolsr   Úastr   r   r   r   Ú	tokenizerr	   r   r   r#   r'   r-   r%   rH   rK   rR   rT   rY   r\   r^   rV   rN   re   rE   r+   r   r   ú<module>rm      sz   ðÝ ç ?Ó ?Ý 1óò
óó83ò0óG%òTYò*Kó1óh1óhóD,ó^*òZ8ò(2ò@Cð 9>Ø'+ô#Tr   