
    BhJ                         S SK Jr  SSKJrJrJrJr  SSKJr  SS jr	S r
SS jrSS jrS	 rSS
 jrS rS rSS jrSS jrSS jrSS jrSS jrS rS rS r  SS jrg)    )chain   )AtRuleDeclaration
ParseErrorQualifiedRule)parse_component_value_listc                 X    [        U [        5      (       a  [        X5      n [        U 5      $ )aY  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     A/var/www/html/env/lib/python3.13/site-packages/tinycss2/parser.py_to_token_iteratorr      s%     %*5@;    c                 >    U  H  nUR                   S;  d  M  Us  $    g)zReturn 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                     [        X5      n[        U5      n[        U5      nUc  [        SSSS5      $ Ub"  [        UR                  UR                  SS5      $ U$ )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#   #   si      5Ff%Ev&F}!Q)9:: 4 4m%' 	' r   c                 f    [        X5      n[        U5      nUc  [        SSSS5      $ [        X25      $ )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;    "  5F#F+K!Q)9::k22r   c                 H    U  H  nUS:X  a    g U(       d  M  US:X  d  M    g    g )N;} )r   nestedr   s      r   _consume_remnantsr-   W   s$    C<V	 r   c           	         U nUR                   S:w  a;  [        X5        [        UR                  UR                  SSUR                    S35      $ [        U5      nUc-  [        X5        [        UR                  UR                  SS5      $ US:w  a-  [        X5        [        UR                  UR                  SS5      $ / nS	nS
nS
n[        U5       H  u  pUS	:X  a  U
S:X  a  SnU	nOZUS:X  a#  U
R                   S:X  a  U
R                  S:X  a  SnO1U
R                   S;  a!  S	nU
R                   S:X  a  U(       a  SnOSnOSnUR                  U
5        M     US:X  a  UWS2	 U(       a)  U(       a"  [        UR                  UR                  SS5      $ [        UR                  UR                  UR                  UR                  XVS:H  5      $ )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yyG&)d00)9$))AFH 	H f%E}&)d00):< 	< 
#&)u22IDF 	F EE#!f%GEMvo%**"7%%4EZZ88EzzZ'*,0).2+*.'U! &$ -.! !8u22I+- 	- $,,djj$:J:J#% %r   c                 :   / n/ nU S:w  aU  U R                   S:w  aE  U H?  nUS:X  a  UR                  U5          O'UR                  U5        UR                   S:X  d  M?    O   [        U [        U5      SS9nUR                   S:X  a  U$ [	        X#U5      n[        XSSS9$ )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,zzZ'  %T,-d<K=()FC&{sSWXXr   c                 t    / nU H  nUS:X  a    OUR                  U5        M     [        U [        U5      5      $ )zyLike :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      sA      "C< ''.  k40H+IJJr   c                 ~   [        X5      n/ nU H  nUR                  S:X  a  U(       d  UR                  U5        M-  M/  UR                  S:X  a  U(       d  UR                  U5        MY  M[  UR                  S:X  a  UR                  [        XS5      5        M  US:w  d  M  UR                  [	        XS5      5        M     U$ )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  5FF::%"e$ #ZZ9$ e$ !ZZ<'MM*59:c\MM1%@A  Mr   c                 ~   [        X5      n/ nU H  nUR                  S:X  a  U(       d  UR                  U5        M-  M/  UR                  S:X  a  U(       d  UR                  U5        MY  M[  UR                  S:X  a  UR                  [        XS5      5        M  US:w  d  M  UR                  [	        XS5      5        M     U$ )u9  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  5FF::%"e$ #ZZ9$ e$ !ZZ<'MM*59:c\MM6uEF  Mr   c                     [        X5      n[        U5      nUc  [        SSSS5      $ [        X25      n[        U5      nUb/  [        UR                  UR
                  SSUR                  -  5      $ U$ )at  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~    (  5Ff%E}!Q)9::'DV$Dd00-BTYYNP 	P Kr   c                    [        X5      n/ nU Hu  nUR                  S:X  a  U(       d  UR                  U5        M-  M/  UR                  S:X  a  U(       d  UR                  U5        MY  M[  UR                  [        XS5      5        Mw     U$ )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  sx    B  5FF::%"e$ #ZZ9$ e$ ! MM-67  Mr   c                 &   [        X5      n/ nU H}  nUR                  S:X  a  U(       d  UR                  U5        M-  M/  UR                  S:X  a  U(       d  UR                  U5        MY  M[  US;  d  Mc  UR                  [        XS5      5        M     U$ )aN  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}    >  5FF::%"e$ #ZZ9$ e$ !/)MM-67  Mr   c                 N    U R                   S:X  a  [        X5      $ [        X5      $ )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(     <'44";77r   c                     / nSnU H:  nUR                   S:X  a  UR                  n  OUS:X  a    OUR                  U5        M<     [        U R                  U R
                  U R                  U R                  X#5      $ )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::# mmGc\u  
 8 8*:J:J2 2r   c                 L    [        U R                  U R                  SU S35      $ )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                 J   X:X  a  [        U S5      $ U R                  S:X  a  / nU nOSU /nU H;  nXc:X  a  [        US5      s  $ UR                  S:X  a  Un  O$UR                  U5        M=     [        US   S5      $ [        U R                  U R
                  XER                  5      $ )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       ;55:%-E""5,77zzZ' NN5!  wr{E22!:!:G]]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30G%TY*K1h1hD,^*Z8(2@C 9>'+#Tr   