
    MiS                       % 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  SOS jr " S S	\5      r " S
 S\\5      r\S   rS\S'   \S\4   rS\S'    " 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)\RT                  " S*5      r+\RT                  " S+5      r,\RT                  " S,5      r-SPS- jr.SQS/ jr/SRS0 jr0 SS     STS1 jjr1SUS2 jr2SVS3 jr3SWS4 jr4SXS5 jr5SYS6 jr6 " S7 S8\7\\S-  4   5      r8 " S9 S:\85      r9 " S; S<5      r: " S= S>\	5      r;SZS? jr<\<" S@5      r=\<" SA5      r>\<" SB5      r?\<" SC5      r@\<" SD5      \<" SE5      SF.rA\RT                  " SG5      R                  rC\RT                  " \:R                  \R                  5      R                  rF\RT                  " SH5      R                  rG\R                  " SISJ5      rIS[SK jrJS\SL jrKS]SM jrL " SN S.5      rMg)^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Protocol	TypeAlias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    j/var/www/eduai.edurigo.com/storigo/production/storigo_env/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CombinedSelectorr   TreeFunctionalPseudoElementPseudoElementc                  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
isinstancer2   r   pseudo_element)selftreer;   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:: [])r:   r;   r2   repr	__class__r   r9   )r<   r;   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)rA   rB      *)r:   r;   r2   	canonicalr9   lenlstrip)r<   r;   ress      r   rL   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

rJ   )r9   specificityr;   r<   abcs       r   rR   Selector.specificity~   s7     ""..0aFAQwr   )r9   r;   r8   )r=   r1   r;   zPseudoElement | NonereturnNonerX   strrX   ztuple[int, int, int]
r   r   r   r    r!   r>   rG   rL   rR   r"   r   r   r   r5   r5   A   s    -8R	r   r5   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 r8   )selector
class_name)r<   ra   rb   s      r   r>   Class.__init__   s     $r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrC   .rD   )rF   r   ra   rb   r<   s    r   rG   Class.__repr__   s0    ..))*!DMM+<Adoo=NaPPr   c                T    U R                   R                  5        SU R                   3$ )Nre   )ra   rL   rb   rf   s    r   rL   Class.canonical   s&    --))+,Adoo->??r   c                N    U R                   R                  5       u  pnUS-  nXU4$ NrJ   ra   rR   rS   s       r   rR   Class.specificity   *    --++-a	QQwr   )rb   ra   N)ra   r1   rb   r[   rX   rY   rZ   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)r2      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 r8   )r   name	arguments)r<   rr   rs   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[::()])rs   valuerF   r   rr   r<   tokentoken_valuess      r   rG    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 r8   rs   typer<   rz   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$ )NrB   c              3  @   #    U  H  oR                  5       v   M     g 7fr8   css.0rz   s     r   	<genexpr>4FunctionalPseudoElement.canonical.<locals>.<genexpr>        ?uyy{{   rv   ))joinrs   rr   r<   argss     r   rL   !FunctionalPseudoElement.canonical   s1    ww???))AdV1%%r   )rs   rr   N)rr   r[   rs   Sequence[Token]rZ   rX   z	list[str])
r   r   r   r    r!   r>   rG   r   rL   r"   r   r   r   r2   r2      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 r8   )ra   r   rr   rs   )r<   ra   rr   rs   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 )NrC   :rv   rw   )rs   rx   rF   r   ra   rr   ry   s      r   rG   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 r8   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$ )NrB   c              3  @   #    U  H  oR                  5       v   M     g 7fr8   r   r   s     r   r   %Function.canonical.<locals>.<genexpr>   r   r   r   rv   r   )r   rs   ra   rL   rr   r   s     r   rL   Function.canonical   sE    ww???--))+,Adii[$qAAr   c                N    U R                   R                  5       u  pnUS-  nXU4$ rk   rl   rS   s       r   rR   Function.specificity   rn   r   )rs   rr   ra   N)ra   r1   rr   r[   rs   r   rX   rY   rZ   r   r\   )r   r   r   r    r!   r>   rG   r   rL   rR   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 r8   )ra   r   ident)r<   ra   r   s      r   r>   Pseudo.__init__   s      '
r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrC   r   rD   )rF   r   ra   r   rf   s    r   rG   Pseudo.__repr__   s/    ..))*!DMM+<Adjj\KKr   c                T    U R                   R                  5        SU R                   3$ )Nr   )ra   rL   r   rf   s    r   rL   Pseudo.canonical   s%    --))+,Adjj\::r   c                N    U R                   R                  5       u  pnUS-  nXU4$ rk   rl   rS   s       r   rR   Pseudo.specificity   rn   r   )r   ra   N)ra   r1   r   r[   rX   rY   rZ   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 r8   ra   subselector)r<   ra   r   s      r   r>   Negation.__init__   s     &r   c                l    U R                   R                   SU R                  < SU R                  < S3$ )NrC   :not(rw   rF   r   ra   r   rf   s    r   rG   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$ )NrJ   rK   r   r   )r   rL   rM   rN   ra   r<   subsels     r   rL   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$ r8   ra   rR   r   r<   a1b1c1a2b2c2s          r   rR   Negation.specificity  C    ]]..0
%%113
w((r   r   N)ra   r1   r   r1   rX   rY   rZ   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 r8   ra   
combinatorr   r<   ra   r   r   s       r   r>   Relation.__init__  s     $&r   c                l    U R                   R                   SU R                  < SU R                  < S3$ )NrC   :has(rw   r   rf   s    r   rG   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   rJ   rK   r   r   )r   rL   	TypeErrorrM   rN   ra   r   s     r   rL   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)ra   rR   r   r   r   s          r   rR   Relation.specificity  sx    ]]..0
	8))"-99;JBB w((  	8))557JBB	8s    A
 
'A43A4r   ra   r   N)ra   r1   r   Tokenr   r5   rZ   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 r8   ra   selector_listr<   ra   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r8   rE   r   ss     r   r   $Matching.__repr__.<locals>.<genexpr>2       A.@T!WW.@   rC   :is(rw   r   r   rF   r   ra   r<   args_strs     r   rG   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$ )NrK   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr8   r[   r   s     r   r   %Matching.canonical.<locals>.<genexpr>:       @-?SVV-?r   r   r   r   rL   appendrN   r   ra   r<   selector_argumentsr   selargr   s        r   rL   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r8   )rR   )r   xs     r   r   'Matching.specificity.<locals>.<genexpr>>  s     ?,>q==??,>r   )maxr   rf   s    r   rR   Matching.specificity=  s    ?D,>,>???r   r   N)ra   r1   r   zIterable[Tree]rZ   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 r8   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r8   r   r   s     r   r   1SpecificityAdjustment.__repr__.<locals>.<genexpr>L  r   r   rC   :where(rw   r   r   s     r   rG   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$ )NrK   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr8   r   r   s     r   r   2SpecificityAdjustment.canonical.<locals>.<genexpr>T  r   r   r  r   r   r   s        r   rL   SpecificityAdjustment.canonicalO  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,GH:Q??r   c                    g)Nr   r   r   r   rf   s    r   rR   !SpecificityAdjustment.specificityW  s    r   r   N)ra   r1   r   
list[Tree]rZ   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 r8   r   r<   ra   	namespaceattriboperatorrx   s         r   r>   Attrib.__init__`       r   c                    g r8   r   r  s         r   r>   r  j  r  r   c                @    Xl         X l        X0l        X@l        XPl        g r8   )ra   r  r  r  rx   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|existsrC   z]] )r  r  r  rF   r   ra   rx   )r<   r  s     r   rG   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  rC   rD   )r  r  r  rx   r   ra   rL   )r<   r  ops      r   rL   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$ rk   rl   rS   s       r   rR   Attrib.specificity  rn   r   )r  r  r  ra   rx   N)ra   r1   r  
str | Noner  r[   r  zLiteral['exists']rx   rY   rX   rY   )ra   r1   r  r%  r  r[   r  r[   rx   r   rX   rY   )ra   r1   r  r%  r  r[   r  r[   rx   zToken | NonerX   rY   rZ   r\   )r   r   r   r    r!   r
   r>   rG   rL   rR   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 r8   )r  element)r<   r  r(  s      r   r>   Element.__init__  s     #r   c                V    U R                   R                   SU R                  5        S3$ )NrC   rD   )rF   r   rL   rf   s    r   rG   Element.__repr__  s(    ..))*!DNN,<+=Q??r   c                t    U R                   =(       d    SnU R                  (       a  U R                   SU 3nU$ )NrK   r  r(  r  )r<   r(  s     r   rL   Element.canonical  s1    ,,%#>>('3Gr   c                (    U R                   (       a  gg)N)r   r   rJ   r  r(  rf   s    r   rR   Element.specificity  s    <<r   r-  )NN)r  r%  r(  r%  rX   rY   rZ   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 r8   )ra   id)r<   ra   r4  s      r   r>   Hash.__init__  s     r   c                j    U R                   R                   SU R                  < SU R                   S3$ )NrC   #rD   )rF   r   ra   r4  rf   s    r   rG   Hash.__repr__  s/    ..))*!DMM+<AdggYaHHr   c                T    U R                   R                  5        SU R                   3$ )Nr7  )ra   rL   r4  rf   s    r   rL   Hash.canonical  s%    --))+,AdggY77r   c                N    U R                   R                  5       u  pnUS-  nXU4$ rk   rl   rS   s       r   rR   Hash.specificity  rn   r   )r4  ra   N)ra   r1   r4  r[   rX   rY   rZ   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 r8   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>rC   rD   )r   rF   r   ra   r   )r<   combs     r   rG   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$ )NrJ   rK   r  )r   rL   rM   rN   ra   r   r   s     r   rL   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$ r8   r   r   s          r   rR   CombinedSelector.specificity  r   r   r   N)ra   r1   r   r[   r   r1   rX   rY   rZ   r\   )	r   r   r   r    r>   rG   rL   rR   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.

rJ   r0  N   )_el_rematchr5   r&   group_id_rer'   	_class_rer(   TokenStreamtokenizesourcelistparse_selector_group)r   rJ  streams      r   parserT    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   rN  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_whitespacer5   parse_selectorpeeknext)rS  s    r   rR  rR    sO     

v.//;;=N*KKM""$ s   AAc                r   [        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      (       a5  [        SU R                  5       R                  5      nU R                  5         OSn[        U 5      u  pR[        XU5      nM  )	N)EOFNrV  Got pseudo-element :: not at the end of a selector+>~r[   r  )	parse_simple_selectorrY  r[  r$   is_delimr	   r\  rx   r0   )rS  resultr;   r[  r   next_selectors         r   rZ  rZ  (  s    26:F
 {{}22 !! %''77TU  ==c3''eV[[]%8%89J""$ 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  a0  [        U[        S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MM  [        U R                  5      U:X  a  [        S%U R                  5        35      eXg4$ )&NIDENTrW  rK   rW  r  )Sr_  rX  rb  rc  rd  rW  r   r`  ra  HASHr[   rW  re   )rW  rC   )rW  r   )rW  rv   )z
first-linezfirst-letterbeforeafterzPseudo[Element[*]:scope]rH     r   rm     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 )rY  rM   usedr[  r   r\  rx   next_ident_or_starr&   rf  r$   r'   r	   r(   
next_identparse_attribr2   parse_argumentsr   r[   r*   rE   re  posr,   parse_relative_selectorr-   parse_simple_selector_argumentsr.   r/   r)   )rS  rx  selector_startr[  r  r(  rg  r;   r   argumentargument_pseudo_elementnext_r   rs   	selectorss                  r   re  re  @  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&$ufkkm.A.A"BCF^#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[`[d[dZef  N*-0B5'.JKK!&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rj  STRINGNUMBER)rW  rb  rW  -rn  Expected an argument, got )rY  r\  r   r   r$   )rS  rs   r  s      r   r  r    sq    I
 ::66% D
 ;
 U#n$%(B5'&JKK 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[	        S	UR
                  5      -  nO%US
:X  a  [        U5      nX4S   4$ [        SU 35      eU R                  5       nMg  )NrB   )r  r  )rW  rc  )rW  rd  rW  r  r   r  r  )rp  rk  r[   rn  r  )rY  r\  r   r   r	   rx   rT  r$   )rS  r   r  r   rg  s        r   r  r    s    
KKKMEPP
 7CQ/

::66% D
 ;
 4u{{33Kn$;'Fay((%(B5'&JKK 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^  rn  r  )re  r$   rY  r\  r   )rS  rs   rg  r;   r  s        r   r  r    s    I
!6vt!D%''77GH  	 33KKM""$V$n$V$  &(B5'&JKK! 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[        SU5      SS 5      $ US:X  a  SnOgUR                  S	S
SSSS5      (       a>  UR                  5       S:X  a*  [        S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[        SU5      XF5      $ )Nrl  zExpected '|', got )rW  =z|=)rW  rD   r[   r  r  ^$rK   rd  r  !zOperator expected, got )rj  r  zExpected string or ident, got zExpected ']', got )rY  r~  r[  r$   r\  r  r+   r	   rf  rx   r   )ra   rS  r  r  r!  r  rx   s          r   r  r    s   
&&(F~&++->9!$6v{{}o"FGG {{}&;;=N*IKKMBI&&(FB		z N"(tE6/BHdSSN"B^^Cc3S99KKM^+eU[[)C/BKKM%(?w&GHH
KKMEzz,,!$B5'"JKK
KKME!$6ug">??(tE6':BFFr   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.rB   c              3  N   #    U  H  n[        S UR                  5      v   M     g7f)r[   N)r	   rx   r   s     r   r   parse_series.<locals>.<genexpr>)  s     =fUUEKK((fs   #%odd)rH  rJ   even)rH  r   n)rJ   r   r   rJ   >   rb  r  1)r   
ValueErrorr   stripintsplit)tokensrz   r   rT   rU   a_as_intb_as_ints          r   parse_seriesr    s     ::!CDD  	=f==CCEA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 r8   r   clstype_rx   r  s       r   __new__Token.__new__C  s     r   c                    g r8   r   r  s       r   r  r  K  s    LOr   c                @    [         R                  XU45      nX4l        U$ r8   )tupler  r  )r  r  rx   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 rc  )r   rx   r  rf   s    r   rG   Token.__repr__S  s)    499+R

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

f(<<r   c                    U S   $ )Nr   r   rf   s    r   r   
Token.type[      Awr   c                    U S   $ rk   r   rf   s    r   rx   Token.value_  r  r   c                x    U R                   S:X  a  [        U R                  5      $ [        SU R                  5      $ )Nr  r[   )r   rE   rx   r	   rf   s    r   r   	Token.cssc  s.    99 

##E4::&&r   r   N)r  z:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']rx   r[   r  r  rX   r   )r  zLiteral['EOF']rx   rY   r  r  rX   r   )r  r[   rx   r%  r  r  rX   r   rZ   )r  r[   rX   boolrX   r%  )r   r   r   r    r
   r  rG   rf  __annotations__propertyr   rx   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 rc  )r   r  rf   s    r   rG   EOFToken.__repr__m  s    499+T$((1--r   r   N)r  r  rX   r   rZ   )r   r   r   r    r  rG   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 r8   r   )r<   r   r  endposs       r   __call__MatchFunc.__call__~  s    "r   r   N)..)r   r[   r  r  r  r  rX   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
                  $ r8   )recompilevarsr  
IGNORECASErJ  )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)rK  rJ   c                z    [        U R                  S5      S5      nU[        R                  :  a  Sn[	        U5      $ )NrJ      i  )r  rK  sys
maxunicodechr)rJ  	codepoints     r   _replace_unicoder    s1    EKKNB'I3>>!	y>r   c                B    [        [        U 5      n [        [        U 5      $ r8   )_sub_unicode_escaper  _sub_simple_escape_replace_simple)rx   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  rm  r  rj  rJ   ro  z)Should have found at least an empty matchzUnclosed string at zInvalid string at rB   r  r  rH  z/*z*/r   rW  )rM   _match_whitespacer   end_match_identr  r  r  r  rK  _match_hash_match_string_by_quoter$   _sub_newline_escape_match_numberfindr  )r   r  len_srJ  rx   quoteend_pospos2s           r   rO  rO    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)rN  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  rP  peeked_peeking__next__
next_token)r<   r  rP  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  rf   s    r   r[  TokenStream.peek  s8    }}//+DK DM{{&&&{{r   c                    U R                  5       nUR                  S:w  a  [        SU 35      e[        SUR                  5      $ )Nrj  zExpected ident, got r[   )r\  r   r$   r	   rx   r  s     r   r  TokenStream.next_ident  s=    		:: %(<UG&DEEE5;;''r   c                    U R                  5       nUR                  S:X  a  UR                  $ US:X  a  g [        SU 35      e)Nrj  rk  zExpected ident or '*', got )r\  r   rx   r$   r  s     r   r~  TokenStream.next_ident_or_star  sA    		:: ;;N"!$?w"GHHr   c                f    U R                  5       nUR                  S:X  a  U R                  5         g g )Nrm  )r[  r   r\  )r<   r[  s     r   rY  TokenStream.skip_whitespace  s'    yy{99IIK r   )r   r  r  rP  r  r}  r8   )r  Iterable[Token]rP  r%  rX   rY   )rX   r   rZ   r  )rX   rY   )r   r   r   r    r>   r\  r[  r  r~  rY  r"   r   r   r   rN  rN    s!    /(Ir   )r   r[   rX   r[   )r   r[   rX   zlist[Selector])rS  rN  rX   zIterator[Selector])rS  rN  rX   !tuple[Tree, PseudoElement | None])F)rS  rN  rx  r  rX   r  )rS  rN  rX   zlist[Token])rS  rN  rX   ztuple[Token, Selector])rS  rN  rX   r  )ra   r1   rS  rN  rX   r+   )r  r  rX   ztuple[int, int])r  r[   rX   r  )rJ  zre.Match[str]rX   r[   )rx   r[   rX   r[   )r   r[   rX   zIterator[Token])Nr!   
__future__r   r  r  r  typingr   r   r   r   r   r	   r
   collections.abcr   r   r   typing_extensionsr   r   	Exceptionr   SyntaxErrorr$   r1   r  r[   r3   r5   r(   r2   r)   r*   r,   r-   r.   r/   r+   r&   r'   r0   r  rI  rL  rM  rT  rR  rZ  re  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  subr  r  r  r  r  methodcallerr  r  r  rO  rN  r   r   r   <module>r     s   #  	 
 U U U<< '8
I >- > 
i  !!:C!?@y @F FR *& &D 6 *) )0) )>@ @2 4< <~ : *) )8 
<	= 
M	N JJF	
.T"2 27o"o"*.o"&o"dL 4,)GXH$'E#sTz/" $'N.u ., ,# #H _- :;)*:;	6	7	6	7 
 ZZ)-- jj!;!;R]]KOO jj!78<<  ''36
DN+ +r   