
    &th                       d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZ erddlmZmZmZ ddlmZ ded
Z G d de          Z G d dee          Zed         Zedef         Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z  G d d          Z! G d d          Z" G d d          Z# G d  d!          Z$ G d" d#          Z% G d$ d%          Z& G d& d'          Z' G d( d)          Z( ej)        d*          Z* ej)        d+          Z+ ej)        d,          Z,dfd/Z-dgd3Z.dhd5Z/	 didjd9Z0dkd;Z1dld=Z2dmd?Z3dndBZ4dodFZ5 G dG dHe6ee	e         f                   Z7 G dI dJe7          Z8 G dK dL          Z9 G dM dNe
          Z:dpdPZ; e;dQ          Z< e;dR          Z= e;dS          Z> e;dT          Z? e;dU           e;dV          dWZ@ ej)        dX          jA        ZB ej)        e9jC        ejD                  jA        ZE ej)        dY          jA        ZF ejG        dZd[          ZHdqd^ZIdrd`ZJdsdcZK G dd d1          ZLdS )tz
cssselect.parser
================

Tokenizer, parser and parsed objects for CSS selectors.


:copyright: (c) 2007-2012 Ian Bicking and contributors.
See AUTHORS for more details.
:license: BSD, see LICENSE for more details.

    )annotationsN)TYPE_CHECKINGLiteralOptionalProtocolUnioncastoverload)IterableIteratorSequence)Selfstringstrreturnc                v    |                      d                                                              d          S )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)r   s    d/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/cssselect/parser.pyascii_lowerr      s.    ==  &&((//777    c                      e Zd ZdZdS )SelectorErrorzCommon parent for :class:`SelectorSyntaxError` and
    :class:`ExpressionError`.

    You can just use ``except SelectorError:`` when calling
    :meth:`~GenericTranslator.css_to_xpath` and handle both exceptions types.

    N__name__
__module____qualname____doc__ r   r   r   r   !   s           r   r   c                      e Zd ZdZdS )SelectorSyntaxErrorz3Parsing a selector that does not match the grammar.Nr   r!   r   r   r#   r#   +   s        ====r   r#   )ElementHashClassFunctionPseudoAttribNegationRelationMatchingSpecificityAdjustmentCombinedSelectorFunctionalPseudoElementc                  4    e Zd ZdZddd	ZddZddZddZdS )Selectoru"  
    Represents a parsed selector.

    :meth:`~GenericTranslator.selector_to_xpath` accepts this object,
    but ignores :attr:`pseudo_element`. It is the user’s responsibility
    to account for pseudo-elements and reject selectors with unknown
    or unsupported pseudo-elements.

    NtreeTreepseudo_elementPseudoElement | Noner   Nonec                n    || _         |$t          |t                    st          |          }|| _        d S N)parsed_tree
isinstancer/   r   r4   )selfr2   r4   s      r   __init__zSelector.__init__L   sD    %j3/
 /
% )88N* -r   r   c                    t          | j        t                    rt          | j                  }n| j        rd| j         }nd}| j        j         d| j        | dS )N:: [])r:   r4   r/   repr	__class__r   r9   )r;   r4   s     r   __repr__zSelector.__repr__h   sp    d)+BCC 	 !$"566NN  	 7$"577NNN.)QQD,<QQQQQr   c                &   t          | j        t                    rd| j                                         }n| j        rd| j         }nd}| j                                         | }t          |          dk    r|                    d          }|S )z8Return a CSS representation for this selector (a string)r>   r?      *)r:   r4   r/   	canonicalr9   lenlstrip)r;   r4   ress      r   rH   zSelector.canonicalq   s    d)+BCC 	 C$"5"?"?"A"ACCNN  	 7$"577NNN!++--?~??s88a<<**S//C
r   tuple[int, int, int]c                ^    | j                                         \  }}}| j        r|dz  }|||fS )zReturn the specificity_ of this selector as a tuple of 3 integers.

        .. _specificity: http://www.w3.org/TR/selectors/#specificity

        rF   )r9   specificityr4   r;   abcs       r   rN   zSelector.specificity~   s=     "..001a 	FA!Qwr   r8   )r2   r3   r4   r5   r   r6   r   r   r   rL   r   r   r   r    r<   rD   rH   rN   r!   r   r   r1   r1   A   sw         - - - - -8R R R R   	 	 	 	 	 	r   r1   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r&   z(
    Represents selector.class_name
    selectorr3   
class_namer   r   r6   c                "    || _         || _        d S r8   )rW   rX   )r;   rW   rX   s      r   r<   zClass.__init__   s     $r   c                @    | j         j         d| j        d| j         dS )Nr@   .rA   )rC   r   rW   rX   r;   s    r   rD   zClass.__repr__   s*    .)PPDMPPdoPPPPr   c                H    | j                                          d| j         S )Nr[   )rW   rH   rX   r\   s    r   rH   zClass.canonical   s&    -))++??do???r   rL   c                P    | j                                         \  }}}|dz  }|||fS NrF   rW   rN   rO   s       r   rN   zClass.specificity   /    -++--1a	Q!Qwr   N)rW   r3   rX   r   r   r6   rS   rT   rU   r!   r   r   r&   r&      sv         % % % %Q Q Q Q@ @ @ @     r   r&   c                  2    e Zd ZdZddZddZdd
ZddZdS )r/   ax  
    Represents selector::name(arguments)

    .. attribute:: name

        The name (identifier) of the pseudo-element, as a string.

    .. attribute:: arguments

        The arguments of the pseudo-element, as a list of tokens.

        **Note:** tokens are not part of the public API,
        and may change between cssselect versions.
        Use at your own risks.

    namer   	argumentsSequence[Token]c                <    t          |          | _        || _        d S r8   )r   rc   rd   )r;   rc   rd   s      r   r<   z FunctionalPseudoElement.__init__   s    %%	"r   r   c                X    d | j         D             }| j        j         d| j         d|dS )Nc                    g | ]	}|j         
S r!   value.0tokens     r   
<listcomp>z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>       @@@@@@r   z[::()])rd   rC   r   rc   r;   token_valuess     r   rD   z FunctionalPseudoElement.__repr__   s=    @@@@@.)LLdiLL,LLLLr   	list[str]c                $    d | j         D             S )Nc                    g | ]	}|j         
S r!   typerk   s     r   rn   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>       777u
777r   rd   r\   s    r   argument_typesz&FunctionalPseudoElement.argument_types       777777r   c                d    d                     d | j        D                       }| j         d| dS )Nr?   c              3  >   K   | ]}|                                 V  d S r8   cssrk   s     r   	<genexpr>z4FunctionalPseudoElement.canonical.<locals>.<genexpr>   *      ??uuyy{{??????r   rp   ))joinrd   rc   r;   argss     r   rH   z!FunctionalPseudoElement.canonical   s=    ww???????)%%d%%%%r   N)rc   r   rd   re   rS   r   rt   )r   r   r   r    r<   rD   r{   rH   r!   r   r   r/   r/      sr         "# # # #M M M M8 8 8 8& & & & & &r   c                  :    e Zd ZdZdd
ZddZddZddZddZdS )r'   z(
    Represents selector:name(expr)
    rW   r3   rc   r   rd   re   r   r6   c                J    || _         t          |          | _        || _        d S r8   )rW   r   rc   rd   )r;   rW   rc   rd   s       r   r<   zFunction.__init__   s#     %%	"r   c                h    d | j         D             }| j        j         d| j        d| j         d|dS )Nc                    g | ]	}|j         
S r!   ri   rk   s     r   rn   z%Function.__repr__.<locals>.<listcomp>   ro   r   r@   :rp   rq   )rd   rC   r   rW   rc   rr   s     r   rD   zFunction.__repr__   sG    @@@@@.)\\DM\\di\\,\\\\r   rt   c                $    d | j         D             S )Nc                    g | ]	}|j         
S r!   rw   rk   s     r   rn   z+Function.argument_types.<locals>.<listcomp>   ry   r   rz   r\   s    r   r{   zFunction.argument_types   r|   r   c                    d                     d | j        D                       }| j                                         d| j         d| dS )Nr?   c              3  >   K   | ]}|                                 V  d S r8   r   rk   s     r   r   z%Function.canonical.<locals>.<genexpr>   r   r   r   rp   r   )r   rd   rW   rH   rc   r   s     r   rH   zFunction.canonical   sS    ww???????-))++AAdiAA$AAAAr   rL   c                P    | j                                         \  }}}|dz  }|||fS r_   r`   rO   s       r   rN   zFunction.specificity   ra   r   N)rW   r3   rc   r   rd   re   r   r6   rS   r   rT   )	r   r   r   r    r<   rD   r{   rH   rN   r!   r   r   r'   r'      s         # # # #
] ] ] ]8 8 8 8B B B B     r   r'   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r(   z#
    Represents selector:ident
    rW   r3   identr   r   r6   c                <    || _         t          |          | _        d S r8   )rW   r   r   )r;   rW   r   s      r   r<   zPseudo.__init__   s      ''


r   c                @    | j         j         d| j        d| j         dS )Nr@   r   rA   )rC   r   rW   r   r\   s    r   rD   zPseudo.__repr__   s*    .)KKDMKKdjKKKKr   c                H    | j                                          d| j         S )Nr   )rW   rH   r   r\   s    r   rH   zPseudo.canonical   s&    -))++::dj:::r   rL   c                P    | j                                         \  }}}|dz  }|||fS r_   r`   rO   s       r   rN   zPseudo.specificity   ra   r   N)rW   r3   r   r   r   r6   rS   rT   rU   r!   r   r   r(   r(      sr         ( ( ( (L L L L; ; ; ;     r   r(   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r*   z.
    Represents selector:not(subselector)
    rW   r3   subselectorr   r6   c                "    || _         || _        d S r8   )rW   r   )r;   rW   r   s      r   r<   zNegation.__init__   s     &r   r   c                @    | j         j         d| j        d| j        dS )Nr@   :not(rq   rC   r   rW   r   r\   s    r   rD   zNegation.__repr__   +    .)XXDMXX$BRXXXXr   c                    | j                                         }t          |          dk    r|                    d          }| j                                         d| dS )NrF   rG   r   r   )r   rH   rI   rJ   rW   r;   subsels     r   rH   zNegation.canonical   s[    !++--v;;??]]3''F-))++;;&;;;;r   rL   c                    | j                                         \  }}}| j                                        \  }}}||z   ||z   ||z   fS r8   rW   rN   r   r;   a1b1c1a2b2c2s          r   rN   zNegation.specificity  N    ]..00
B%1133
BBwRb((r   N)rW   r3   r   r3   r   r6   rS   rT   rU   r!   r   r   r*   r*      sr         ' ' ' 'Y Y Y Y< < < <) ) ) ) ) )r   r*   c                  2    e Zd ZdZddZddZddZddZdS )r+   z.
    Represents selector:has(subselector)
    rW   r3   
combinatorTokenr   r1   c                0    || _         || _        || _        d S r8   rW   r   r   r;   rW   r   r   s       r   r<   zRelation.__init__  s     $&r   r   r   c                @    | j         j         d| j        d| j        dS )Nr@   :has(rq   r   r\   s    r   rD   zRelation.__repr__  r   r   c                $   	 | j         d                                         }n)# t          $ r | j                                         }Y nw xY wt          |          dk    r|                    d          }| j                                         d| dS )Nr   rF   rG   r   r   )r   rH   	TypeErrorrI   rJ   rW   r   s     r   rH   zRelation.canonical  s    	2%a(2244FF 	2 	2 	2%//11FFF	2v;;??]]3''F-))++;;&;;;;s   " #AArL   c                    | j                                         \  }}}	 | j        d                                         \  }}}n-# t          $ r  | j                                        \  }}}Y nw xY w||z   ||z   ||z   fS )N)rW   rN   r   r   r   s          r   rN   zRelation.specificity  s    ]..00
B	8)"-99;;JBBB 	8 	8 	8)5577JBBBB	8BwRb((s   #A 'A-,A-N)rW   r3   r   r   r   r1   rS   rT   rU   r!   r   r   r+   r+   	  sr         ' ' ' '
Y Y Y Y< < < <) ) ) ) ) )r   r+   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r,   z/
    Represents selector:is(selector_list)
    rW   r3   selector_listIterable[Tree]c                "    || _         || _        d S r8   rW   r   r;   rW   r   s      r   r<   zMatching.__init__-       *r   r   r   c                ~    d                     d | j        D                       }| j        j         d| j        d| dS )N, c              3  4   K   | ]}t          |          V  d S r8   rB   rl   ss     r   r   z$Matching.__repr__.<locals>.<genexpr>2  (      AAT!WWAAAAAAr   r@   :is(rq   r   r   rC   r   rW   r;   args_strs     r   rD   zMatching.__repr__1  sK    99AAd.@AAAAA.)MMDMMMMMMMr   c                   g }| j         D ]>}|                                }|                    |                    d                     ?d                    d |D                       }| j                                         d| dS )NrG   r   c              3  4   K   | ]}t          |          V  d S r8   r   r   s     r   r   z%Matching.canonical.<locals>.<genexpr>:  (      @@SVV@@@@@@r   r   r   r   rH   appendrJ   r   rW   r;   selector_argumentsr   selargr   s        r   rH   zMatching.canonical5  s    # 	: 	:A[[]]F%%fmmC&8&8999999@@-?@@@@@-))++<<<<<<r   rL   c                >    t          d | j        D                       S )Nc              3  >   K   | ]}|                                 V  d S r8   )rN   )rl   xs     r   r   z'Matching.specificity.<locals>.<genexpr>>  s*      ??q1==????????r   )maxr   r\   s    r   rN   zMatching.specificity=  s"    ??D,>??????r   N)rW   r3   r   r   rS   rT   rU   r!   r   r   r,   r,   (  sx         + + + +N N N N= = = =@ @ @ @ @ @r   r,   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r-   zz
    Represents selector:where(selector_list)
    Same as selector:is(selector_list), but its specificity is always 0
    rW   r3   r   
list[Tree]c                "    || _         || _        d S r8   r   r   s      r   r<   zSpecificityAdjustment.__init__G  r   r   r   r   c                ~    d                     d | j        D                       }| j        j         d| j        d| dS )Nr   c              3  4   K   | ]}t          |          V  d S r8   r   r   s     r   r   z1SpecificityAdjustment.__repr__.<locals>.<genexpr>L  r   r   r@   :where(rq   r   r   s     r   rD   zSpecificityAdjustment.__repr__K  sK    99AAd.@AAAAA.)PPDMPPHPPPPr   c                   g }| j         D ]>}|                                }|                    |                    d                     ?d                    d |D                       }| j                                         d| dS )NrG   r   c              3  4   K   | ]}t          |          V  d S r8   r   r   s     r   r   z2SpecificityAdjustment.canonical.<locals>.<genexpr>T  r   r   r   r   r   r   s        r   rH   zSpecificityAdjustment.canonicalO  s    # 	: 	:A[[]]F%%fmmC&8&8999999@@-?@@@@@-))++??H????r   rL   c                    dS )Nr   r   r   r!   r\   s    r   rN   z!SpecificityAdjustment.specificityW  s    wr   N)rW   r3   r   r   rS   rT   rU   r!   r   r   r-   r-   A  sv         
+ + + +Q Q Q Q@ @ @ @     r   r-   c                  b    e Zd ZdZedd            Zedd            ZddZddZddZddZdS )r)   z>
    Represents selector[namespace|attrib operator value]
    rW   r3   	namespace
str | Noneattribr   operatorLiteral['exists']rj   r6   r   c                    d S r8   r!   r;   rW   r   r   r   rj   s         r   r<   zAttrib.__init__`  	     sr   r   c                    d S r8   r!   r   s         r   r<   zAttrib.__init__j  r   r   Token | Nonec                L    || _         || _        || _        || _        || _        d S r8   )rW   r   r   r   rj   r   s         r   r<   zAttrib.__init__t  s+     !" 


r   c           
         | j         r| j          d| j         n| j        }| j        dk    r| j        j         d| j        d| dS | j        J | j        j         d| j        d| d| j         d| j        j        d
S )N|existsr@   z]] )r   r   r   rC   r   rW   rj   )r;   r   s     r   rD   zAttrib.__repr__  s    6:nUDN22T[222$+=H$$n-LLLL&LLLLz%%%.)mmDMmmfmmt}mmW[WaWgmmmmr   c                    | j         r| j          d| j         n| j        }| j        dk    r|}n-| j        J | | j         | j                                         }| j                                         d| dS )Nr   r   r@   rA   )r   r   r   rj   r   rW   rH   )r;   r   ops      r   rH   zAttrib.canonical  s    6:nUDN22T[222$+=H$$BB:)))=DM=4:>>+;+;==B-))++33b3333r   rL   c                P    | j                                         \  }}}|dz  }|||fS r_   r`   rO   s       r   rN   zAttrib.specificity  ra   r   N)rW   r3   r   r   r   r   r   r   rj   r6   r   r6   )rW   r3   r   r   r   r   r   r   rj   r   r   r6   )rW   r3   r   r   r   r   r   r   rj   r   r   r6   rS   rT   )	r   r   r   r    r
   r<   rD   rH   rN   r!   r   r   r)   r)   [  s             X    X   n n n n	4 	4 	4 	4     r   r)   c                  6    e Zd ZdZ	 dddZdd
ZddZddZdS )r$   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nr   r   elementr   r6   c                "    || _         || _        d S r8   )r   r   )r;   r   r   s      r   r<   zElement.__init__  s     #r   r   c                J    | j         j         d|                                  dS )Nr@   rA   )rC   r   rH   r\   s    r   rD   zElement.__repr__  s(    .)??DNN,<,<????r   c                >    | j         pd}| j        r| j         d| }|S )NrG   r   )r   r   )r;   r   s     r   rH   zElement.canonical  s2    ,%#> 	433'33Gr   rL   c                    | j         rdS dS )N)r   r   rF   r   r   r\   s    r   rN   zElement.specificity  s    < 	7wr   )NN)r   r   r   r   r   r6   rS   rT   rU   r!   r   r   r$   r$     s~          CG    @ @ @ @        r   r$   c                  2    e Zd ZdZddZdd	Zdd
ZddZdS )r%   z 
    Represents selector#id
    rW   r3   idr   r   r6   c                "    || _         || _        d S r8   )rW   r   )r;   rW   r   s      r   r<   zHash.__init__  s     r   c                @    | j         j         d| j        d| j         dS )Nr@   #rA   )rC   r   rW   r   r\   s    r   rD   zHash.__repr__  s*    .)HHDMHHdgHHHHr   c                H    | j                                          d| j         S )Nr   )rW   rH   r   r\   s    r   rH   zHash.canonical  s&    -))++77dg777r   rL   c                P    | j                                         \  }}}|dz  }|||fS r_   r`   rO   s       r   rN   zHash.specificity  ra   r   N)rW   r3   r   r   r   r6   rS   rT   rU   r!   r   r   r%   r%     sr            I I I I8 8 8 8     r   r%   c                  .    e Zd ZddZdd	Zdd
ZddZdS )r.   rW   r3   r   r   r   r   r6   c                8    |J || _         || _        || _        d S r8   r   r   s       r   r<   zCombinedSelector.__init__  s*    ### $&r   c                n    | j         dk    rdn| j         }| j        j         d| j        d| d| j        dS )Nr   z
<followed>r@   rA   )r   rC   r   rW   r   )r;   combs     r   rD   zCombinedSelector.__repr__  sL    ##55||4?~&WWWW4WW$BRWWW	
r   c                    | j                                         }t          |          dk    r|                    d          }| j                                         d| j         d| S )NrF   rG   r   )r   rH   rI   rJ   rW   r   r   s     r   rH   zCombinedSelector.canonical  sb    !++--v;;??]]3''F-))++HHdoHHHHHr   rL   c                    | j                                         \  }}}| j                                        \  }}}||z   ||z   ||z   fS r8   r   r   s          r   rN   zCombinedSelector.specificity  r   r   N)rW   r3   r   r   r   r3   r   r6   rS   rT   )r   r   r   r<   rD   rH   rN   r!   r   r   r.   r.     sh        ' ' ' '
 
 
 
I I I I) ) ) ) ) )r   r.   z%^[ \t\r\n\f]*([a-zA-Z]+)[ \t\r\n\f]*$z6^[ \t\r\n\f]*([a-zA-Z]*)#([a-zA-Z0-9_-]+)[ \t\r\n\f]*$z?^[ \t\r\n\f]*([a-zA-Z]*)\.([a-zA-Z][a-zA-Z0-9_-]*)[ \t\r\n\f]*$r   list[Selector]c           	        t                               |           }|r1t          t          |                    d                              gS t
                              |           }|Tt          t          t          |                    d          pd          |                    d                              gS t                              |           }|Tt          t          t          |                    d          pd          |                    d                              gS t          t          |                     }| |_        t          t          |                    S )a  Parse a CSS *group of selectors*.

    If you don't care about pseudo-elements or selector specificity,
    you can skip this and use :meth:`~GenericTranslator.css_to_xpath`.

    :param css:
        A *group of selectors* as a string.
    :raises:
        :class:`SelectorSyntaxError` on invalid selectors.
    :returns:
        A list of parsed :class:`Selector` objects, one for each
        selector in the comma-separated group.

    rF   r   N   )_el_rematchr1   r$   group_id_rer%   	_class_rer&   TokenStreamtokenizesourcelistparse_selector_group)r   r  streams      r   parser    s(     LLE ;Q88899::LLEgekk!nn.DEEEu{{ST~~VVWWXXOOC  EU75;;q>>+ATBBBEKKPQNNSSTT
 	
 #''FFM$V,,---r   r  r  Iterator[Selector]c              #     K   |                                   	 t          t          |            V  |                                 dk    r)|                                  |                                   nd S \)NrF   DELIM,)skip_whitespacer1   parse_selectorpeeknext)r  s    r   r  r    su      
v..////;;==N**KKMMM""$$$$Er   !tuple[Tree, PseudoElement | None]c                   t          |           \  }}	 |                                  |                                 }|dv rn|rt          d| d          |                    ddd          rAt          t          |                                 j                  }|                                  nd}t          |           \  }}t          |||          }||fS )	NrF   )EOFNr  Got pseudo-element :: not at the end of a selector+>~r   )
parse_simple_selectorr  r  r#   is_delimr	   r   r  rj   r.   )r  resultr4   r  r   next_selectors         r   r  r  (  s    26::FNE   {{}}222 	%UUUU   ==c3'' 	c6;;==#677J""$$$$ J(=f(E(E%~!&*mDD%E& >!!r   Finside_negationboolc                   |                                   t          | j                  }|                                 }|j        dk    s|dk    r|j        dk    r|                                 j        }n|                                  d }|                                 dk    r)|                                  |                                 }n	|}d }nd x}}t          ||          }d }	 |                                 }|j        dv s |	                    dddd	          s|r|d
k    rn|rt          d| d          |j        dk    r<t          |t          t          |                                 j                            }n;|dk    r8|                                  t          ||                                           }n|dk    r8|                                  t          d |                                           }n|dk    r&|                                  t!          ||           }n|dk    rz|                                  |                                 dk    rs|                                  |                                 }|                                 dk    r1|                                  t#          |t%          |                     }|                                 }|                                dv rt          |          }%|                                 dk    r t)          ||          }t+          |          dk    rt          | j                  dk    st          | j                  dk    r| j        d         j        dk    st          | j                  dk    r | j        d         	                    d          s]t          | j                  dk    r6| j        d         j        dk    r | j        d         	                    d          st          d          >|                                  |                                   |                                dk    r~|rt          d          t-          | d          \  }	}
|                                 }|
rt          d|
 d |j                   |d
k    rt          d!|           t1          ||	          }n|                                d"k    r$t3          |           \  }}t5          |||          }n|                                d#v r t7          |           }t9          ||          }ni|                                d$k    r t7          |           }t;          ||          }n1t=          ||t%          |                     }nt          d%|           t          | j                  |k    r$t          d%|                                            ||fS )&NIDENTr  rG   r  r   rF   )Sr#  r  r&  r'  r(  r  r   r$  r%  HASHr  r[   )r  r@   )r  r   )r  rp   )z
first-linezfirst-letterbeforeafterzPseudo[Element[*]:scope]r
     r   r3     zJGot immediate child pseudo-element ":scope" not at the start of a selectornotzGot nested :not()T)r-  z inside :not() at zExpected ')', got has)matchesiswherezExpected selector, got )r  rI   usedr  rx   r  rj   next_ident_or_starr$   r*  r#   r%   r	   r   r&   
next_identparse_attribr/   parse_argumentsr   r(   rB   r)  posr*   parse_relative_selectorr+   parse_simple_selector_argumentsr,   r-   r'   )r  r-  selector_startr  r   r   r+  r4   r   argumentargument_pseudo_elementr  r   rd   	selectorss                  r   r)  r)  @  s    %%N;;==DyGt~559+IIKKMMMI;;==N**KKMMM//11GGGII"")9g..F+/NVH{{}}I%%}}S#sC00 & &$(N$:$: 	%UUUU   9&$sFKKMM,?"@"@AAFF^##KKMMM66#4#4#6#677FF^##KKMMMT6#4#4#6#677FF^##KKMMM!&&11FF^##KKMMM{{}}..!'!2!2!4!4;;==N22KKMMM%<&(?(?& &N %%''E{{}} QQQ "%U{{}}....<<#===$$))FK((A--&+a.2E2L2LFK((A--&+b/2J2J32O2O-FK((A--"KO0C77"KO44S99 8 .9   KKMMM""$$${{}}%%" C-.ABBB4ID5 5 511 {{}}* -e0Gee[_[cee   >))-.I4.I.IJJJ!&(33%''(?(G(G%
I!&*i@@"333;FCC	!&)44'));FCC	.vyAA!&%1H1HII%&F&F&FGGGmVHn 6;>))!"KFKKMM"K"KLLL>!!r   list[Token]c                    g }	 |                                   |                                 }|j        dv s|dv r|                    |           n|dk    r|S t	          d|           f)NrF   r0  STRINGNUMBER)r  r&  r  -r4  Expected an argument, got )r  r  rx   r   r#   )r  rd   r  s      r   rF  rF    s    IK   {{}}9555 B
 :
 :
 T""""^##%&I4&I&IJJJKr   tuple[Token, Selector]c                   |                                   d}|                                 }|dv r+|}|                                   |                                 }nt          ddd          }	 |j        dv s|d	v r|t	          t
          |j                  z  }n1|d
k    rt          |          }||d         fS t          d|           |                                 }q)Nr?   )rS  rT  )r  r'  )r  r(  r  r   r   rG  rF   rP  )r6  r1  r4  rV  )	r  r  r   rx   r	   r   rj   r  r#   )r  r   r  r   r+  s        r   rH  rH    s    
K;;==DOOO
   {{}}7CQ///
9555 B
 :
 :
 4TZ000KK^##;''Fvay((%&I4&I&IJJJ{{}}r   r   c                   g }	 t          | d          \  }}|rt          d| d          |                                  |                                 }|dv r>|                                  |                                  |                    |           n.|dk    r|                    |           nt          d|           |S )NrF   Tr$  z inside functionr"  r4  rV  )r)  r#   r  r  r   )r  rd   r+  r4   r  s        r   rI  rI    s    IK!6vt!D!D 	%HHHH   	   {{}}222KKMMM""$$$V$$$$^##V$$$%&I4&I&IJJJ!K" r   rW   r3   c                   |                                  |                                }|<|                                dk    r$t          d|                                           |                                dk    r^|                                 |                                dk    rd }|                                 d}n|}|                                }d }nd x}}||                                  |                                }|dk    r&t          | |t          t          |          dd           S |dk    rd}nv|	                    dd	d
ddd          rJ|                                dk    r2t          t          |j
                  dz   }|                                 nt          d|           |                                  |                                }|j        dvrt          d|           |                                  |                                }|dk    rt          d|           t          | |t          t          |          ||          S )Nr2  zExpected '|', got )r  =z|=)r  rA   r   r\  ^$rG   r(  r   !zOperator expected, got )r0  rQ  zExpected string or ident, got zExpected ']', got )r  rC  r  r#   r  rD  r)   r	   r   r*  rj   rx   )rW   r  r   r   r   r  rj   s          r   rE  rE    sD   
&&((F~&++-->99!"Fv{{}}"F"FGGG {{}}&&;;==N**IKKMMMBBI&&((FBB	B	z   {{}}>!!(ItC/@/@(DQQQ>!!BB]]3S#sC88 	HKKMM^++c4:&&,BKKMMMM%&F&F&FGGG
KKMMEz,,,!"J5"J"JKKK
;;==D~!"=t"="=>>>(ItC'8'8"eDDDr   tokensIterable[Token]tuple[int, int]c                   | D ]}|j         dk    rt          d          d                    d | D                                                       }|dk    rdS |dk    rdS |d	k    rd
S d	|vrdt	          |          fS |                    d	d          \  }}|sd}n&|dv rt	          |dz             }nt	          |          }|rt	          |          nd}||fS )zv
    Parses the arguments for :nth-child() and friends.

    :raises: A list of tokens
    :returns: :``(a, b)``

    rQ  z$String tokens not allowed in series.r?   c              3  J   K   | ]}t          t          |j                  V  d S r8   )r	   r   rj   rk   s     r   r   zparse_series.<locals>.<genexpr>)  s.      ;;5S%+&&;;;;;;r   odd)r
  rF   even)r
  r   n)rF   r   r   rF   >   r&  rU  1)rx   
ValueErrorr   stripintsplit)r`  rm   r   rP   rQ   a_as_intb_as_ints          r   parse_seriesro    s     E E:!!CDDD "
;;F;;;;;AACCAEzztF{{tCxxt
!||#a&&y773??DAq 	
jq3w<<q66!s1vvvHXr   c                      e Zd ZU edd	            Zedd            ZddZddZddZded<   edd            Z	edd            Z
ddZdS )r   type_:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']rj   r   rG  rk  r   r   c                    d S r8   r!   clsrq  rj   rG  s       r   __new__zToken.__new__C  s	     sr   Literal['EOF']r6   c                    d S r8   r!   rt  s       r   rv  zToken.__new__K  s    LOCr   r   c                N    t                               | ||f          }||_        |S r8   )tuplerv  rG  )ru  rq  rj   rG  objs        r   rv  zToken.__new__N  s%    mmC%00
r   c                8    d| j          d| j         d| j         dS )N<z 'z' at r'  )rx   rj   rG  r\   s    r   rD   zToken.__repr__S  s)    <49<<
<<<<<<r   valuesr.  c                *    | j         dk    o| j        |v S )Nr  )rx   rj   )r;   r~  s     r   r*  zToken.is_delimV  s    yG#<
f(<<r   c                    | d         S )Nr   r!   r\   s    r   rx   z
Token.type[      Awr   c                    | d         S r_   r!   r\   s    r   rj   zToken.value_  r  r   c                t    | j         dk    rt          | j                  S t          t          | j                  S )NrQ  )rx   rB   rj   r	   r   r\   s    r   r   z	Token.cssc  s1    9  
###C$$$r   N)rq  rr  rj   r   rG  rk  r   r   )rq  rw  rj   r6   rG  rk  r   r   )rq  r   rj   r   rG  rk  r   r   rS   )r~  r   r   r.  r   r   )r   r   r   r
   rv  rD   r*  __annotations__propertyrx   rj   r   r!   r   r   r   r   B  s            X OOO XO   
= = = == = = = HHH   X    X% % % % % %r   r   c                      e Zd Zd	dZd
dZdS )EOFTokenrG  rk  r   r   c                <    t                               | dd |          S )Nr#  )r   rv  )ru  rG  s     r   rv  zEOFToken.__new__j  s    }}S%s333r   r   c                (    d| j          d| j         dS )Nr}  z at r'  )rx   rG  r\   s    r   rD   zEOFToken.__repr__m  s    -49--$(----r   N)rG  rk  r   r   rS   )r   r   r   rv  rD   r!   r   r   r  r  i  s<        4 4 4 4. . . . . .r   r  c                  J    e Zd ZdZedz   Zdez   ZdZde de Zde de ZdS )	TokenMacrosz&\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?z|\\[^\n\r\f0-9a-f]z\\(?:\n|\r\n|\r|\f)|z
[^\0-\177]z[_a-z0-9-]|r   z[_a-z]|N)	r   r   r   unicode_escapeescapestring_escapenonasciinmcharnmstartr!   r   r   r  r  t  sW        >N33F+f4MH.6..H..F+++++GGGr   r  c                      e Zd Z	 ddd	Zd
S )	MatchFunc.r   r   rG  rk  endposr   re.Match[str] | Nonec                    d S r8   r!   )r;   r   rG  r  s       r   __call__zMatchFunc.__call__~  s    "sr   N)..)r   r   rG  rk  r  rk  r   r  )r   r   r   r  r!   r   r   r  r  }  s0        9<# # # # # # #r   r  patternc                t    t          j        | t          t                    z  t           j                  j        S r8   )recompilevarsr  
IGNORECASEr  )r  s    r   _compiler    s&    :g[ 1 112=AAGGr   z[ \t\r\n\f]+z[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)z#(?:%(nmchar)s)+z -?(?:%(nmstart)s)(?:%(nmchar)s)*z!([^\n\r\f\\']|%(string_escape)s)*z!([^\n\r\f\\"]|%(string_escape)s)*)'"z\\(.)z\\(?:\n|\r\n|\r|\f)r  rF   r  re.Match[str]c                    t          |                     d          d          }|t          j        k    rd}t	          |          S )NrF      i  )rk  r  sys
maxunicodechr)r  	codepoints     r   _replace_unicoder    s9    EKKNNB''I3>!!	y>>r   rj   c                V    t          t          |           } t          t          |           S r8   )_sub_unicode_escaper  _sub_simple_escape_replace_simpleri   s    r   unescape_identr    s"     0%88Eou555r   r   Iterator[Token]c              #    K   d}t          |           }||k     rt          | |          }|r(t          dd|          V  |                                }Bt	          | |          }|rbt          t          t          t          |	                                                    }t          d||          V  |                                }t          | |          }|rkt          t          t          t          |	                                dd                              }t          d||          V  |                                }5| |         }|t          v rt          |         | |dz             }|s
J d            |                                }||k    rt          d	|           | |         |k    rt          d
|           t          t          t          t          t          d|	                                                              }t          d||          V  |dz   }t          | |          }|r=|	                                }t          d||          V  |                                }h|dz   }| ||         dk    r&|                     d|          }|dk    r|}n|dz  }t          d| |         |          V  |dz  }||k     ||k    sJ t!          |          V  d S )Nr   rY  r3  r   r0  rF   r5  z)Should have found at least an empty matchzUnclosed string at zInvalid string at r?   rQ  rR  r
  z/*z*/r   r  )rI   _match_whitespacer   end_match_identr  r  r  r  r  _match_hash_match_string_by_quoter#   _sub_newline_escape_match_numberfindr  )r   rG  len_sr  rj   quoteend_pospos2s           r   r  r    s+     
CFFE
++!!--- 	S#&&&&&))++CQC((( 	&!45Eu{{}}!U!U E ,,,,,))++CA3''' 	&#$4ekkmmABB6GHH E s+++++))++C#****51!qAAAEEEEEE5iikkG%)*E*E*EFFFzU"")*Ds*D*DEEE&#$&9"ekkmm&L&L  E %-----A+CaS))) 	KKMME%-----))++CQwSX;$&&t$$CbyyqGQsVS)))))q} ++@ %<<<<
3--r   c                  @    e Zd ZdddZdd
ZddZddZddZddZdS )r  Nr`  ra  r  r   r   r6   c                    g | _         t          |          | _        || _        d | _        d| _        | j        j        | _        d S NF)rB  iterr`  r  peeked_peeking__next__
next_token)r;   r`  r  s      r   r<   zTokenStream.__init__  s;    !#	6ll$(+.r   r   c                    | j         r6d| _         | j        J | j                            | j                   | j        S |                                 }| j                            |           |S r  )r  r  rB  r   r  r;   r  s     r   r  zTokenStream.next  sk    = 	!DM;***IT[)));  	r   c                p    | j         s |                                 | _        d| _         | j        J | j        S )NT)r  r  r  r\   s    r   r  zTokenStream.peek  s:    } 	!//++DK DM{&&&{r   r   c                    |                                  }|j        dk    rt          d|           t          t          |j                  S )Nr0  zExpected ident, got )r  rx   r#   r	   r   rj   r  s     r   rD  zTokenStream.next_ident  sE    yy{{9%&CT&C&CDDDC$$$r   c                    |                                  }|j        dk    r|j        S |dk    rd S t          d|           )Nr0  r1  zExpected ident or '*', got )r  rx   rj   r#   r  s     r   rC  zTokenStream.next_ident_or_star  sK    yy{{9:>!!4!"F"F"FGGGr   c                p    |                                  }|j        dk    r|                                  d S d S )Nr3  )r  rx   r  )r;   r  s     r   r  zTokenStream.skip_whitespace  s5    yy{{9IIKKKKK r   r8   )r`  ra  r  r   r   r6   )r   r   rS   r  )r   r6   )	r   r   r   r<   r  r  rD  rC  r  r!   r   r   r  r    s        / / / / /      % % % %H H H H     r   )r   r   r   r   )r   r   r   r  )r  r  r   r  )r  r  r   r   )F)r  r  r-  r.  r   r   )r  r  r   rN  )r  r  r   rW  )r  r  r   r   )rW   r3   r  r  r   r)   )r`  ra  r   rb  )r  r   r   r  )r  r  r   r   )rj   r   r   r   )r   r   r   r  )Mr    
__future__r   r   r  r  typingr   r   r   r   r   r	   r
   collections.abcr   r   r   typing_extensionsr   r   	Exceptionr   SyntaxErrorr#   r3   r   PseudoElementr1   r&   r/   r'   r(   r*   r+   r,   r-   r)   r$   r%   r.   r  r  r  r  r  r  r  r)  rF  rH  rI  rE  ro  rz  r   r  r  r  r  r  r  r  r  r  subr  r  r  r  r  methodcallerr  r  r  r  r  r!   r   r   <module>r     so    # " " " " "  				 



 T T T T T T T T T T T T T T T T T T '<<<<<<<<<< '&&&&&8 8 8 8
    I   > > > > >- > > > 
 /45F F F F F F F FR       *& & & & & & & &D       6       *) ) ) ) ) ) ) )0) ) ) ) ) ) ) )>@ @ @ @ @ @ @ @2       4< < < < < < < <~       :       *) ) ) ) ) ) ) )8 
<	=	= 
M	N	N BJF 	
. . . .T   " " " "2 27o" o" o" o" o"dK K K K    4   ,)E )E )E )EX   H$% $% $% $% $%E#x}$% $% $% $%N. . . . .u . . ., , , , , , , ,# # # # # # # #H H H H H_-- :;;h)**x:;;	6	7	7	6	7	7  
  RZ))-  bj!;R]KKO  bj!788<  (('33   6 6 6 6
D D D DN+ + + + + + + + + +r   