
    h                       S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	J
r
JrJrJr  \(       a  SSKJrJrJr  SSKJr  SLS jr " S S	\5      r " S
 S\\5      r\S   r\S\4   r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r  " S S5      r! " S S5      r" " S S5      r# " S S5      r$ " S S 5      r% " S! S"5      r& " S# S$5      r' " S% S&5      r(\RR                  " S'5      r*\RR                  " S(5      r+\RR                  " S)5      r,SMS* jr-SNS, jr.SOS- jr/ SP     SQS. jjr0SRS/ jr1SSS0 jr2STS1 jr3SUS2 jr4SVS3 jr5 " S4 S5\6\\	\   4   5      r7 " S6 S7\75      r8 " S8 S95      r9 " S: S;\
5      r:SWS< jr;\;" S=5      r<\;" S>5      r=\;" S?5      r>\;" S@5      r?\;" SA5      \;" SB5      SC.r@\RR                  " SD5      R                  rB\RR                  " \9R                  \R                  5      R                  rE\RR                  " SE5      R                  rF\R                  " SFSG5      rHSXSH jrISYSI jrJSZSJ jrK " SK S+5      rLg)[z
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)Selfc                ^    U R                  S5      R                  5       R                  S5      $ )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)strings    W/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/cssselect/parser.pyascii_lowerr      s%    == &&(//77    c                      \ rS rSrSrSrg)SelectorError!   zCommon 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____firstlineno____doc____static_attributes__r   r   r   r   r   !   s    r   r   c                      \ rS rSrSrSrg)SelectorSyntaxError+   z3Parsing a selector that does not match the grammar.r   Nr   r   r   r   r$   r$   +   s    =r   r$   )ElementHashClassFunctionPseudoAttribNegationRelationMatchingSpecificityAdjustmentCombinedSelectorFunctionalPseudoElementc                  D    \ rS rSrSrS	S
S jjrSS jrSS jrSS jrSr	g)SelectorA   u
  
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.

Nc                b    Xl         Ub   [        U[        5      (       d  [        U5      nX l        g N)parsed_tree
isinstancer1   r   pseudo_element)selftreer9   s      r   __init__Selector.__init__L   s4    %j3/
 /
 )8N* -r   c                   [        U R                  [        5      (       a  [        U R                  5      nO#U R                  (       a  SU R                   3nOSnU R                  R
                   SU R                  < U S3$ )N:: [])r8   r9   r1   repr	__class__r   r7   )r:   r9   s     r   __repr__Selector.__repr__h   sq    d))+BCC!$"5"56N  !$"5"5!67NN..))*!D,<,<+??OqQQr   c                B   [        U R                  [        5      (       a  SU R                  R                  5        3nO#U R                  (       a  SU R                   3nOSnU R                  R                  5        U 3n[        U5      S:  a  UR                  S5      nU$ )z8Return a CSS representation for this selector (a string)r?   r@      *)r8   r9   r1   	canonicalr7   lenlstrip)r:   r9   ress      r   rJ   Selector.canonicalq   s    d))+BCC!$"5"5"?"?"A!BCN  !$"5"5!67NN!!++-.~.>?s8a<**S/C
r   c                p    U R                   R                  5       u  pnU R                  (       a  US-  nXU4$ )zReturn the specificity_ of this selector as a tuple of 3 integers.

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

rH   )r7   specificityr9   r:   abcs       r   rP   Selector.specificity~   s7     ""..0aFAQwr   )r7   r9   r6   )r;   Treer9   zPseudoElement | NonereturnNonerW   strrW   ztuple[int, int, int]
r   r   r   r    r!   r<   rE   rJ   rP   r"   r   r   r   r3   r3   A   s    -8R	r   r3   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r(      z 
Represents selector.class_name
c                    Xl         X l        g r6   )selector
class_name)r:   r`   ra   s      r   r<   Class.__init__   s     $r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrA   .rB   )rD   r   r`   ra   r:   s    r   rE   Class.__repr__   s0    ..))*!DMM+<Adoo=NaPPr   c                T    U R                   R                  5        SU R                   3$ )Nrd   )r`   rJ   ra   re   s    r   rJ   Class.canonical   s&    --))+,Adoo->??r   c                N    U R                   R                  5       u  pnUS-  nXU4$ NrH   r`   rP   rQ   s       r   rP   Class.specificity   *    --++-a	QQwr   )ra   r`   N)r`   rV   ra   rZ   rW   rX   rY   r[   r\   r   r   r   r(   r(      s    %Q@r   r(   c                  @    \ rS rSrSrS	S jrS
S jrSS jrS
S jrSr	g)r1      aT  
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.

c                0    [        U5      U l        X l        g r6   )r   name	arguments)r:   rq   rr   s      r   r<    FunctionalPseudoElement.__init__   s    %	"r   c                    U R                    Vs/ s H  oR                  PM     nnU R                  R                   SU R                   SU< S3$ s  snf )Nz[::()])rr   valuerD   r   rq   r:   tokentoken_valuess      r   rE    FunctionalPseudoElement.__repr__   sK    15@@..))*#dii[,9ILL As   Ac                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r6   rr   typer:   ry   s     r   argument_types&FunctionalPseudoElement.argument_types        (,7u

777   'c                j    SR                  S U R                   5       5      nU R                   SU S3$ )Nr@   c              3  @   #    U  H  oR                  5       v   M     g 7fr6   css.0ry   s     r   	<genexpr>4FunctionalPseudoElement.canonical.<locals>.<genexpr>        ?uyy{{   ru   ))joinrr   rq   r:   argss     r   rJ   !FunctionalPseudoElement.canonical   s1    ww???))AdV1%%r   )rr   rq   N)rq   rZ   rr   Sequence[Token]rY   rW   z	list[str])
r   r   r   r    r!   r<   rE   r   rJ   r"   r   r   r   r1   r1      s    "#M8&r   c                  J    \ rS 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
g	)r)      z 
Represents selector:name(expr)
c                <    Xl         [        U5      U l        X0l        g r6   )r`   r   rq   rr   )r:   r`   rq   rr   s       r   r<   Function.__init__   s     %	"r   c                    U R                    Vs/ s H  oR                  PM     nnU R                  R                   SU R                  < SU R
                   SU< S3$ s  snf )NrA   :ru   rv   )rr   rw   rD   r   r`   rq   rx   s      r   rE   Function.__repr__   sW    15@@..))*!DMM+<Adii[,IYY[\\ As   Ac                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r6   r}   r   s     r   r   Function.argument_types   r   r   c                    SR                  S U R                   5       5      nU R                  R                  5        SU R                   SU S3$ )Nr@   c              3  @   #    U  H  oR                  5       v   M     g 7fr6   r   r   s     r   r   %Function.canonical.<locals>.<genexpr>   r   r   r   ru   r   )r   rr   r`   rJ   rq   r   s     r   rJ   Function.canonical   sE    ww???--))+,Adii[$qAAr   c                N    U R                   R                  5       u  pnUS-  nXU4$ rj   rk   rQ   s       r   rP   Function.specificity   rm   r   )rr   rq   r`   N)r`   rV   rq   rZ   rr   r   rW   rX   rY   r   r[   )r   r   r   r    r!   r<   rE   r   rJ   rP   r"   r   r   r   r)   r)      s"    #
]8Br   r)   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r*      z
Represents selector:ident
c                0    Xl         [        U5      U l        g r6   )r`   r   ident)r:   r`   r   s      r   r<   Pseudo.__init__   s      '
r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrA   r   rB   )rD   r   r`   r   re   s    r   rE   Pseudo.__repr__   s/    ..))*!DMM+<Adjj\KKr   c                T    U R                   R                  5        SU R                   3$ )Nr   )r`   rJ   r   re   s    r   rJ   Pseudo.canonical   s%    --))+,Adjj\::r   c                N    U R                   R                  5       u  pnUS-  nXU4$ rj   rk   rQ   s       r   rP   Pseudo.specificity   rm   r   )r   r`   N)r`   rV   r   rZ   rW   rX   rY   r[   r\   r   r   r   r*   r*      s    (L;r   r*   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r,      z&
Represents selector:not(subselector)
c                    Xl         X l        g r6   r`   subselector)r:   r`   r   s      r   r<   Negation.__init__   s     &r   c                l    U R                   R                   SU R                  < SU R                  < S3$ )NrA   :not(rv   rD   r   r`   r   re   s    r   rE   Negation.__repr__   3    ..))*!DMM+<E$BRBRAUUWXXr   c                    U R                   R                  5       n[        U5      S:  a  UR                  S5      nU R                  R                  5        SU S3$ )NrH   rI   r   r   )r   rJ   rK   rL   r`   r:   subsels     r   rJ   Negation.canonical   sP    !!++-v;?]]3'F--))+,E&;;r   c                    U R                   R                  5       u  pnU R                  R                  5       u  pEnX-   X%-   X6-   4$ r6   r`   rP   r   r:   a1b1c1a2b2c2s          r   rP   Negation.specificity  C    ]]..0
%%113
w((r   r   N)r`   rV   r   rV   rW   rX   rY   r[   r\   r   r   r   r,   r,      s    'Y<)r   r,   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r-   i	  z&
Represents selector:has(subselector)
c                (    Xl         X l        X0l        g r6   r`   
combinatorr   r:   r`   r   r   s       r   r<   Relation.__init__  s     $&r   c                l    U R                   R                   SU R                  < SU R                  < S3$ )NrA   :has(rv   r   re   s    r   rE   Relation.__repr__  r   r   c                    U R                   S   R                  5       n[        U5      S:  a  UR	                  S5      nU R
                  R                  5        SU S3$ ! [         a    U R                   R                  5       n Nff = f)Nr   rH   rI   r   r   )r   rJ   	TypeErrorrK   rL   r`   r   s     r   rJ   Relation.canonical  s    	2%%a(224F v;?]]3'F--))+,E&;;	  	2%%//1F	2s   A $BBc                    U R                   R                  5       u  pn U R                  S   R                  5       u  pEnX-   X%-   X6-   4$ ! [         a     U R                  R                  5       u  pEn N4f = f)N)r`   rP   r   r   r   s          r   rP   Relation.specificity  sx    ]]..0
	8))"-99;JBB w((  	8))557JBB	8s    A
 
'A43A4r   r`   r   N)r`   rV   r   Tokenr   r3   rY   r[   r\   r   r   r   r-   r-   	  s    '
Y<)r   r-   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r.   i(  z'
Represents selector:is(selector_list)
c                    Xl         X l        g r6   r`   selector_listr:   r`   r   s      r   r<   Matching.__init__-       *r   c                    SR                  S U R                   5       5      nU R                  R                   SU R                  < SU S3$ )N, c              3  8   #    U  H  n[        U5      v   M     g 7fr6   rC   r   ss     r   r   $Matching.__repr__.<locals>.<genexpr>2       A.@T!WW.@   rA   :is(rv   r   r   rD   r   r`   r:   args_strs     r   rE   Matching.__repr__1  sE    99Ad.@.@AA..))*!DMM+<D
"MMr   c                    / nU R                    H3  nUR                  5       nUR                  UR                  S5      5        M5     SR	                  S U 5       5      nU R
                  R                  5        SU S3$ )NrI   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr6   rZ   r   s     r   r   %Matching.canonical.<locals>.<genexpr>:       @-?SVV-?r   r   r   r   rJ   appendrL   r   r`   r:   selector_argumentsr   selargr   s        r   rJ   Matching.canonical5  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,D
!<<r   c                :    [        S U R                   5       5      $ )Nc              3  @   #    U  H  oR                  5       v   M     g 7fr6   )rP   )r   xs     r   r   'Matching.specificity.<locals>.<genexpr>>  s     ?,>q==??,>r   )maxr   re   s    r   rP   Matching.specificity=  s    ?D,>,>???r   r   N)r`   rV   r   zIterable[Tree]rY   r[   r\   r   r   r   r.   r.   (  s    +N=@r   r.   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r/   iA  zn
Represents selector:where(selector_list)
Same as selector:is(selector_list), but its specificity is always 0
c                    Xl         X l        g r6   r   r   s      r   r<   SpecificityAdjustment.__init__G  r   r   c                    SR                  S U R                   5       5      nU R                  R                   SU R                  < SU S3$ )Nr   c              3  8   #    U  H  n[        U5      v   M     g 7fr6   r   r   s     r   r   1SpecificityAdjustment.__repr__.<locals>.<genexpr>L  r   r   rA   :where(rv   r   r   s     r   rE   SpecificityAdjustment.__repr__K  sE    99Ad.@.@AA..))*!DMM+<GH:RPPr   c                    / nU R                    H3  nUR                  5       nUR                  UR                  S5      5        M5     SR	                  S U 5       5      nU R
                  R                  5        SU S3$ )NrI   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr6   r   r   s     r   r   2SpecificityAdjustment.canonical.<locals>.<genexpr>T  r   r   r  r   r   r   s        r   rJ   SpecificityAdjustment.canonicalO  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,GH:Q??r   c                    g)Nr   r   r   r   re   s    r   rP   !SpecificityAdjustment.specificityW  s    r   r   N)r`   rV   r   
list[Tree]rY   r[   r\   r   r   r   r/   r/   A  s    
+Q@r   r/   c                      \ rS rSrSr\            SS j5       r\            SS j5       r            SS jrSS jrSS jrSS jr	S	r
g
)r+   i[  z6
Represents selector[namespace|attrib operator value]
c                    g r6   r   r:   r`   	namespaceattriboperatorrw   s         r   r<   Attrib.__init__`       r   c                    g r6   r   r  s         r   r<   r  j  r  r   c                @    Xl         X l        X0l        X@l        XPl        g r6   )r`   r  r  r  rw   r  s         r   r<   r  t  s     !" 
r   c           
        U R                   (       a  U R                    SU R                   3OU R                  nU R                  S:X  a*  U R                  R                   SU R
                  < SU S3$ U R                  c   eU R                  R                   SU R
                  < SU SU R                   SU R                  R                  < S3
$ )N|existsrA   z]] )r  r  r  rD   r   r`   rw   )r:   r  s     r   rE   Attrib.__repr__  s    6:nnDNN#1T[[M2$++==H$nn--.a/@&LLzz%%%..))*!DMM+<AfXQt}}oUVW[WaWaWgWgVjjlmmr   c                J   U R                   (       a  U R                    SU R                   3OU R                  nU R                  S:X  a  UnO9U R                  c   eU U R                   U R                  R	                  5        3nU R
                  R                  5        SU S3$ )Nr  r  rA   rB   )r  r  r  rw   r   r`   rJ   )r:   r  ops      r   rJ   Attrib.canonical  s    6:nnDNN#1T[[M2$++==H$B::)))8DMM?4::>>+;*<=B--))+,AbT33r   c                N    U R                   R                  5       u  pnUS-  nXU4$ rj   rk   rQ   s       r   rP   Attrib.specificity  rm   r   )r  r  r  r`   rw   N)r`   rV   r  
str | Noner  rZ   r  zLiteral['exists']rw   rX   rW   rX   )r`   rV   r  r$  r  rZ   r  rZ   rw   r   rW   rX   )r`   rV   r  r$  r  rZ   r  rZ   rw   zToken | NonerW   rX   rY   r[   )r   r   r   r    r!   r
   r<   rE   rJ   rP   r"   r   r   r   r+   r+   [  s       	
 $  
    	
   
   	
   
n	4r   r+   c                  P    \ rS rSrSr S	     S
S jjrSS jrSS jrSS jrSr	g)r&   i  zI
Represents namespace|element

`None` is for the universal selector '*'

Nc                    Xl         X l        g r6   )r  element)r:   r  r'  s      r   r<   Element.__init__  s     #r   c                V    U R                   R                   SU R                  5        S3$ )NrA   rB   )rD   r   rJ   re   s    r   rE   Element.__repr__  s(    ..))*!DNN,<+=Q??r   c                t    U R                   =(       d    SnU R                  (       a  U R                   SU 3nU$ )NrI   r  r'  r  )r:   r'  s     r   rJ   Element.canonical  s1    ,,%#>>('3Gr   c                (    U R                   (       a  gg)N)r   r   rH   r  r'  re   s    r   rP   Element.specificity  s    <<r   r,  )NN)r  r$  r'  r$  rW   rX   rY   r[   r\   r   r   r   r&   r&     s;     CG#5?	@r   r&   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)r'   i  z
Represents selector#id
c                    Xl         X l        g r6   )r`   id)r:   r`   r3  s      r   r<   Hash.__init__  s     r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrA   #rB   )rD   r   r`   r3  re   s    r   rE   Hash.__repr__  s/    ..))*!DMM+<AdggYaHHr   c                T    U R                   R                  5        SU R                   3$ )Nr6  )r`   rJ   r3  re   s    r   rJ   Hash.canonical  s%    --))+,AdggY77r   c                N    U R                   R                  5       u  pnUS-  nXU4$ rj   rk   rQ   s       r   rP   Hash.specificity  rm   r   )r3  r`   N)r`   rV   r3  rZ   rW   rX   rY   r[   r\   r   r   r   r'   r'     s    I8r   r'   c                  <    \ rS rSrSS jrS	S jrS	S jrS
S jrSrg)r0   i  c                2    Uc   eXl         X l        X0l        g r6   r   r   s       r   r<   CombinedSelector.__init__  s    ### $&r   c                    U R                   S:X  a  SOU R                   nU R                  R                   SU R                  < SU SU R                  < S3$ )Nr  z
<followed>rA   rB   )r   rD   r   r`   r   )r:   combs     r   rE   CombinedSelector.__repr__  sQ    ##5|4??~~&&'q(94&$BRBRAUUVW	
r   c                    U R                   R                  5       n[        U5      S:  a  UR                  S5      nU R                  R                  5        SU R
                   SU 3$ )NrH   rI   r  )r   rJ   rK   rL   r`   r   r   s     r   rJ   CombinedSelector.canonical  sY    !!++-v;?]]3'F--))+,Adoo->axHHr   c                    U R                   R                  5       u  pnU R                  R                  5       u  pEnX-   X%-   X6-   4$ r6   r   r   s          r   rP   CombinedSelector.specificity  r   r   r   N)r`   rV   r   rZ   r   rV   rW   rX   rY   r[   )	r   r   r   r    r<   rE   rJ   rP   r"   r   r   r   r0   r0     s    '
I)r   r0   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]*$c           	     J   [         R                  U 5      nU(       a"  [        [        UR	                  S5      S95      /$ [
        R                  U 5      nUbD  [        [        [        UR	                  S5      =(       d    SS9UR	                  S5      5      5      /$ [        R                  U 5      nUbD  [        [        [        UR	                  S5      =(       d    SS9UR	                  S5      5      5      /$ [        [        U 5      5      nXl        [        [        U5      5      $ )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.

rH   r/  N   )_el_rematchr3   r&   group_id_rer'   	_class_rer(   TokenStreamtokenizesourcelistparse_selector_group)r   rI  streams      r   parserS    s      LLEQ89::LLEgekk!n.DEu{{ST~VWXXOOC EU75;;q>+ATBEKKPQNST
 	
 #'FM$V,--r   rM  c              #     #    U R                  5          [        [        U 5      6 v   U R                  5       S:X  a!  U R	                  5         U R                  5         Og MK  7f)NDELIM,)skip_whitespacer3   parse_selectorpeeknext)rR  s    r   rQ  rQ    sO     

v.//;;=N*KKM""$ s   AAc                z   [        U 5      u  p U R                  5         U R                  5       nUS;   a   X4$ U(       a  [        SU S35      eUR	                  SSS5      (       a9  [        [        U R                  5       R                  5      nU R                  5         OSn[        U 5      u  pR[        XU5      nM  )N)EOFNrU  Got pseudo-element :: not at the end of a selector+>~r  )
parse_simple_selectorrX  rZ  r$   is_delimr	   rZ   r[  rw   r0   )rR  resultr9   rZ  r   next_selectors         r   rY  rY  (  s    26:F
 {{}22 !! %''77TU  ==c3''c6;;=#6#67J""$ J(=f(E%!&mD% r   c                
   U R                  5         [        U R                  5      nU R                  5       nUR                  S:X  d  US:X  aw  UR                  S:X  a  U R                  5       R                  nOU R                  5         S nU R                  5       S:X  a!  U R                  5         U R                  5       nOUnS nOS =pT[        XE5      nS n U R                  5       nUR                  S;   d&  UR                  SSSS5      (       d  U(       a  US	:X  a  GO	U(       a  [        S
U S35      eUR                  S:X  a4  [        U[        [        U R                  5       R                  5      5      nGOUS:X  a+  U R                  5         [        X`R                  5       5      nGO{US:X  a,  U R                  5         [        S U R                  5       5      nGOIUS:X  a  U R                  5         [!        X`5      nGO&US:X  Ga  U R                  5         U R                  5       S:X  a\  U R                  5         U R                  5       nU R                  5       S:X  a%  U R                  5         [#        U[%        U 5      5      nGM  U R                  5       nUR'                  5       S;   a  [        U5      nGM  U R                  5       S:w  Ga  [)        Xh5      n[+        U5      S:X  a  [        U R                  5      S:X  d  [        U R                  5      S:X  a  U R                  S   R                  S:X  d  [        U R                  5      S:  a#  U R                  S   R                  S5      (       dd  [        U R                  5      S:  a@  U R                  S   R                  S:X  a#  U R                  S   R                  S5      (       d  [        S5      eGM  U R                  5         U R                  5         UR'                  5       S:X  ap  U(       a  [        S5      e[-        U SS9u  pU R                  5       nU
(       a  [        S
U
 SUR.                   35      eUS	:w  a  [        S U 35      e[1        Xi5      nOUR'                  5       S!:X  a  [3        U 5      u  p[5        XlU5      nOzUR'                  5       S";   a  [7        U 5      n[9        Xn5      nOOUR'                  5       S#:X  a  [7        U 5      n[;        Xn5      nO$[=        Xh[%        U 5      5      nO[        S$U 35      eGMQ  [        U R                  5      U:X  a  [        S$U R                  5        35      eXg4$ )%NIDENTrV  rI   rV  r  )Sr^  rW  ra  rb  rc  rV  r   r_  r`  HASHrV  rd   )rV  rA   )rV  r   )rV  ru   )z
first-linezfirst-letterbeforeafterzPseudo[Element[*]:scope]rG     r   rl     zJGot immediate child pseudo-element ":scope" not at the start of a selectornotzGot nested :not()T)inside_negationz inside :not() at zExpected ')', got has)matchesiswherezExpected selector, got )rX  rK   usedrZ  r~   r[  rw   next_ident_or_starr&   re  r$   r'   r	   rZ   r(   
next_identparse_attribr1   parse_argumentsr   r*   rC   rd  posr,   parse_relative_selectorr-   parse_simple_selector_argumentsr.   r/   r)   )rR  rw  selector_startrZ  r  r'  rf  r9   r   argumentargument_pseudo_elementr[  r   rr   	selectorss                  r   rd  rd  @  sw    %N;;=DyyGt~599++IKKMI;;=N*KKM//1GGI""9.F+/N
{{}II%}}S#sC00DN$:%''77TU  99&$sFKKM,?,?"@AF^#KKM6#4#4#67F^#KKMT6#4#4#67F^#KKM!&1F^#KKM{{}.!'!2!2!4;;=N2KKM%<&(?&N %%'E{{} QQ "%U{{}..<#==$)FKK(A-&++a.2E2E2LFKK(A-&++b/2J2J32O2OFKK(A-"KKO00C7"KKO44S99 .9  KKM""${{}%"-.ABB4ID51 {{}*-/0G/HHZ[_[c[cZde  >)-0B4&.IJJ!&3%'(?(G%
!&i@"33;FC	!&4');FC	.vA!&1HI%(?v&FGGm n 6;;>)!$;FKKM?"KLL!!r   c                    / n U R                  5         U R                  5       nUR                  S;   d  US;   a  UR                  U5        OUS:X  a  U$ [	        SU 35      eM`  )Nri  STRINGNUMBER)rV  ra  rV  -rm  Expected an argument, got )rX  r[  r~   r   r$   )rR  rr   r[  s      r   r  r    sq    I
 {{}9955 B
 :
 T"^#%(B4&&IJJ r   c                   U R                  5         SnU R                  5       nUS;   a#  UnU R                  5         U R                  5       nO[        SSSS9n UR                  S;   d  US;   a  U[	        [
        UR                  5      -  nO%US	:X  a  [        U5      nX4S   4$ [        S
U 35      eU R                  5       nMk  )Nr@   )r  r  )rV  rb  )rV  rc  rV  r  r   r  r  )ro  rj  rm  r  )	rX  r[  r   r~   r	   rZ   rw   rS  r$   )rR  r   r[  r   rf  s        r   r  r    s    
K;;=DOO
 {{}7CQ/

9955 B
 :
 4TZZ00K^#;'Fay((%(B4&&IJJ{{} r   c                T   / n [        U S5      u  p#U(       a  [        SU S35      eU R                  5         U R                  5       nUS;   a2  U R                  5         U R                  5         UR	                  U5        O(US:X  a  UR	                  U5         U$ [        SU 35      eM  )NTr_  z inside functionr]  rm  r  )rd  r$   rX  r[  r   )rR  rr   rf  r9   r[  s        r   r  r    s    I
!6vt!D%''77GH  	 {{}22KKM""$V$^#V$  &(B4&&IJJ! r   c                   UR                  5         UR                  5       nUc0  UR                  5       S:w  a  [        SUR                  5        35      eUR                  5       S:X  aN  UR	                  5         UR                  5       S:X  a  S nUR	                  5         SnOUnUR                  5       nS nOS =p4Uc  UR                  5         UR	                  5       nUS:X  a  [        X[        [        U5      SS 5      $ US:X  a  SnOkUR                  SS	S
SSS5      (       aB  UR                  5       S:X  a.  [        [        UR                  5      S-   nUR	                  5         O[        SU 35      eUR                  5         UR	                  5       nUR                  S;  a  [        SU 35      eUR                  5         UR	                  5       nUS:w  a  [        SU 35      e[        X[        [        U5      XF5      $ )Nrk  zExpected '|', got )rV  =z|=)rV  rB   r  r  ^$rI   rc  r  !zOperator expected, got )ri  r  zExpected string or ident, got zExpected ']', got )rX  r}  rZ  r$   r[  r~  r+   r	   rZ   re  rw   r~   )r`   rR  r  r  r   r[  rw   s          r   r  r    s   
&&(F~&++->9!$6v{{}o"FGG {{}&;;=N*IKKMBI&&(FB		z {{}>!(tC/@(DQQ>!B]]3S#sC88KKM^+c4::&,BKKM%(?v&FGG
KKMEzz,,!$B5'"JKK
;;=D~!$6tf"=>>(tC'8"DDr   c                   U  H  nUR                   S:X  d  M  [        S5      e   SR                  S U  5       5      R                  5       nUS:X  a  gUS:X  a  gUS	:X  a  g
S	U;  a  S[	        U5      4$ UR                  S	S5      u  p4U(       d  SnO US;   a  [	        US-   5      nO[	        U5      nU(       a  [	        U5      OSnXV4$ )zf
Parses the arguments for :nth-child() and friends.

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

r  z$String tokens not allowed in series.r@   c              3  V   #    U  H  n[        [        UR                  5      v   M!     g 7fr6   )r	   rZ   rw   r   s     r   r   parse_series.<locals>.<genexpr>)  s     ;F5S%++&&Fs   ')odd)rG  rH   even)rG  r   n)rH   r   r   rH   >   ra  r  1)r~   
ValueErrorr   stripintsplit)tokensry   r   rR   rS   a_as_intb_as_ints          r   parse_seriesr    s     ::!CDD  	;F;;AACAEzF{Cx
!|#a&y773?DA	
jq3w<q6s1vHr   c                      \ rS rSr% \        SS j5       r\SS j5       rSS jrSS jrSS jrS\S'   \	SS	 j5       r
\	SS
 j5       rSS jrSrg)r   iB  r  r  c                    g r6   r   clstype_rw   r  s       r   __new__Token.__new__C  s     r   c                    g r6   r   r  s       r   r  r  K  s    LOr   c                @    [         R                  XU45      nX4l        U$ r6   )tupler  r  )r  r  rw   r  objs        r   r  r  N  s    mmC0
r   c                V    SU R                    SU R                   SU R                   S3$ )N<z 'z' at rb  )r~   rw   r  re   s    r   rE   Token.__repr__S  s)    499+R

|5
!<<r   c                L    U R                   S:H  =(       a    U R                  U;   $ )NrV  )r~   rw   )r:   valuess     r   re  Token.is_delimV  s    yyG#<

f(<<r   c                    U S   $ )Nr   r   re   s    r   r~   
Token.type[      Awr   c                    U S   $ rj   r   re   s    r   rw   Token.value_  r  r   c                    U R                   S:X  a  [        U R                  5      $ [        [        U R                  5      $ )Nr  )r~   rC   rw   r	   rZ   re   s    r   r   	Token.cssc  s.    99 

##C$$r   r   N)r  z:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']rw   rZ   r  r  rW   r   )r  zLiteral['EOF']rw   rX   r  r  rW   r   )r  rZ   rw   r$  r  r  rW   r   rY   )r  rZ   rW   boolrW   r$  )r   r   r   r    r
   r  rE   re  __annotations__propertyr~   rw   r   r"   r   r   r   r   r   B  s    I  	
 
  O O
== 
H   %r   r   c                  (    \ rS rSrSS jrSS jrSrg)EOFTokenii  c                2    [         R                  U SS U5      $ )Nr^  )r   r  )r  r  s     r   r  EOFToken.__new__j  s    }}S%s33r   c                <    SU R                    SU R                   S3$ )Nr  z at rb  )r~   r  re   s    r   rE   EOFToken.__repr__m  s    499+T$((1--r   r   N)r  r  rW   r   rY   )r   r   r   r    r  rE   r"   r   r   r   r  r  i  s    4.r   r  c                  P    \ rS rSrSr\S-   rS\-   rSrS\ S\ 3rS\ S\ 3r	S	r
g
)TokenMacrosit  z&\\([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]|r   N)r   r   r   r    unicode_escapeescapestring_escapenonasciinmcharnmstartr"   r   r   r   r  r  t  sE    >N33F+f4MH6(!H:.Fxq
+Gr   r  c                  2    \ rS rSr S       SS jjrSrg)	MatchFunci}  c                    g r6   r   )r:   r   r  endposs       r   __call__MatchFunc.__call__~  s    "r   r   N)..)r   rZ   r  r  r  r  rW   zre.Match[str] | None)r   r   r   r    r  r"   r   r   r   r  r  }  s/    9<## ##36#	# #r   r  c                    [         R                  " U [        [        5      -  [         R                  5      R
                  $ r6   )recompilevarsr  
IGNORECASErI  )patterns    r   _compiler    s'    ::g[ 112==AG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)rJ  rH   c                z    [        U R                  S5      S5      nU[        R                  :  a  Sn[	        U5      $ )NrH      i  )r  rJ  sys
maxunicodechr)rI  	codepoints     r   _replace_unicoder    s1    EKKNB'I3>>!	y>r   c                B    [        [        U 5      n [        [        U 5      $ r6   )_sub_unicode_escaper  _sub_simple_escape_replace_simple)rw   s    r   unescape_identr    s     0%8Eou55r   c              #    #    Sn[        U 5      nX:  Ga,  [        XS9nU(       a!  [        SSU5      v   UR                  5       nM7  [	        XS9nU(       aL  [        [        [        [        UR                  5       5      5      n[        SXA5      v   UR                  5       nM  [        XS9nU(       aO  [        [        [        [        UR                  5       SS  5      5      n[        SXA5      v   UR                  5       nM  X   nU[        ;   a  [        U   " XS-   S9nU(       d   S5       eUR                  5       nXb:X  a  [        S	U 35      eX   U:w  a  [        S
U 35      e[        [        [        [        [        SUR                  5       5      5      5      n[        SXA5      v   US-   nGM  [        XS9nU(       a1  UR                  5       n[        SXA5      v   UR                  5       nGM  US-   nXU S:X  a#  U R                  SU5      nUS:X  a  UnOUS-  nGM  [        SX   U5      v   US-  nX:  a  GM,  X:X  d   e[!        U5      v   g 7f)Nr   r  rl  r  ri  rH   rn  z)Should have found at least an empty matchzUnclosed string at zInvalid string at r@   r  r  rG  z/*z*/r   rV  )rK   _match_whitespacer   end_match_identr  r  r  r  rJ  _match_hash_match_string_by_quoter$   _sub_newline_escape_match_numberfindr  )r   r  len_srI  rw   quoteend_pospos2s           r   rN  rN    s7    
CFE
+!!-S#&&))+CQ(&!45Eu{{}!UE ,,))+CA'&#$4ekkmAB6GHE ++))+C***51!qAEEEE5iikG),?u*EFFzU"),>se*DEE&#$&9"ekkm&LE %--A+Ca)KKME%--))+CQw;$&&t$CbyqGQVS))q} +@ <<
3-s   H=IIc                  T    \ rS rSrS
SS jjrSS jrSS jrSS jrSS jrSS jr	S	r
g)rM  i  Nc                    / U l         [        U5      U l        X l        S U l        SU l        U R                  R                  U l        g NF)r|  iterr  rO  peeked_peeking__next__
next_token)r:   r  rO  s      r   r<   TokenStream.__init__  s8    !#	6l$(++..r   c                   U R                   (       aG  SU l         U R                  c   eU R                  R                  U R                  5        U R                  $ U R	                  5       nU R                  R                  U5        U$ r  )r  r  r|  r   r   r:   r[  s     r   r[  TokenStream.next  sc    ==!DM;;***IIT[[);; 		r   c                    U R                   (       d  U R                  5       U l        SU l         U R                  c   eU R                  $ )NT)r  r   r  re   s    r   rZ  TokenStream.peek  s8    }}//+DK DM{{&&&{{r   c                    U R                  5       nUR                  S:w  a  [        SU 35      e[        [        UR
                  5      $ )Nri  zExpected ident, got )r[  r~   r$   r	   rZ   rw   r  s     r   r~  TokenStream.next_ident  s=    yy{99%(<TF&CDDC$$r   c                    U R                  5       nUR                  S:X  a  UR                  $ US:X  a  g [        SU 35      e)Nri  rj  zExpected ident or '*', got )r[  r~   rw   r$   r  s     r   r}  TokenStream.next_ident_or_star  sA    yy{99::>!!$?v"FGGr   c                f    U R                  5       nUR                  S:X  a  U R                  5         g g )Nrl  )rZ  r~   r[  )r:   rZ  s     r   rX  TokenStream.skip_whitespace  s'    yy{99IIK r   )r  r   r  rO  r  r|  r6   )r  Iterable[Token]rO  r$  rW   rX   )rW   r   rY   r  )rW   rX   )r   r   r   r    r<   r[  rZ  r~  r}  rX  r"   r   r   r   rM  rM    s!    /%Hr   )r   rZ   rW   rZ   )r   rZ   rW   zlist[Selector])rR  rM  rW   zIterator[Selector])rR  rM  rW   !tuple[Tree, PseudoElement | None])F)rR  rM  rw  r  rW   r  )rR  rM  rW   zlist[Token])rR  rM  rW   ztuple[Token, Selector])rR  rM  rW   r  )r`   rV   rR  rM  rW   r+   )r  r  rW   ztuple[int, int])r  rZ   rW   r  )rI  zre.Match[str]rW   rZ   )rw   rZ   rW   rZ   )r   rZ   rW   zIterator[Token])Mr!   
__future__r   r  r  r  typingr   r   r   r   r   r	   r
   collections.abcr   r   r   typing_extensionsr   r   	Exceptionr   SyntaxErrorr$   rV   rZ   PseudoElementr3   r(   r1   r)   r*   r,   r-   r.   r/   r+   r&   r'   r0   r  rH  rK  rL  rS  rQ  rY  rd  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  subr  r  r  r  r  methodcallerr  r  r  rN  rM  r   r   r   <module>r     s   #  	 
 T T T<< '8
I >- > 
 /45F FR *& &D 6 *) )0) )>@ @2 4< <~ : *) )8 
<	= 
M	N JJF	
.T"2 27o"o"*.o"&o"dK 4,)EXH$%E#x}$% $%N.u ., ,# #H _- :;)*:;	6	7	6	7 
 ZZ)-- jj!;!;R]]KOO jj!78<<  ''36
DN+ +r   