
     h                    |   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 dLd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jR                  d'      Z* ejR                  d(      Z+ ejR                  d)      Z,dMd*Z-dNd,Z.dOd-Z/	 dP	 	 	 	 	 dQd.Z0dRd/Z1dSd0Z2dTd1Z3dUd2Z4dVd3Z5 G d4 d5e6ee	e   f         Z7 G d6 d7e7      Z8 G d8 d9      Z9 G d: d;e
      Z:dWd<Z; e;d=      Z< e;d>      Z= e;d?      Z> e;d@      Z? e;dA       e;dB      dCZ@ ejR                  dD      j                  ZB ejR                  e9j                  ej                        j                  ZE ejR                  dE      j                  ZF ej                  dFdG      ZHdXdHZIdYdIZJdZdJZK G dK d+      ZLy)[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                ^    | j                  d      j                         j                  d      S )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)strings    P/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/cssselect/parser.pyascii_lowerr      s%    == &&(//77    c                      e Zd ZdZy)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y)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                  2    e Zd ZdZdddZd	dZd	dZd
dZy)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.

    Nc                Z    || _         |t        |t              st        |      }|| _        y N)parsed_tree
isinstancer-   r   pseudo_element)selftreer4   s      r   __init__zSelector.__init__L   s3    %j3/
 )8N* -r   c                    t        | j                  t              rt        | j                        }n| j                  rd| j                   }nd}| j                  j
                   d| j                  | dS )N:: [])r3   r4   r-   repr	__class__r   r2   )r5   r4   s     r   __repr__zSelector.__repr__h   sn    d))+BC!$"5"56N  !$"5"5!67NN..))*!D,<,<+??OqQQr   c                ,   t        | j                  t              rd| j                  j                          }n| j                  rd| j                   }nd}| j                  j                          | }t        |      dkD  r|j                  d      }|S )z8Return a CSS representation for this selector (a string)r9   r:      *)r3   r4   r-   	canonicalr2   lenlstrip)r5   r4   ress      r   rC   zSelector.canonicalq   s    d))+BC!$"5"5"?"?"A!BCN  !$"5"5!67NN!!++-.~.>?s8a<**S/C
r   c                j    | j                   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

        rA   )r2   specificityr4   r5   abcs       r   rH   zSelector.specificity~   s;     ""..01aFA!Qwr   r1   )r6   Treer4   zPseudoElement | NonereturnNonerN   strrN   ztuple[int, int, int]r   r   r   r   r7   r?   rC   rH   r   r   r   r/   r/   A   s    -8R	r   r/   c                  0    e Zd ZdZddZddZddZd	dZy)
r$   z(
    Represents selector.class_name
    c                     || _         || _        y r1   )selector
class_name)r5   rV   rW   s      r   r7   zClass.__init__   s     $r   c                h    | j                   j                   d| j                  d| j                   dS )Nr;   .r<   )r>   r   rV   rW   r5   s    r   r?   zClass.__repr__   s0    ..))*!DMM+<Adoo=NaPPr   c                T    | j                   j                          d| j                   S )NrY   )rV   rC   rW   rZ   s    r   rC   zClass.canonical   s&    --))+,Adoo->??r   c                R    | j                   j                         \  }}}|dz  }|||fS NrA   rV   rH   rI   s       r   rH   zClass.specificity   .    --++-1a	Q!Qwr   N)rV   rM   rW   rQ   rN   rO   rP   rR   rS   r   r   r   r$   r$      s    %Q@r   r$   c                  0    e Zd ZdZddZddZd	dZddZy)
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.

    c                2    t        |      | _        || _        y r1   )r   name	arguments)r5   rb   rc   s      r   r7   z FunctionalPseudoElement.__init__   s    %	"r   c                    | j                   D cg c]  }|j                   }}| j                  j                   d| j                   d|dS c c}w )Nz[::()])rc   valuer>   r   rb   r5   tokentoken_valuess      r   r?   z FunctionalPseudoElement.__repr__   sM    15@@..))*#dii[,9ILL As   Ac                T    | j                   D cg c]  }|j                   c}S c c}w r1   rc   typer5   ri   s     r   argument_typesz&FunctionalPseudoElement.argument_types   "    (,7u

777   %c                j    dj                  d | j                  D              }| j                   d| dS )Nr:   c              3  <   K   | ]  }|j                           y wr1   css.0ri   s     r   	<genexpr>z4FunctionalPseudoElement.canonical.<locals>.<genexpr>        ?uuyy{   re   ))joinrc   rb   r5   argss     r   rC   z!FunctionalPseudoElement.canonical   s1    ww???))AdV1%%r   N)rb   rQ   rc   Sequence[Token]rP   rN   z	list[str])r   r   r   r   r7   r?   ro   rC   r   r   r   r-   r-      s    "#M8&r   c                  8    e Zd ZdZddZd	dZd
dZd	dZddZy)r%   z(
    Represents selector:name(expr)
    c                @    || _         t        |      | _        || _        y r1   )rV   r   rb   rc   )r5   rV   rb   rc   s       r   r7   zFunction.__init__   s     %	"r   c                    | j                   D cg c]  }|j                   }}| j                  j                   d| j                  d| j
                   d|dS c c}w )Nr;   :re   rf   )rc   rg   r>   r   rV   rb   rh   s      r   r?   zFunction.__repr__   sY    15@@..))*!DMM+<Adii[,IYY[\\ As   Ac                T    | j                   D cg c]  }|j                   c}S c c}w r1   rl   rn   s     r   ro   zFunction.argument_types   rp   rq   c                    dj                  d | j                  D              }| j                  j                          d| j                   d| dS )Nr:   c              3  <   K   | ]  }|j                           y wr1   rt   rv   s     r   rx   z%Function.canonical.<locals>.<genexpr>   ry   rz   r   re   r{   )r|   rc   rV   rC   rb   r}   s     r   rC   zFunction.canonical   sE    ww???--))+,Adii[$qAAr   c                R    | j                   j                         \  }}}|dz  }|||fS r]   r^   rI   s       r   rH   zFunction.specificity   r_   r   N)rV   rM   rb   rQ   rc   r   rN   rO   rP   r   rR   )	r   r   r   r   r7   r?   ro   rC   rH   r   r   r   r%   r%      s"    #
]8Br   r%   c                  0    e Zd ZdZddZddZddZd	dZy)
r&   z#
    Represents selector:ident
    c                2    || _         t        |      | _        y r1   )rV   r   ident)r5   rV   r   s      r   r7   zPseudo.__init__   s      '
r   c                h    | j                   j                   d| j                  d| j                   dS )Nr;   r   r<   )r>   r   rV   r   rZ   s    r   r?   zPseudo.__repr__   s/    ..))*!DMM+<Adjj\KKr   c                T    | j                   j                          d| j                   S )Nr   )rV   rC   r   rZ   s    r   rC   zPseudo.canonical   s%    --))+,Adjj\::r   c                R    | j                   j                         \  }}}|dz  }|||fS r]   r^   rI   s       r   rH   zPseudo.specificity   r_   r   N)rV   rM   r   rQ   rN   rO   rP   rR   rS   r   r   r   r&   r&      s    (L;r   r&   c                  0    e Zd ZdZddZddZddZd	dZy)
r(   z.
    Represents selector:not(subselector)
    c                     || _         || _        y r1   )rV   subselector)r5   rV   r   s      r   r7   zNegation.__init__   s     &r   c                h    | j                   j                   d| j                  d| j                  dS )Nr;   :not(rf   r>   r   rV   r   rZ   s    r   r?   zNegation.__repr__   3    ..))*!DMM+<E$BRBRAUUWXXr   c                    | j                   j                         }t        |      dkD  r|j                  d      }| j                  j                          d| dS )NrA   rB   r   r{   )r   rC   rD   rE   rV   r5   subsels     r   rC   zNegation.canonical   sP    !!++-v;?]]3'F--))+,E&;;r   c                    | j                   j                         \  }}}| j                  j                         \  }}}||z   ||z   ||z   fS r1   rV   rH   r   r5   a1b1c1a2b2c2s          r   rH   zNegation.specificity  M    ]]..0
B%%113
BBwRb((r   N)rV   rM   r   rM   rN   rO   rP   rR   rS   r   r   r   r(   r(      s    'Y<)r   r(   c                  0    e Zd ZdZddZddZddZd	dZy)
r)   z.
    Represents selector:has(subselector)
    c                .    || _         || _        || _        y r1   rV   
combinatorr   r5   rV   r   r   s       r   r7   zRelation.__init__  s     $&r   c                h    | j                   j                   d| j                  d| j                  dS )Nr;   :has(rf   r   rZ   s    r   r?   zRelation.__repr__  r   r   c                   	 | j                   d   j                         }t        |      dkD  r|j	                  d      }| j
                  j                          d| dS # t        $ r | j                   j                         }Y dw xY w)Nr   rA   rB   r   r{   )r   rC   	TypeErrorrD   rE   rV   r   s     r   rC   zRelation.canonical  s    	2%%a(224F v;?]]3'F--))+,E&;;	  	2%%//1F	2s   A #BBc                    | j                   j                         \  }}}	 | j                  d   j                         \  }}}||z   ||z   ||z   fS # t        $ r! | j                  j                         \  }}}Y 7w xY w)N)rV   rH   r   r   r   s          r   rH   zRelation.specificity  s    ]]..0
B	8))"-99;JBB BwRb((  	8))557JBB	8s   !A 'A98A9N)rV   rM   r   Tokenr   r/   rP   rR   rS   r   r   r   r)   r)   	  s    '
Y<)r   r)   c                  0    e Zd ZdZddZddZddZd	dZy)
r*   z/
    Represents selector:is(selector_list)
    c                     || _         || _        y r1   rV   selector_listr5   rV   r   s      r   r7   zMatching.__init__-       *r   c                    dj                  d | j                  D              }| j                  j                   d| j                  d| dS )N, c              3  2   K   | ]  }t        |        y wr1   r=   rw   ss     r   rx   z$Matching.__repr__.<locals>.<genexpr>2       A.@T!W.@   r;   :is(rf   r|   r   r>   r   rV   r5   args_strs     r   r?   zMatching.__repr__1  sE    99Ad.@.@AA..))*!DMM+<D
"MMr   c                    g }| j                   D ]2  }|j                         }|j                  |j                  d             4 dj	                  d |D              }| j
                  j                          d| dS )NrB   r   c              3  2   K   | ]  }t        |        y wr1   rQ   r   s     r   rx   z%Matching.canonical.<locals>.<genexpr>:       @-?SV-?r   r   r{   r   rC   appendrE   r|   rV   r5   selector_argumentsr   selargr   s        r   rC   zMatching.canonical5  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,D
!<<r   c                :    t        d | j                  D              S )Nc              3  <   K   | ]  }|j                           y wr1   )rH   )rw   xs     r   rx   z'Matching.specificity.<locals>.<genexpr>>  s     ?,>q1==?,>rz   )maxr   rZ   s    r   rH   zMatching.specificity=  s    ?D,>,>???r   N)rV   rM   r   zIterable[Tree]rP   rR   rS   r   r   r   r*   r*   (  s    +N=@r   r*   c                  0    e Zd ZdZddZddZddZd	dZy)
r+   zz
    Represents selector:where(selector_list)
    Same as selector:is(selector_list), but its specificity is always 0
    c                     || _         || _        y r1   r   r   s      r   r7   zSpecificityAdjustment.__init__G  r   r   c                    dj                  d | j                  D              }| j                  j                   d| j                  d| dS )Nr   c              3  2   K   | ]  }t        |        y wr1   r   r   s     r   rx   z1SpecificityAdjustment.__repr__.<locals>.<genexpr>L  r   r   r;   :where(rf   r   r   s     r   r?   zSpecificityAdjustment.__repr__K  sE    99Ad.@.@AA..))*!DMM+<GH:RPPr   c                    g }| j                   D ]2  }|j                         }|j                  |j                  d             4 dj	                  d |D              }| j
                  j                          d| dS )NrB   r   c              3  2   K   | ]  }t        |        y wr1   r   r   s     r   rx   z2SpecificityAdjustment.canonical.<locals>.<genexpr>T  r   r   r   r{   r   r   s        r   rC   zSpecificityAdjustment.canonicalO  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,GH:Q??r   c                     y)Nr   r   r   r   rZ   s    r   rH   z!SpecificityAdjustment.specificityW  s    r   N)rV   rM   r   
list[Tree]rP   rR   rS   r   r   r   r+   r+   A  s    
+Q@r   r+   c                      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y)r'   z>
    Represents selector[namespace|attrib operator value]
    c                     y r1   r   r5   rV   	namespaceattriboperatorrg   s         r   r7   zAttrib.__init__`       r   c                     y r1   r   r   s         r   r7   zAttrib.__init__j  r   r   c                J    || _         || _        || _        || _        || _        y r1   )rV   r   r   r   rg   r   s         r   r7   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   r>   r   rV   rg   )r5   r   s     r   r?   zAttrib.__repr__  s    6:nnDNN#1T[[M2$++==H$nn--.a/@&LLzz%%%..))*!DMM+<AfXQt}}oUVW[WaWaWgWgVjjlmmr   c                <   | j                   r| j                    d| j                   n| j                  }| j                  dk(  r|}n8| j                  J | | j                   | j                  j	                          }| j
                  j                          d| dS )Nr   r   r;   r<   )r   r   r   rg   ru   rV   rC   )r5   r   ops      r   rC   zAttrib.canonical  s    6:nnDNN#1T[[M2$++==H$B::)))8DMM?4::>>+;*<=B--))+,AbT33r   c                R    | j                   j                         \  }}}|dz  }|||fS r]   r^   rI   s       r   rH   zAttrib.specificity  r_   r   N)rV   rM   r   
str | Noner   rQ   r   zLiteral['exists']rg   rO   rN   rO   )rV   rM   r   r   r   rQ   r   rQ   rg   r   rN   rO   )rV   rM   r   r   r   rQ   r   rQ   rg   zToken | NonerN   rO   rP   rR   )	r   r   r   r   r
   r7   r?   rC   rH   r   r   r   r'   r'   [  s       	
 $  
    	
   
   	
   
n	4r   r'   c                  >    e Zd ZdZ	 d	 	 	 	 	 ddZd	dZd	dZd
dZy)r"   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nc                     || _         || _        y r1   )r   element)r5   r   r   s      r   r7   zElement.__init__  s     #r   c                V    | j                   j                   d| j                          dS )Nr;   r<   )r>   r   rC   rZ   s    r   r?   zElement.__repr__  s(    ..))*!DNN,<+=Q??r   c                `    | j                   xs d}| j                  r| j                   d| }|S )NrB   r   )r   r   )r5   r   s     r   rC   zElement.canonical  s1    ,,%#>>('3Gr   c                    | j                   ryy)N)r   r   rA   r   r   rZ   s    r   rH   zElement.specificity  s    <<r   )NN)r   r   r   r   rN   rO   rP   rR   rS   r   r   r   r"   r"     s;     CG#5?	@r   r"   c                  0    e Zd ZdZddZddZddZd	dZy)
r#   z 
    Represents selector#id
    c                     || _         || _        y r1   )rV   id)r5   rV   r   s      r   r7   zHash.__init__  s     r   c                h    | j                   j                   d| j                  d| j                   dS )Nr;   #r<   )r>   r   rV   r   rZ   s    r   r?   zHash.__repr__  s/    ..))*!DMM+<AdggYaHHr   c                T    | j                   j                          d| j                   S )Nr   )rV   rC   r   rZ   s    r   rC   zHash.canonical  s%    --))+,AdggY77r   c                R    | j                   j                         \  }}}|dz  }|||fS r]   r^   rI   s       r   rH   zHash.specificity  r_   r   N)rV   rM   r   rQ   rN   rO   rP   rR   rS   r   r   r   r#   r#     s    I8r   r#   c                  ,    e Zd ZddZddZddZddZy)	r,   c                6    |J || _         || _        || _        y r1   r   r   s       r   r7   zCombinedSelector.__init__  s$    ### $&r   c                    | j                   dk(  rdn| j                   }| j                  j                   d| j                  d| d| j                  dS )Nr   z
<followed>r;   r<   )r   r>   r   rV   r   )r5   combs     r   r?   zCombinedSelector.__repr__  sQ    ##5|4??~~&&'q(94&$BRBRAUUVW	
r   c                    | j                   j                         }t        |      dkD  r|j                  d      }| j                  j                          d| j
                   d| S )NrA   rB   r   )r   rC   rD   rE   rV   r   r   s     r   rC   zCombinedSelector.canonical  sY    !!++-v;?]]3'F--))+,Adoo->axHHr   c                    | j                   j                         \  }}}| j                  j                         \  }}}||z   ||z   ||z   fS r1   r   r   s          r   rH   zCombinedSelector.specificity  r   r   N)rV   rM   r   rQ   r   rM   rN   rO   rP   rR   )r   r   r   r7   r?   rC   rH   r   r   r   r,   r,     s    '
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]*$c           	     <   t         j                  |       }|r%t        t        |j	                  d                  gS t
        j                  |       }|Bt        t        t        |j	                  d      xs d      |j	                  d                  gS t        j                  |       }|Bt        t        t        |j	                  d      xs d      |j	                  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.

    rA   r   N   )_el_rematchr/   r"   group_id_rer#   	_class_rer$   TokenStreamtokenizesourcelistparse_selector_group)ru   r   streams      r   parser
    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FM$V,--r   r  c              #     K   | j                          	 t        t        |         | j                         dk(  r!| j	                          | j                          ny Iw)NDELIM,)skip_whitespacer/   parse_selectorpeeknext)r	  s    r   r  r    sP     

v.//;;=N*KKM""$ s   AAc                h   t        |       \  }}	 | j                          | j                         }|dv r	 ||fS |rt        d| d      |j	                  ddd      r9t        t        | j                         j                        }| j                          nd}t        |       \  }}t        |||      })N)EOFNr  Got pseudo-element :: not at the end of a selector+>~r   )
parse_simple_selectorr  r  r!   is_delimr	   rQ   r  rg   r,   )r	  resultr4   r  r   next_selectors         r   r  r  (  s    26:FN
 {{}22 >!! %''77TU  ==c3'c6;;=#6#67J""$ J(=f(E%~!&*mD% r   c                L
   | j                          t        | j                        }| j                         }|j                  dk(  s|dk(  ru|j                  dk(  r| j                         j                  }n| j                          d }| j                         dk(  r!| j                          | j                         }n	|}d }nd x}}t        ||      }d }	 | j                         }|j                  dv s|j                  dddd      s|r|d	k(  rn|rt        d
| d      |j                  dk(  r4t        |t        t        | j                         j                              }n|dk(  r,| j                          t        || j                               }nZ|dk(  r,| j                          t        d | j                               }n)|dk(  r| j                          t!        ||       }n|dk(  r| j                          | j                         dk(  rZ| j                          | j                         }| j                         dk(  r%| j                          t#        |t%        |             }| j                         }|j'                         dv rt        |      }| j                         dk7  rt)        ||      }t+        |      dk(  rt        | j                        dk(  st        | j                        dk(  r| j                  d   j                  dk(  st        | j                        dk\  r| j                  d   j                  d      s]t        | j                        dk\  r:| j                  d   j                  dk(  r| j                  d   j                  d      st        d      | j                          | j                          |j'                         dk(  rj|rt        d      t-        | d      \  }	}
| j                         }|
rt        d
|
 d|j.                         |d	k7  rt        d |       t1        ||	      }n|j'                         d!k(  rt3        |       \  }}t5        |||      }nz|j'                         d"v rt7        |       }t9        ||      }nP|j'                         d#k(  rt7        |       }t;        ||      }n%t=        ||t%        |             }nt        d$|       t        | j                        |k(  rt        d$| j                                ||fS )%NIDENTr  rB   r  r   )Sr  r  r  r  r  r  r{   r  r  HASHr  rY   )r  r;   )r  r   )r  re   )z
first-linezfirst-letterbeforeafterzPseudo[Element[*]:scope]r      r   r#     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 )r  rD   usedr  rm   r  rg   next_ident_or_starr"   r  r!   r#   r	   rQ   r$   
next_identparse_attribr-   parse_argumentsr   r&   r=   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   rc   	selectorss                  r   r  r  @  s    %N;;=DyyGt~599++IKKMI;;=N*KKM//1GGI"")9g.F+/N
{{}II%}}S#sC0DN$:%''77TU  99&$sFKKM,?,?"@AF^#KKM66#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/2J2J32OFKK(A-"KKO00C7"KKO44S9 .9  KKM""${{}%"-.ABB4ID511 {{}*-/0G/HHZ[_[c[cZde  >)-0B4&.IJJ!&(3%'(?(G%
I!&*i@"33;FC	!&)4');FC	.vyA!&%1HI%(?v&FGGm n 6;;>)!$;FKKM?"KLL>!!r   c                    g }	 | j                          | j                         }|j                  dv s|dv r|j                  |       n|dk(  r|S t	        d|       Z)Nr   STRINGNUMBER)r  r  r  -r$  Expected an argument, got )r  r  rm   r   r!   )r	  rc   r  s      r   r7  r7    sq    I
 {{}9955 B
 :
 T"^#%(B4&&IJJ r   c                ~   | j                          d}| j                         }|dv r#|}| j                          | j                         }nt        ddd      }	 |j                  dv s|dv r|t	        t
        |j                        z  }n%|d	k(  rt        |      }||d   fS t        d
|       | j                         }f)Nr:   )rC  rD  )r  r  )r  r  r  r   r   r8  r@  )r&  r!  r$  rF  )	r  r  r   rm   r	   rQ   rg   r
  r!   )r	  r   r  r   r  s        r   r9  r9    s    
K;;=DOO
 {{}7CQ/

9955 B
 :
 4TZZ00K^#;'Fvay((%(B4&&IJJ{{} r   c                D   g }	 t        | d      \  }}|rt        d| d      | j                          | j                         }|dv r2| j                          | j                          |j	                  |       n'|dk(  r|j	                  |       	 |S t        d|       )NTr  z inside functionr  r$  rF  )r  r!   r  r  r   )r	  rc   r  r4   r  s        r   r:  r:    s    I
!6vt!D%''77GH  	 {{}22KKM""$V$^#V$  &(B4&&IJJ! r   c                   |j                          |j                         }|/|j                         dk7  rt        d|j                                |j                         dk(  rM|j	                          |j                         dk(  rd }|j	                          d}n|}|j                         }d }nd x}}||j                          |j	                         }|dk(  rt        | |t        t        |      dd       S |dk(  rd}ne|j                  dd	d
ddd      rA|j                         dk(  r.t        t        |j                        dz   }|j	                          nt        d|       |j                          |j	                         }|j                  dvrt        d|       |j                          |j	                         }|dk7  rt        d|       t        | |t        t        |      ||      S )Nr"  zExpected '|', got )r  =z|=)r  r<   r   rK  ^$rB   r  r   !zOperator expected, got )r   rA  zExpected string or ident, got zExpected ']', got )r  r4  r  r!   r  r5  r'   r	   rQ   r  rg   rm   )rV   r	  r   r   r   r  rg   s          r   r6  r6    s   
&&(F~&++->9!$6v{{}o"FGG {{}&;;=N*IKKMBI&&(FB	B	z {{}>!(ItC/@(DQQ>!B]]3S#sC8KKM^+c4::&,BKKM%(?v&FGG
KKMEzz,,!$B5'"JKK
;;=D~!$6tf"=>>(ItC'8"eDDr   c                l   | D ]  }|j                   dk(  st        d       dj                  d | D              j                         }|dk(  ry|dk(  ry|d	k(  ry
d	|vrdt	        |      fS |j                  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)``

    rA  z$String tokens not allowed in series.r:   c              3  P   K   | ]  }t        t        |j                           y wr1   )r	   rQ   rg   rv   s     r   rx   zparse_series.<locals>.<genexpr>)  s     ;F5S%++&Fs   $&odd)r   rA   even)r   r   n)rA   r   r   rA   >   r  rE  1)rm   
ValueErrorr|   stripintsplit)tokensri   r   rJ   rK   a_as_intb_as_ints          r   parse_seriesr\    s     ::!CDD  	;F;;AACAEzF{Cx
!|#a&y773?DAq	
jq3w<q6s1v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y)r   r8  rW  c                     y r1   r   clstype_rg   r8  s       r   __new__zToken.__new__C  s     r   c                     y r1   r   r_  s       r   rb  zToken.__new__K  s    LOr   c                D    t         j                  | ||f      }||_        |S r1   )tuplerb  r8  )r`  ra  rg   r8  objs        r   rb  zToken.__new__N  s"    mmC%0
r   c                V    d| j                    d| j                   d| j                   dS )N<z 'z' at r  )rm   rg   r8  rZ   s    r   r?   zToken.__repr__S  s)    499+R

|5
!<<r   c                @    | j                   dk(  xr | j                  |v S )Nr  )rm   rg   )r5   valuess     r   r  zToken.is_delimV  s    yyG#<

f(<<r   c                    | d   S )Nr   r   rZ   s    r   rm   z
Token.type[      Awr   c                    | d   S r]   r   rZ   s    r   rg   zToken.value_  rl  r   c                ~    | j                   dk(  rt        | j                        S t        t        | j                        S )NrA  )rm   r=   rg   r	   rQ   rZ   s    r   ru   z	Token.cssc  s.    99 

##C$$r   N)ra  z:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']rg   rQ   r8  rW  rN   r   )ra  zLiteral['EOF']rg   rO   r8  rW  rN   r   )ra  rQ   rg   r   r8  rW  rN   r   rP   )rj  rQ   rN   boolrN   r   )r   r   r   r
   rb  r?   r  __annotations__propertyrm   rg   ru   r   r   r   r   r   B  s    I  	
 
  O O
== 
H   %r   r   c                      e Zd ZddZddZy)EOFTokenc                2    t         j                  | dd |      S )Nr  )r   rb  )r`  r8  s     r   rb  zEOFToken.__new__j  s    }}S%s33r   c                <    d| j                    d| j                   dS )Nrh  z at r  )rm   r8  rZ   s    r   r?   zEOFToken.__repr__m  s    499+T$((1--r   N)r8  rW  rN   r   rP   )r   r   r   rb  r?   r   r   r   rt  rt  i  s    4.r   rt  c                  H    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y)	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   rx  rx  t  sE    >N33F+f4MH6(!H:.Fxq
+Gr   rx  c                  &    e Zd Z	 d	 	 	 	 	 	 	 ddZy)	MatchFuncc                     y r1   r   )r5   r   r8  endposs       r   __call__zMatchFunc.__call__~  s    "r   N)..)r   rQ   r8  rW  r  rW  rN   zre.Match[str] | None)r   r   r   r  r   r   r   r  r  }  s*    9<## ##36#	#r   r  c                ~    t        j                  | t        t              z  t         j                        j
                  S r1   )recompilevarsrx  
IGNORECASEr   )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)r  rA   c                x    t        | j                  d      d      }|t        j                  kD  rd}t	        |      S )NrA      i  )rW  r  sys
maxunicodechr)r   	codepoints     r   _replace_unicoder    s1    EKKNB'I3>>!	y>r   c                B    t        t        |       } t        t        |       S r1   )_sub_unicode_escaper  _sub_simple_escape_replace_simple)rg   s    r   unescape_identr    s     0%8Eou55r   c              #    K   d}t        |       }||k  r"t        | |      }|r t        dd|       |j                         }5t	        | |      }|rLt        t        t        t        |j                                     }t        d||       |j                         }t        | |      }|rOt        t        t        t        |j                         dd              }t        d||       |j                         }| |   }|t        v rt        |   | |dz         }|sJ d       |j                         }||k(  rt        d	|       | |   |k7  rt        d
|       t        t        t        t        t        d|j                                           }t        d||       |dz   }t        | |      }|r1|j                         }t        d||       |j                         }|dz   }| || dk(  r!| j                  d|      }|dk(  r|}n|dz  }
t        d| |   |       |dz  }||k  r"||k(  sJ t!        |       y w)Nr   rH  r#  r   r   rA   r%  z)Should have found at least an empty matchzUnclosed string at zInvalid string at r:   rA  rB  r   z/*z*/r   r  )rD   _match_whitespacer   end_match_identr  r  r  r  r  _match_hash_match_string_by_quoter!   _sub_newline_escape_match_numberfindrt  )r   r8  len_sr   rg   quoteend_pospos2s           r   r  r    sZ    
CFE
+!!-S#&&))+CQC(&!45Eu{{}!UE ,,))+CA3'&#$4ekkmAB6GHE s++))+C#***51!qAEEEE5iikG%),?u*EFFzU"),>se*DEE&#$&9"ekkm&LE %--A+CaS)KKME%--))+CQwS;$&&t$CbyqGQsVS))q} +@ %<<
3-s   H4I8Ic                  >    e Zd Zdd	dZd
dZd
dZddZddZddZy)r  Nc                    g | _         t        |      | _        || _        d | _        d| _        | j                  j                  | _        y NF)r3  iterrY  r  peeked_peeking__next__
next_token)r5   rY  r  s      r   r7   zTokenStream.__init__  s:    !#	6l$(++..r   c                    | j                   rFd| _         | j                  J | j                  j                  | j                         | j                  S | j	                         }| j                  j                  |       |S r  )r  r  r3  r   r  r5   r  s     r   r  zTokenStream.next  sc    ==!DM;;***IIT[[);; 		r   c                    | j                   s| j                         | _        d| _         | j                  J | j                  S )NT)r  r  r  rZ   s    r   r  zTokenStream.peek  s8    }}//+DK DM{{&&&{{r   c                    | j                         }|j                  dk7  rt        d|       t        t        |j
                        S )Nr   zExpected ident, got )r  rm   r!   r	   rQ   rg   r  s     r   r5  zTokenStream.next_ident  s=    yy{99%(<TF&CDDC$$r   c                    | j                         }|j                  dk(  r|j                  S |dk(  ry t        d|       )Nr   r!  zExpected ident or '*', got )r  rm   rg   r!   r  s     r   r4  zTokenStream.next_ident_or_star  sA    yy{99::>!!$?v"FGGr   c                d    | j                         }|j                  dk(  r| j                          y y )Nr#  )r  rm   r  )r5   r  s     r   r  zTokenStream.skip_whitespace  s'    yy{99IIK r   r1   )rY  Iterable[Token]r  r   rN   rO   )rN   r   rP   rp  )rN   rO   )	r   r   r   r7   r  r  r5  r4  r  r   r   r   r  r    s!    /%Hr   )r   rQ   rN   rQ   )ru   rQ   rN   zlist[Selector])r	  r  rN   zIterator[Selector])r	  r  rN   !tuple[Tree, PseudoElement | None])F)r	  r  r.  ro  rN   r  )r	  r  rN   zlist[Token])r	  r  rN   ztuple[Token, Selector])r	  r  rN   r   )rV   rM   r	  r  rN   r'   )rY  r  rN   ztuple[int, int])r  rQ   rN   r  )r   zre.Match[str]rN   rQ   )rg   rQ   rN   rQ   )r   rQ   rN   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!   rM   rQ   PseudoElementr/   r$   r-   r%   r&   r(   r)   r*   r+   r'   r"   r#   r,   r  r   r  r  r
  r  r  r  r7  r9  r:  r6  r\  re  r   rt  rx  r  r  r  r  r  r  r  subr  ry  r  r  r  methodcallerr  r  r  r  r  r   r   r   <module>r     s   #  	 
 T T T<< '8
I >- > 
 /45F FR *& &D 6 *) )0) )>@ @2 4< <~ : *) )8 
<	= 
M	N BJJF	
.T"2 27o"o"*.o"&o"dK 4,)EXH$%E#x}$% $%N.u ., ,# #H _- :;)*:;	6	7	6	7 
  RZZ)--  bjj!;!;R]]KOO  bjj!78<<  ((''36
DN+ +r   