
    !}g              
          d Z ddl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 dedefdZ G d de          Z G d	 d
ee          Zed         Zedef         Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d  d!          Z G d" d#          Z G d$ d%          Z  ej!        d&          Z" ej!        d'          Z# ej!        d(          Z$d)edee         fd*Z%d+d,dee         fd-Z&d+d,de
eee         f         fd.Z'	 dVd+d,d0e(de
eee         f         fd1Z)d+d,ded2         fd3Z*d+d,de
d2ef         fd4Z+d+d,dee         fd5Z,d6ed+d,defd7Z-d8ed2         de
e.e.f         fd9Z/ G d: d2e
eee         f                   Z0 G d; d<e0          Z1 G d= d>          Z2ej3        r G d? d@ej4                  Z5dAedd@fdBZ6 e6dC          Z7 e6dD          Z8 e6dE          Z9 e6dF          Z: e6dG           e6dH          dIZ; ej!        dJ          j<        Z= ej!        e2j>        ej?                  j<        Z@ ej!        dK          j<        ZA ejB        dLdM          ZCdNdOdefdPZDdQedefdRZEdSedee0         fdTZF G dU d,          ZGdS )Wa  
    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.

    N)IterableIteratorListOptionalSequenceTupleUnionstringreturnc                 v    |                      d                                                              d          S )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)r
   s    P/var/www/py-google-trends/myenv/lib/python3.11/site-packages/cssselect/parser.pyascii_lowerr      s.    ==  &&((//777    c                       e Zd ZdZdS )SelectorErrorzCommon parent for :class:`SelectorSyntaxError` and
    :class:`ExpressionError`.

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

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

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

    Ntreepseudo_elementr   c                 n    || _         |$t          |t                    st          |          }|| _        d S N)parsed_tree
isinstancer)   r   r-   )selfr,   r-   s      r   __init__zSelector.__init__F   s=    %jI`.a.a%(88N* -r   c                     t          | j        t                    rt          | j                  }n| j        rd| j        z  }nd}| j        j        d| j        |dS )N::%s [])r1   r-   r)   repr	__class__r   r0   )r2   r-   s     r   __repr__zSelector.__repr__`   sk    d)+BCC 	 !$"566NN  	 #d&99NNN!^444d6F6FWWr   c                 &   t          | j        t                    rd| j                                        z  }n| j        rd| j        z  }nd}| j                                        |}t          |          dk    r|                    d          }|S )z8Return a CSS representation for this selector (a string)r5   r6      *)r1   r-   r)   	canonicalr0   lenlstrip)r2   r-   ress      r   r?   zSelector.canonicali   s    d)+BCC 	 #d&9&C&C&E&EENN  	 #d&99NNN(22444nnEs88a<<**S//C
r   c                 ^    | j                                         \  }}}| j        r|dz  }|||fS )zReturn the specificity_ of this selector as a tuple of 3 integers.

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

        r=   )r0   specificityr-   r2   abcs       r   rD   zSelector.specificityv   s=     "..001a 	FA!Qwr   r/   )r   r   r   r   Treer   PseudoElementr3   strr;   r?   r   intrD   r   r   r   r+   r+   ;   s         - -T -8M3J -VZ - - - -4X# X X X X3    	U3S=1 	 	 	 	 	 	r   r+   c                   \    e Zd ZdZdededdfdZdefdZdefdZde	e
e
e
f         fd	ZdS )
r    z(
    Represents selector.class_name
    selector
class_namer   Nc                 "    || _         || _        d S r/   )rN   rO   )r2   rN   rO   s      r   r3   zClass.__init__   s     $r   c                 @    | j         j        d| j        d| j        dS )Nr7   .r8   )r:   r   rN   rO   r2   s    r   r;   zClass.__repr__   s&    "n555t}}}doooVVr   c                 H    | j                                         d| j        S )NrR   )rN   r?   rO   rS   s    r   r?   zClass.canonical   s%    -113333T__EEr   c                 P    | j                                         \  }}}|dz  }|||fS Nr=   rN   rD   rE   s       r   rD   zClass.specificity   /    -++--1a	Q!Qwr   r   r   r   r   rI   rK   r3   r;   r?   r   rL   rD   r   r   r   r    r       s         % %3 %4 % % % %W# W W W WF3 F F F FU3S=1      r   r    c                   ^    e Zd ZdZdeded         fdZdefdZdee         fdZ	defd	Z
d
S )r)   ax  
    Represents selector::name(arguments)

    .. attribute:: name

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

    .. attribute:: arguments

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

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

    name	argumentsTokenc                 <    t          |          | _        || _        d S r/   )r   r[   r\   )r2   r[   r\   s      r   r3   z FunctionalPseudoElement.__init__   s    %%	"r   r   c                 T    | j         j        d| j        dd | j        D             dS )Nz[::(c                     g | ]	}|j         
S r   value.0tokens     r   
<listcomp>z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>       555UU[555r   )])r:   r   r[   r\   rS   s    r   r;   z FunctionalPseudoElement.__repr__   s<    N###III55dn55555
 	
r   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r   typerd   s     r   rg   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>       777u
777r   r\   rS   s    r   argument_typesz&FunctionalPseudoElement.argument_types       777777r   c                 d    d                     d | j        D                       }| j        d|dS )Nr6   c              3   >   K   | ]}|                                 V  d S r/   cssrd   s     r   	<genexpr>z4FunctionalPseudoElement.canonical.<locals>.<genexpr>   *      ??uuyy{{??????r   r`   ))joinr\   r[   r2   argss     r   r?   z!FunctionalPseudoElement.canonical   s9    ww???????999ddd++r   N)r   r   r   r   rK   r   r3   r;   r   rp   r?   r   r   r   r)   r)      s         "#S #Xg-> # # # #
# 
 
 
 
8S	 8 8 8 8,3 , , , , , ,r   c                       e Zd ZdZdededed         ddfdZdefd	Zde	e         fd
Z
defdZdeeeef         fdZdS )r!   z(
    Represents selector:name(expr)
    rN   r[   r\   r]   r   Nc                 J    || _         t          |          | _        || _        d S r/   )rN   r   r[   r\   )r2   rN   r[   r\   s       r   r3   zFunction.__init__   s#     %%	"r   c                 d    | j         j        d| j        d| j        dd | j        D             dS )Nr7   :r`   c                     g | ]	}|j         
S r   rb   rd   s     r   rg   z%Function.__repr__.<locals>.<listcomp>   rh   r   ri   )r:   r   rN   r[   r\   rS   s    r   r;   zFunction.__repr__   sE    N###MMMIII55dn55555	
 	
r   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r   rl   rd   s     r   rg   z+Function.argument_types.<locals>.<listcomp>   rn   r   ro   rS   s    r   rp   zFunction.argument_types   rq   r   c                     d                     d | j        D                       }| j                                        d| j        d|dS )Nr6   c              3   >   K   | ]}|                                 V  d S r/   rt   rd   s     r   rv   z%Function.canonical.<locals>.<genexpr>   rw   r   r   r`   rx   )ry   r\   rN   r?   r[   rz   s     r   r?   zFunction.canonical   sO    ww???????"m557777DDDIIr   c                 P    | j                                         \  }}}|dz  }|||fS rV   rW   rE   s       r   rD   zFunction.specificity   rX   r   )r   r   r   r   rI   rK   r   r3   r;   r   rp   r?   r   rL   rD   r   r   r   r!   r!      s         # #S #Xg=N #SW # # # #

# 
 
 
 
8S	 8 8 8 8J3 J J J JU3S=1      r   r!   c                   \    e Zd ZdZdededdfdZdefdZdefdZde	e
e
e
f         fd	ZdS )
r"   z#
    Represents selector:ident
    rN   identr   Nc                 <    || _         t          |          | _        d S r/   )rN   r   r   )r2   rN   r   s      r   r3   zPseudo.__init__   s      ''


r   c                 @    | j         j        d| j        d| j        dS )Nr7   r   r8   )r:   r   rN   r   rS   s    r   r;   zPseudo.__repr__   s&    "n555t}}}djjjQQr   c                 H    | j                                         d| j        S )Nr   )rN   r?   r   rS   s    r   r?   zPseudo.canonical   s%    -113333TZZ@@r   c                 P    | j                                         \  }}}|dz  }|||fS rV   rW   rE   s       r   rD   zPseudo.specificity   rX   r   rY   r   r   r   r"   r"      s         ( (c (d ( ( ( (R# R R R RA3 A A A AU3S=1      r   r"   c                   \    e Zd ZdZdededdfdZdefdZdefdZde	e
e
e
f         fd	ZdS )
r$   z.
    Represents selector:not(subselector)
    rN   subselectorr   Nc                 "    || _         || _        d S r/   )rN   r   )r2   rN   r   s      r   r3   zNegation.__init__   s     &r   c                 @    | j         j        d| j        d| j        dS )Nr7   :not(ri   r:   r   rN   r   rS   s    r   r;   zNegation.__repr__   s)    #'>#:#:#:DMMM4K[K[K[\\r   c                     | j                                         }t          |          dk    r|                    d          }| j                                        d|dS )Nr=   r>   r   rx   )r   r?   r@   rA   rN   r2   subsels     r   r?   zNegation.canonical   sY    !++--v;;??]]3''F#}668888&&&AAr   c                     | j                                         \  }}}| j                                        \  }}}||z   ||z   ||z   fS r/   rN   rD   r   r2   a1b1c1a2b2c2s          r   rD   zNegation.specificity  N    ]..00
B%1133
BBwRb((r   )r   r   r   r   rI   r3   rK   r;   r?   r   rL   rD   r   r   r   r$   r$      s         ' 'D 'T ' ' ' ']# ] ] ] ]B3 B B B B)U3S=1 ) ) ) ) ) )r   r$   c                   \    e Zd ZdZdedddefdZdefdZdefd	Z	de
eeef         fd
ZdS )r%   z.
    Represents selector:has(subselector)
    rN   
combinatorr]   r   c                 0    || _         || _        || _        d S r/   rN   r   r   r2   rN   r   r   s       r   r3   zRelation.__init__  s     $&r   r   c                 @    | j         j        d| j        d| j        dS )Nr7   :has(ri   r   rS   s    r   r;   zRelation.__repr__  s/    N###MMM
 	
r   c                 $   	 | j         d                                         }n)# t          $ r | j                                         }Y nw xY wt          |          dk    r|                    d          }| j                                        d|dS )Nr   r=   r>   r   rx   )r   r?   	TypeErrorr@   rA   rN   r   s     r   r?   zRelation.canonical  s    	2%a(2244FF 	2 	2 	2%//11FFF	2v;;??]]3''F#}668888&&&AAs   " #AAc                     | j                                         \  }}}	 | j        d                                         \  }}}n-# t          $ r  | j                                        \  }}}Y nw xY w||z   ||z   ||z   fS )N)rN   rD   r   r   r   s          r   rD   zRelation.specificity"  s    ]..00
B	8)"-99;;JBBB 	8 	8 	8)5577JBBBB	8BwRb((s   #A 'A-,A-N)r   r   r   r   rI   r+   r3   rK   r;   r?   r   rL   rD   r   r   r   r%   r%     s         ' '7 ' ' ' ' '

# 
 
 
 
B3 B B B B)U3S=1 ) ) ) ) ) )r   r%   c                   d    e Zd ZdZdedee         fdZdefdZdefdZ	de
eeef         fdZd	S )
r&   z/
    Represents selector:is(selector_list)
    rN   selector_listc                 "    || _         || _        d S r/   rN   r   r2   rN   r   s      r   r3   zMatching.__init__0       *r   r   c           
          | j         j        d| j        dd                    t	          t
          | j                            dS )Nr7   :is(, ri   r:   r   rN   ry   mapr9   r   rS   s    r   r;   zMatching.__repr__4  E    N###MMMIIc$ 2334444
 	
r   c                    g }| j         D ]>}|                                }|                    |                    d                     ?| j                                        dd                    t          t          |                    dS )Nr>   r   r   rx   r   r?   appendrA   rN   ry   r   rK   r2   selector_argumentssselargs       r   r?   zMatching.canonical;  s    # 	: 	:A[[]]F%%fmmC&8&89999"m5577773sL^C_C_9`9`9`9`aar   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r/   )rD   )re   xs     r   rv   z'Matching.specificity.<locals>.<genexpr>C  s*      ??q1==????????r   )maxr   rS   s    r   rD   zMatching.specificityB  s"    ??D,>??????r   N)r   r   r   r   rI   r   r3   rK   r;   r?   r   rL   rD   r   r   r   r&   r&   +  s         + +htn + + + +
# 
 
 
 
b3 b b b b@U3S=1 @ @ @ @ @ @r   r&   c                   d    e Zd ZdZdedee         fdZdefdZdefdZ	de
eeef         fdZd	S )
r'   zz
    Represents selector:where(selector_list)
    Same as selector:is(selector_list), but its specificity is always 0
    rN   r   c                 "    || _         || _        d S r/   r   r   s      r   r3   zSpecificityAdjustment.__init__L  r   r   r   c           
          | j         j        d| j        dd                    t	          t
          | j                            dS )Nr7   :where(r   ri   r   rS   s    r   r;   zSpecificityAdjustment.__repr__P  r   r   c                    g }| j         D ]>}|                                }|                    |                    d                     ?| j                                        dd                    t          t          |                    dS )Nr>   r   r   rx   r   r   s       r   r?   zSpecificityAdjustment.canonicalW  s    # 	: 	:A[[]]F%%fmmC&8&89999M##%%%%IIc#1223333
 	
r   c                     dS )Nr   r   r   r   rS   s    r   rD   z!SpecificityAdjustment.specificitya  s    wr   N)r   r   r   r   rI   r   r3   rK   r;   r?   r   rL   rD   r   r   r   r'   r'   F  s         
+ +d4j + + + +
# 
 
 
 

3 
 
 
 
U3S=1      r   r'   c                      e Zd ZdZej        dedee         deddddd	dfd
            Z	ej        dedee         dededdd	dfd            Z	dedee         dededed         d	dfdZ	d	efdZ
d	efdZd	eeeef         fdZdS )r#   z>
    Represents selector[namespace|attrib operator value]
    rN   	namespaceattriboperatorztyping.Literal["exists"]rc   Nr   c                     d S r/   r   r2   rN   r   r   r   rc   s         r   r3   zAttrib.__init__j  s	     	r   r]   c                     d S r/   r   r   s         r   r3   zAttrib.__init__u  s	     	r   c                 L    || _         || _        || _        || _        || _        d S r/   )rN   r   r   r   rc   r   s         r   r3   zAttrib.__init__{  s+     !" 


r   c                    | j         r| j         d| j        }n| j        }| j        dk    r| j        j        d| j        d|dS | j        j        d| j        d|d| j        dt          j        d| j                  j        d
S )N|existsr7   z]] r]   )	r   r   r   r:   r   rN   typingcastrc   )r2   r   s     r   r;   zAttrib.__repr__  s    > 	! $<FF[F=H$$#'>#:#:#:DMMM666RR '''GTZ00666 r   c                 
   | j         r| j         d| j        }n| j        }| j        dk    r|}n7|| j        t          j        d| j                                                  }| j                                        d|dS )Nr   r   r]   r7   r8   )	r   r   r   r   r   rc   ru   rN   r?   )r2   r   ops      r   r?   zAttrib.canonical  s    > 	! $<FF[F=H$$BB#VT]]FK4T4T4X4X4Z4Z4Z[B=224444bbb99r   c                 P    | j                                         \  }}}|dz  }|||fS rV   rW   rE   s       r   rD   zAttrib.specificity  rX   r   )r   r   r   r   r   overloadrI   r   rK   r3   r;   r?   r   rL   rD   r   r   r   r#   r#   e  s         _ C= 	
 -  
   _ _)1#@COR[b	   _
 C= 	
    
   #     :3 : : : :U3S=1      r   r#   c                   v    e Zd ZdZd
dee         dee         ddfdZdefdZdefdZde	e
e
e
f         fd	ZdS )r   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nr   elementr   c                 "    || _         || _        d S r/   )r   r   )r2   r   r   s      r   r3   zElement.__init__  s    "r   c                 J    | j         j        d|                                 dS )Nr7   r8   )r:   r   r?   rS   s    r   r;   zElement.__repr__  s(    >222DNN4D4D4D4DEEr   c                 >    | j         pd}| j        r| j        d|}|S )Nr>   r   )r   r   )r2   r   s     r   r?   zElement.canonical  s/    ,%#> 	:!%9Gr   c                     | j         rdS dS )N)r   r   r=   r   r   rS   s    r   rD   zElement.specificity  s    < 	77r   )NN)r   r   r   r   r   rK   r3   r;   r?   r   rL   rD   r   r   r   r   r     s          (3- # Z^    F# F F F F3    U3S=1      r   r   c                   \    e Zd ZdZdededdfdZdefdZdefdZde	e
e
e
f         fd	ZdS )
r   z 
    Represents selector#id
    rN   idr   Nc                 "    || _         || _        d S r/   )rN   r   )r2   rN   r   s      r   r3   zHash.__init__  s     r   c                 @    | j         j        d| j        d| j        dS )Nr7   #r8   )r:   r   rN   r   rS   s    r   r;   zHash.__repr__  s&    "n555t}}}dgggNNr   c                 H    | j                                         d| j        S )Nr   )rN   r?   r   rS   s    r   r?   zHash.canonical  s%    -113333TWW==r   c                 P    | j                                         \  }}}|dz  }|||fS rV   rW   rE   s       r   rD   zHash.specificity  rX   r   rY   r   r   r   r   r     s          3 4    O# O O O O>3 > > > >U3S=1      r   r   c                   \    e Zd ZdedededdfdZdefdZdefdZdee	e	e	f         fd	Z
dS )
r(   rN   r   r   r   Nc                 8    |J || _         || _        || _        d S r/   r   r   s       r   r3   zCombinedSelector.__init__  s*    ### $&r   c                 p    | j         dk    rd}n| j         }| j        j        d| j        d|d| j        dS )Nr   z
<followed>r7   r8   )r   r:   r   rN   r   )r2   combs     r   r;   zCombinedSelector.__repr__  sJ    ?c!!DD?D!%!8!8!8$---tO_O_O_``r   c                     | j                                         }t          |          dk    r|                    d          }| j                                        d| j        d|S )Nr=   r>   r   )r   r?   r@   rA   rN   r   r   s     r   r?   zCombinedSelector.canonical  s_    !++--v;;??]]3''F!]446666PPr   c                     | j                                         \  }}}| j                                        \  }}}||z   ||z   ||z   fS r/   r   r   s          r   rD   zCombinedSelector.specificity  r   r   )r   r   r   rI   rK   r3   r;   r?   r   rL   rD   r   r   r   r(   r(     s        ' '3 'T 'd ' ' ' 'a# a a a aQ3 Q Q Q Q)U3S=1 ) ) ) ) ) )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]*$ru   c           	         t                               |           }|r1t          t          |                    d                              gS t
                              |           }|Tt          t          t          |                    d          pd          |                    d                              gS t                              |           }|Tt          t          t          |                    d          pd          |                    d                              gS t          t          |                     }| |_        t          t          |                    S )a  Parse a CSS *group of selectors*.

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

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

    r=   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8899::LLEgekk!nn.DEEEu{{ST~~VVWWXXOOC  Ewu{{1~~/EFFFTUWWXXYY#''FFM$V,,---r   r   r   c              #      K   |                                   	 t          t          |            V  |                                 dk    r)|                                  |                                   nd S \)Nr=   DELIM,)skip_whitespacer+   parse_selectorpeeknext)r   s    r   r   r   +  su      
v..////;;==N**KKMMM""$$$$Er   c                    t          |           \  }}	 |                                  |                                 }|dv rn|rt          d|z            |                    ddd          rFt          j        t          |                                 j	                  }|                                  nd}t          |           \  }}t          |||          }||fS )Nr=   )EOFNr   4Got pseudo-element ::%s not at the end of a selector+>~r   )parse_simple_selectorr   r  r   is_delimr   r   rK   r  rc   r(   )r   resultr-   r  r   next_selectors         r   r  r  6  s    26::FNE   {{}}222 	%FW   ==c3'' 	S&++--*=>>J""$$$$ J(=f(E(E%~!&*mDD%E& >!!r   Finside_negationc                    |                                   t          | j                  }|                                 }|j        dk    s|dk    r|j        dk    r|                                 j        }n|                                  d }|                                 dk    r)|                                  |                                 }n	|}d }nd x}}t          ||          }d }	 |                                 }|j        dv s |	                    dddd	          s|r|d
k    rn|rt          d|z            |j        dk    rAt          |t          j        t          |                                 j                            }n;|dk    r8|                                  t          ||                                           }n|dk    r8|                                  t          d |                                           }n|dk    r&|                                  t#          ||           }n|dk    rz|                                  |                                 dk    rs|                                  |                                 }|                                 dk    r1|                                  t%          |t'          |                     }|                                 }|                                dv rt          |          })|                                 dk    r t+          ||          }t-          |          dk    rt          | j                  dk    st          | j                  dk    r| j        d         j        dk    st          | j                  dk    r | j        d         	                    d          s]t          | j                  dk    r6| j        d         j        dk    r | j        d         	                    d          st          d          B|                                  |                                   |                                dk    r~|rt          d          t/          | d          \  }	}
|                                 }|
rt          d|
d |j                  |d
k    rt          d!|          t3          ||	          }n|                                d"k    r$t5          |           \  }}t7          |||          }n|                                d#v r t9          |           }t;          ||          }ni|                                d$k    r t9          |           }t=          ||          }n1t?          ||t'          |                     }nt          d%|          t          | j                  |k    r$t          d%|                                           ||fS )&NIDENTr   r>   r   r   r=   )Sr  r   r  r	  r
  r   rx   r  HASHr   rR   )r   r7   )r   r   )r   r`   )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)r  Got pseudo-element ::z inside :not() at zExpected ')', got has)matchesiswherezExpected selector, got ) r   r@   usedr  rm   r  rc   next_ident_or_starr   r  r   r   r   r   rK   r    
next_identparse_attribr)   parse_argumentsr   r"   r9   r  posr$   parse_relative_selectorr%   parse_simple_selector_argumentsr&   r'   r!   )r   r  selector_startr  r   r   r  r-   r   argumentargument_pseudo_elementr  r   r\   	selectorss                  r   r  r  N  s    %%N;;==DyGt~559+IIKKMMMI;;==N**KKMMM//11GGGII"")9g..F.2NXM{{}}I%%}}S#sC00 & &$(N$:$: 	%FW   9&&+c6;;==3F"G"GHHFF^##KKMMM66#4#4#6#677FF^##KKMMMT6#4#4#6#677FF^##KKMMM!&&11FF^##KKMMM{{}}..!'!2!2!4!4;;==N22KKMMM%<&(?(?& &N %%''E{{}} QQQ "%U{{}}....<<#===FK((A--,,11fk!n6IS6P6P,,11fk"o6N6Ns6S6S1,,11 &B 4 ; ; &B 8 8 = = !< 2=   KKMMM""$$${{}}%%" C-.ABBB4ID5 5 511 {{}}* --222DHH>   >))--.NOOO!&(33%''(?(G(G%
I!&*i@@"333;FCC	!&)44'));FCC	.vyAA!&%1H1HII%%TT&KLLLqXMr 6;>))!!"PQQQ>!!r   r]   c                     g }	 |                                   |                                 }|j        dv s|dv r|                    |           n|dk    r|S t	          d|          f)Nr=   r  STRINGNUMBER)r   r  r   -r  Expected an argument, got )r   r  rm   r   r   )r   r\   r  s      r   r(  r(    s    !IP   {{}}9555Aa9a9aT""""^##%%&NOOOPr   c                    |                                   d}|                                 }|dv r+|}|                                   |                                 }nt          ddd          }	 |j        dv s|d	v r#|t	          j        t          |j                  z  }n1|d
k    rt          |          }||d         fS t          d|          |                                 }v)Nr6   )r4  r5  )r   r	  )r   r
  r   r   r   r)  r=   r1  )r  r  r  r7  )
r   r  r]   rm   r   r   rK   rc   r   r   )r   r   r  r   r  s        r   r*  r*    s    
K;;==DOOO
   {{}}7CQ///
9555Aa9a9a6;sDJ777KK^##;''Fvay((%%&NOOO{{}}r   c                    g }	 t          | d          \  }}|rt          d|d          |                                  |                                 }|dv r>|                                  |                                  |                    |           n.|dk    r|                    |           nt          d|          |S )Nr=   Tr  z inside functionr  r  r7  )r  r   r   r  r   )r   r\   r  r-   r  s        r   r+  r+    s    IP!6vt!D!D 	%%=K^^M   	   {{}}222KKMMM""$$$V$$$$^##V$$$%%&NOOO!P" r   rN   c                    |                                  |                                }|<|                                dk    r$t          d|                                          |                                dk    r^|                                 |                                dk    rd }|                                 d}n|}|                                }d }nd x}}||                                  |                                }|dk    r+t          | |t          j        t          |          dd           S |dk    rd}n{|
                    dd	d
ddd          rO|                                dk    r7t          j        t          |j                  dz   }|                                 nt          d|          |                                  |                                }|j        dvrt          d|          |                                  |                                }|dk    rt          d|          t          | |t          j        t          |          ||          S )Nr  zExpected '|', got )r   =z|=)r   r8   r   r<  ^$r>   r
  r   !zOperator expected, got )r  r2  zExpected string or ident, got zExpected ']', got )r   r%  r  r   r  r&  r#   r   r   rK   r  rc   rm   )rN   r   r   r   r   r  rc   s          r   r'  r'    sF   
&&((F~&++-->99!!FKKMMM"KLLL {{}}&&;;==N**IKKMMMBBI&&((FBB	B	z   {{}}>!!(Iv{3/G/GSWXXX^##BB]]3S#sC88 	Mfkkmm~>]>]S$*--3BKKMMMM%%TT&KLLL
KKMMEz,,,!!"OPPP
;;==D~!!DD"BCCC(Iv{3'?'?UKKKr   tokensc                    | D ]}|j         dk    rt          d          d                    d | D                                                       }|dk    rdS |dk    rdS |d	k    rd
S d	|vrdt	          |          fS |                    d	d          \  }}|sd}n.|dk    s|dk    rt	          |dz             }nt	          |          }|sd}nt	          |          }||fS )zv
    Parses the arguments for :nth-child() and friends.

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

    r2  z$String tokens not allowed in series.r6   c              3   T   K   | ]#}t          j        t          |j                  V  $d S r/   )r   r   rK   rc   rd   s     r   rv   zparse_series.<locals>.<genexpr>1  s0      BB%C--BBBBBBr   odd)r   r=   even)r   r   n)r=   r   r   r=   r6  r  1)rm   
ValueErrorry   striprL   split)r@  rf   r   rF   rG   a_as_intb_as_ints          r   parse_seriesrL  &  s     E E:!!CDDD "
BB6BBBBBHHJJAEzzt	
ft	
ct
!||#a&&y773??DAq 	
cQ#XXq3w<<q66 q66Xr   c            	          e Zd ZU ej        dddededd fd            Zej        dddddedd fd	            Zdedee         dedd fd
ZdefdZ	dede
fdZeed<   edefd            Zedee         fd            ZdefdZdS )r]   type_zAtyping.Literal["IDENT", "HASH", "STRING", "S", "DELIM", "NUMBER"]rc   r)  r   c                     d S r/   r   clsrN  rc   r)  s       r   __new__zToken.__new__O  s	     	r   ztyping.Literal["EOF"]Nc                     d S r/   r   rP  s       r   rR  zToken.__new__X  s    r   c                 N    t                               | ||f          }||_        |S r/   )tuplerR  r)  )rQ  rN  rc   r)  objs        r   rR  zToken.__new__\  s%    mmC%00
r   c                 0    d| j         | j        | j        fz  S )Nz<%s '%s' at %i>)rm   rc   r)  rS   s    r   r;   zToken.__repr__a  s     DItz48#DDDr   valuesc                 *    | j         dk    o| j        |v S )Nr   )rm   rc   )r2   rX  s     r   r  zToken.is_delimd  s    yG#<
f(<<r   c                     | d         S )Nr   r   rS   s    r   rm   z
Token.typei      Awr   c                     | d         S rV   r   rS   s    r   rc   zToken.valuem  r[  r   c                 ~    | j         dk    rt          | j                  S t          j        t
          | j                  S )Nr2  )rm   r9   rc   r   r   rK   rS   s    r   ru   z	Token.cssq  s3    9  
###;sDJ///r   )r   r   r   r   r   rK   rL   rR  r   r;   boolr  __annotations__propertyrm   rc   ru   r   r   r   r]   r]   N  s        _R  	
 
   _ _3 D s w    _C  C G    
E# E E E E= = = = = = 
HHHc    X x}    X0S 0 0 0 0 0 0r   c                   *    e Zd Zdedd fdZdefdZdS )EOFTokenr)  r   c           	      b    t          j        dt                              | dd |                    S )Nrb  r  )r   r   r]   rR  )rQ  r)  s     r   rR  zEOFToken.__new__y  s&    {:u}}S%s'K'KLLLr   c                 $    d| j         | j        fz  S )Nz
<%s at %i>)rm   r)  rS   s    r   r;   zEOFToken.__repr__|  s    ty$(333r   N)r   r   r   rL   rR  rK   r;   r   r   r   rb  rb  x  sW        M# M* M M M M4# 4 4 4 4 4 4r   rb  c                   J    e Zd ZdZedz   Zdez   ZdZdedeZdedeZdS )	TokenMacrosz&\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?z|\\[^\n\r\f0-9a-f]z\\(?:\n|\r\n|\r|\f)|z
[^\0-\177]z[_a-z0-9-]|r   z[_a-z]|N)	r   r   r   unicode_escapeescapestring_escapenonasciinmcharnmstartr   r   r   rf  rf    sQ        >N33F+f4MHH#)66884FF &1GGGr   rf  c            
       6    e Zd Z	 d	dedededed         fdZdS )
	MatchFunc.r
   r)  endposr   re.Match[str]c                     d S r/   r   )r2   r
   r)  ro  s       r   __call__zMatchFunc.__call__  s	     Cr   N)..)r   r   r   rK   rL   r   rr  r   r   r   rn  rn    sU        =@	 		$'	7:	o&	 	 	 	 	 	r   rn  patternc                 t    t          j        | t          t                    z  t           j                  j        S r/   )recompilevarsrf  
IGNORECASEr   )rs  s    r   _compilery    s&    :g[ 1 112=AAGGr   z[ \t\r\n\f]+z[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)z#(?:%(nmchar)s)+z -?(?:%(nmstart)s)(?:%(nmchar)s)*z!([^\n\r\f\\']|%(string_escape)s)*z!([^\n\r\f\\"]|%(string_escape)s)*)'"z\\(.)z\\(?:\n|\r\n|\r|\f)r   r=   r   rp  c                     t          |                     d          d          }|t          j        k    rd}t	          |          S )Nr=      i  )rL   r   sys
maxunicodechr)r   	codepoints     r   _replace_unicoder    s9    EKKNNB''I3>!!	y>>r   rc   c                 Z    t          t          |           } t          t          |           } | S r/   )_sub_unicode_escaper  _sub_simple_escape_replace_simplerb   s    r   unescape_identr    s&     0%88E66ELr   r   c              #     K   d}t          |           }||k     rt          | |          }|r(t          dd|          V  |                                }Bt	          | |          }|rbt          t          t          t          |	                                                    }t          d||          V  |                                }t          | |          }|rkt          t          t          t          |	                                dd                              }t          d||          V  |                                }5| |         }|t          v rt          |         | |dz             }|s
J d            |                                }||k    rt          d	|z            | |         |k    rt          d
|z            t          t          t          t          t          d|	                                                              }t          d||          V  |dz   }t          | |          }|r=|	                                }t          d||          V  |                                }h|dz   }| ||         dk    r&|                     d|          }|dk    r|}n|dz  }t          d| |         |          V  |dz  }||k     ||k    sJ t!          |          V  d S )Nr   r9  r  r   r  r=   r  z)Should have found at least an empty matchzUnclosed string at %szInvalid string at %sr6   r2  r3  r   z/*z*/r   r   )r@   _match_whitespacer]   end_match_identr  r  r  r  r   _match_hash_match_string_by_quoter   _sub_newline_escape_match_numberfindrb  )r   r)  len_sr   rc   quoteend_pospos2s           r   r   r     s%     
CFFE
++!!--- 	S#&&&&&))++CQC((( 	&!45Eu{{}}!U!U E ,,,,,))++CA3''' 	&!45Eu{{}}UVUWUWGX!Y!Y E s+++++))++C#****51!qAAAEEEEEEEiikkG%)*AC*GHHHzU"")*@3*FGGG&#$46I"ekkmm6\6\]] E %-----A+CaS))) 	KKMME%-----))++CQwSX;$&&t$$CbyyqGQsVS)))))qw ++z %<<<<
3--r   c                       e Zd Zddee         dee         ddfdZdefdZdefdZ	defdZ
dee         fd	Zdd
ZdS )r   Nr@  r   r   c                     g | _         t          |          | _        || _        d | _        d| _        | j        j        | _        d S NF)r$  iterr@  r   peeked_peeking__next__
next_token)r2   r@  r   s      r   r3   zTokenStream.__init__  s;    !#	6ll'++.r   c                 *   | j         r]d| _         | j                            t          j        t
          | j                             t          j        t
          | j                  S |                                 }| j                            |           |S r  )r  r$  r   r   r   r]   r  r  r2   r  s     r   r  zTokenStream.next  su    = 	!DMIV[<<===;udk222??$$DIT"""Kr   c                     | j         s |                                 | _        d| _         t          j        t
          | j                  S )NT)r  r  r  r   r   r]   rS   s    r   r  zTokenStream.peek  s8    } 	!//++DK DM{5$+...r   c                     |                                  }|j        dk    rt          d|          t          j        t
          |j                  S )Nr  zExpected ident, got )r  rm   r   r   r   rK   rc   r  s     r   r&  zTokenStream.next_ident  sF    yy{{9%%$$&HIII{3
+++r   c                     |                                  }|j        dk    r|j        S |dk    rd S t          d|          )Nr  r  zExpected ident or '*', got )r  rm   rc   r   r  s     r   r%  zTokenStream.next_ident_or_star  sJ    yy{{9:^##4%%&OPPPr   c                 p    |                                  }|j        dk    r|                                  d S d S )Nr  )r  rm   r  )r2   r  s     r   r   zTokenStream.skip_whitespace#  s5    yy{{9IIKKKKK r   r/   )r   N)r   r   r   r   r]   r   rK   r3   r  r  r&  r%  r   r   r   r   r   r     s        / /x / /QU / / / /e    /e / / / /,C , , , ,QHSM Q Q Q Q     r   )F)Hr   r~  ru  r   r   r   r   r   r   r   r   r	   rK   r   	Exceptionr   SyntaxErrorr   rI   rJ   r+   r    r)   r!   r"   r$   r%   r&   r'   r#   r   r   r(   rv  r   r   r   r   r   r  r^  r  r(  r*  r+  r'  rL   rL  r]   rb  rf  TYPE_CHECKINGProtocolrn  ry  r  r  r  r  r  subr  rg  Ir  r  methodcallerr  r  r  r   r   r   r   r   <module>r     sk    


 				   M M M M M M M M M M M M M M M M M M8 8 8 8 8 8
    I   > > > > >- > > > 
 /45D D D D D D D DN       *", ", ", ", ", ", ", ",J       >       *) ) ) ) ) ) ) )0 )  )  )  )  )  )  )  )F@ @ @ @ @ @ @ @6       >D D D D D D D DN       8       *) ) ) ) ) ) ) ): 
<	=	= 
M	N	N BJYZZ	.s .tH~ . . . .P 8H3E    "= "U4-9P3P-Q " " " "2 49q" q"q",0q"
4-(()q" q" q" q"h
PM 
Pd7m 
P 
P 
P 
PM eGX<M6N    .M d4j    ,'L4 'L 'L6 'L 'L 'L 'LT"'* "uS#X " " " "P'0 '0 '0 '0 '0E#x}$% '0 '0 '0T4 4 4 4 4u 4 4 42 2 2 2 2 2 2 2 
     FO   Hc Hk H H H H H_-- :;;h)**x:;;	6	7	7	6	7	7  
  RZ))-  bj!;RTBBF  bj!788<  (('33O     # #    A A A A A AH+ + + + + + + + + +r   