o
    /h                     @  s  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r8ddlmZmZmZ ddlmZ dsd
dZG dd deZG dd deeZed Zedef ZG dd dZG dd dZG dd dZG dd dZG dd dZ G dd dZ!G dd dZ"G dd  d Z#G d!d" d"Z$G d#d$ d$Z%G d%d& d&Z&G d'd( d(Z'G d)d* d*Z(e)d+Z*e)d,Z+e)d-Z,dtd0d1Z-dud5d6Z.dvd8d9Z/	:dwdxd=d>Z0dyd@dAZ1dzdCdDZ2d{dFdGZ3d|dJdKZ4d}dOdPZ5G dQdR dRe6ee	e f Z7G dSdT dTe7Z8G dUdV dVZ9G dWdX dXe
Z:d~dZd[Z;e;d\Z<e;d]Z=e;d^Z>e;d_Z?e;d`e;dadbZ@e)dcjAZBe)e9jCejDjAZEe)ddjAZFeGdedfZHddidjZIddldmZJddpdqZKG drd3 d3ZLdS )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)Selfstringstrreturnc                 C  s   |  d dS )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)r    r   D/var/www/html/myenv/lib/python3.10/site-packages/cssselect/parser.pyascii_lower   s   r   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   r   !       r   c                   @  r   )SelectorSyntaxErrorz3Parsing a selector that does not match the grammar.Nr   r   r   r   r   r    +   r   r    )ElementHashClassFunctionPseudoAttribNegationRelationMatchingSpecificityAdjustmentCombinedSelectorFunctionalPseudoElementc                   @  s:   e Zd ZdZddd	d
ZdddZdddZdddZdS )Selectoru"  
    Represents a parsed selector.

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

    NtreeTreepseudo_elementPseudoElement | Noner   Nonec                 C  s*   || _ |d urt|tst|}|| _d S N)parsed_tree
isinstancer,   r   r0   )selfr.   r0   r   r   r   __init__L   s   

zSelector.__init__r   c                 C  sJ   t | jtrt| j}n| jrd| j }nd}| jj d| j| dS )N:: [])r5   r0   r,   repr	__class__r   r4   )r6   r0   r   r   r   __repr__h   s   zSelector.__repr__c                 C  sb   t | jtrd| j  }n| jrd| j }nd}| j  | }t|dkr/|d}|S )z8Return a CSS representation for this selector (a string)r8   r9      *)r5   r0   r,   	canonicalr4   lenlstrip)r6   r0   resr   r   r   rA   q   s   
zSelector.canonicaltuple[int, int, int]c                 C  s(   | j  \}}}| jr|d7 }|||fS )zReturn the specificity_ of this selector as a tuple of 3 integers.

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

        r?   )r4   specificityr0   r6   abcr   r   r   rF   ~   s   
zSelector.specificityr3   )r.   r/   r0   r1   r   r2   r   r   r   rE   r   r   r   r   r7   r>   rA   rF   r   r   r   r   r-   A   s    


	r-   c                   @  8   e Zd ZdZddd	Zdd
dZdddZdddZdS )r#   z(
    Represents selector.class_name
    selectorr/   
class_namer   r   r2   c                 C     || _ || _d S r3   )rO   rP   )r6   rO   rP   r   r   r   r7         
zClass.__init__c                 C     | j j d| jd| j dS )Nr:   .r;   )r=   r   rO   rP   r6   r   r   r   r>         zClass.__repr__c                 C     | j   d| j S )NrT   )rO   rA   rP   rU   r   r   r   rA         zClass.canonicalrE   c                 C  "   | j  \}}}|d7 }|||fS Nr?   rO   rF   rG   r   r   r   rF         
zClass.specificityN)rO   r/   rP   r   r   r2   rK   rL   rM   r   r   r   r   r#          


r#   c                   @  s8   e Zd ZdZdddZdd	d
ZdddZdddZdS )r,   ax  
    Represents selector::name(arguments)

    .. attribute:: name

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

    .. attribute:: arguments

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

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

    namer   	argumentsSequence[Token]c                 C  s   t || _|| _d S r3   )r   r^   r_   )r6   r^   r_   r   r   r   r7         

z FunctionalPseudoElement.__init__r   c                 C  s,   dd | j D }| jj d| j d|dS )Nc                 S     g | ]}|j qS r   value.0tokenr   r   r   
<listcomp>       z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>z[::()])r_   r=   r   r^   r6   token_valuesr   r   r   r>      s   z FunctionalPseudoElement.__repr__	list[str]c                 C     dd | j D S )Nc                 S  rb   r   typere   r   r   r   rh      ri   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>r_   rU   r   r   r   argument_types      z&FunctionalPseudoElement.argument_typesc                 C  s(   d dd | jD }| j d| dS )Nr9   c                 s      | ]}|  V  qd S r3   cssre   r   r   r   	<genexpr>       z4FunctionalPseudoElement.canonical.<locals>.<genexpr>rj   ))joinr_   r^   r6   argsr   r   r   rA      s   z!FunctionalPseudoElement.canonicalN)r^   r   r_   r`   rK   r   rn   )r   r   r   r   r7   r>   rs   rA   r   r   r   r   r,      s    


c                   @  sB   e Zd ZdZdd
dZdddZdddZdddZdddZdS )r$   z(
    Represents selector:name(expr)
    rO   r/   r^   r   r_   r`   r   r2   c                 C  s   || _ t|| _|| _d S r3   )rO   r   r^   r_   )r6   rO   r^   r_   r   r   r   r7      s   

zFunction.__init__c                 C  s4   dd | j D }| jj d| jd| j d|dS )Nc                 S  rb   r   rc   re   r   r   r   rh      ri   z%Function.__repr__.<locals>.<listcomp>r:   :rj   rk   )r_   r=   r   rO   r^   rl   r   r   r   r>      s   $zFunction.__repr__rn   c                 C  ro   )Nc                 S  rb   r   rp   re   r   r   r   rh      ri   z+Function.argument_types.<locals>.<listcomp>rr   rU   r   r   r   rs      rt   zFunction.argument_typesc                 C  s4   d dd | jD }| j  d| j d| dS )Nr9   c                 s  ru   r3   rv   re   r   r   r   rx      ry   z%Function.canonical.<locals>.<genexpr>r   rj   rz   )r{   r_   rO   rA   r^   r|   r   r   r   rA      s   zFunction.canonicalrE   c                 C  rY   rZ   r[   rG   r   r   r   rF      r\   zFunction.specificityN)rO   r/   r^   r   r_   r`   r   r2   rK   r~   rL   )	r   r   r   r   r7   r>   rs   rA   rF   r   r   r   r   r$      s    



r$   c                   @  rN   )r%   z#
    Represents selector:ident
    rO   r/   identr   r   r2   c                 C  s   || _ t|| _d S r3   )rO   r   r   )r6   rO   r   r   r   r   r7      s   zPseudo.__init__c                 C  rS   )Nr:   r   r;   )r=   r   rO   r   rU   r   r   r   r>      rV   zPseudo.__repr__c                 C  rW   )Nr   )rO   rA   r   rU   r   r   r   rA      rX   zPseudo.canonicalrE   c                 C  rY   rZ   r[   rG   r   r   r   rF      r\   zPseudo.specificityN)rO   r/   r   r   r   r2   rK   rL   rM   r   r   r   r   r%      r]   r%   c                   @  s8   e Zd ZdZdddZdd
dZdddZdddZdS )r'   z.
    Represents selector:not(subselector)
    rO   r/   subselectorr   r2   c                 C  rQ   r3   )rO   r   )r6   rO   r   r   r   r   r7      rR   zNegation.__init__r   c                 C     | j j d| jd| jdS )Nr:   :not(rk   r=   r   rO   r   rU   r   r   r   r>      rV   zNegation.__repr__c                 C  s6   | j  }t|dkr|d}| j  d| dS )Nr?   r@   r   rz   )r   rA   rB   rC   rO   r6   subselr   r   r   rA      s   

zNegation.canonicalrE   c                 C  6   | j  \}}}| j \}}}|| || || fS r3   rO   rF   r   r6   a1b1c1a2b2c2r   r   r   rF        zNegation.specificityN)rO   r/   r   r/   r   r2   rK   rL   rM   r   r   r   r   r'      s    


r'   c                   @  s8   e Zd ZdZddd	ZdddZdddZdddZdS )r(   z.
    Represents selector:has(subselector)
    rO   r/   
combinatorTokenr   r-   c                 C  s   || _ || _|| _d S r3   rO   r   r   r6   rO   r   r   r   r   r   r7     s   
zRelation.__init__r   r   c                 C  r   )Nr:   :has(rk   r   rU   r   r   r   r>     rV   zRelation.__repr__c                 C  s\   z	| j d  }W n ty   | j  }Y nw t|dkr#|d}| j  d| dS )Nr   r?   r@   r   rz   )r   rA   	TypeErrorrB   rC   rO   r   r   r   r   rA     s   
zRelation.canonicalrE   c                 C  sb   | j  \}}}z| jd  \}}}W n ty%   | j \}}}Y nw || || || fS )N)rO   rF   r   r   r   r   r   r   rF     s   zRelation.specificityN)rO   r/   r   r   r   r-   rK   rL   rM   r   r   r   r   r(   	  s    


	r(   c                   @  8   e Zd ZdZdddZdd
dZdddZdddZdS )r)   z/
    Represents selector:is(selector_list)
    rO   r/   selector_listIterable[Tree]c                 C  rQ   r3   rO   r   r6   rO   r   r   r   r   r7   -  rR   zMatching.__init__r   r   c                 C  2   d dd | jD }| jj d| jd| dS )N, c                 s      | ]}t |V  qd S r3   r<   rf   sr   r   r   rx   2  ry   z$Matching.__repr__.<locals>.<genexpr>r:   :is(rk   r{   r   r=   r   rO   r6   args_strr   r   r   r>   1     zMatching.__repr__c                 C  R   g }| j D ]}| }||d qddd |D }| j  d| dS )Nr@   r   c                 s  r   r3   r   r   r   r   r   rx   :  ry   z%Matching.canonical.<locals>.<genexpr>r   rz   r   rA   appendrC   r{   rO   r6   selector_argumentsr   selargr   r   r   r   rA   5     
zMatching.canonicalrE   c                 C  s   t dd | jD S )Nc                 s  ru   r3   )rF   )rf   xr   r   r   rx   >  ry   z'Matching.specificity.<locals>.<genexpr>)maxr   rU   r   r   r   rF   =     zMatching.specificityN)rO   r/   r   r   rK   rL   rM   r   r   r   r   r)   (  s    


r)   c                   @  r   )r*   zz
    Represents selector:where(selector_list)
    Same as selector:is(selector_list), but its specificity is always 0
    rO   r/   r   
list[Tree]c                 C  rQ   r3   r   r   r   r   r   r7   G  rR   zSpecificityAdjustment.__init__r   r   c                 C  r   )Nr   c                 s  r   r3   r   r   r   r   r   rx   L  ry   z1SpecificityAdjustment.__repr__.<locals>.<genexpr>r:   :where(rk   r   r   r   r   r   r>   K  r   zSpecificityAdjustment.__repr__c                 C  r   )Nr@   r   c                 s  r   r3   r   r   r   r   r   rx   T  ry   z2SpecificityAdjustment.canonical.<locals>.<genexpr>r   rz   r   r   r   r   r   rA   O  r   zSpecificityAdjustment.canonicalrE   c                 C  s   dS )Nr   r   r   r   rU   r   r   r   rF   W     z!SpecificityAdjustment.specificityN)rO   r/   r   r   rK   rL   rM   r   r   r   r   r*   A  s    


r*   c                   @  sT   e Zd ZdZedddZedddZdddZdddZdddZdddZdS ) r&   z>
    Represents selector[namespace|attrib operator value]
    rO   r/   	namespace
str | Noneattribr   operatorLiteral['exists']rd   r2   r   c                 C     d S r3   r   r6   rO   r   r   r   rd   r   r   r   r7   `     zAttrib.__init__r   c                 C  r   r3   r   r   r   r   r   r7   j  r   Token | Nonec                 C  s"   || _ || _|| _|| _|| _d S r3   )rO   r   r   r   rd   r   r   r   r   r7   t  s
   
c              
   C  s   | j r| j  d| j n| j}| jdkr"| jj d| jd| dS | jd us)J | jj d| jd| d| j d| jjd
S )N|existsr:   z]] )r   r   r   r=   r   rO   rd   )r6   r   r   r   r   r>     s
   
.zAttrib.__repr__c                 C  sj   | j r| j  d| j n| j}| jdkr|}n| jd usJ | | j | j  }| j  d| dS )Nr   r   r:   r;   )r   r   r   rd   rw   rO   rA   )r6   r   opr   r   r   rA     s   
zAttrib.canonicalrE   c                 C  rY   rZ   r[   rG   r   r   r   rF     r\   zAttrib.specificityN)rO   r/   r   r   r   r   r   r   rd   r2   r   r2   )rO   r/   r   r   r   r   r   r   rd   r   r   r2   )rO   r/   r   r   r   r   r   r   rd   r   r   r2   rK   rL   )	r   r   r   r   r	   r7   r>   rA   rF   r   r   r   r   r&   [  s    	
	

r&   c                   @  s<   e Zd ZdZ	dddd	ZdddZdddZdddZdS )r!   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nr   r   elementr   r2   c                 C  rQ   r3   )r   r   )r6   r   r   r   r   r   r7     s   
zElement.__init__r   c                 C  s   | j j d|   dS )Nr:   r;   )r=   r   rA   rU   r   r   r   r>        zElement.__repr__c                 C  s$   | j pd}| jr| j d| }|S )Nr@   r   )r   r   )r6   r   r   r   r   rA     s   
zElement.canonicalrE   c                 C  s   | j rdS dS )N)r   r   r?   r   r   rU   r   r   r   rF     s   zElement.specificity)NN)r   r   r   r   r   r2   rK   rL   rM   r   r   r   r   r!     s    

r!   c                   @  rN   )r"   z 
    Represents selector#id
    rO   r/   idr   r   r2   c                 C  rQ   r3   )rO   r   )r6   rO   r   r   r   r   r7     rR   zHash.__init__c                 C  rS   )Nr:   #r;   )r=   r   rO   r   rU   r   r   r   r>     rV   zHash.__repr__c                 C  rW   )Nr   )rO   rA   r   rU   r   r   r   rA     rX   zHash.canonicalrE   c                 C  s"   | j  \}}}|d7 }|||fS rZ   r[   rG   r   r   r   rF     r\   zHash.specificityN)rO   r/   r   r   r   r2   rK   rL   rM   r   r   r   r   r"     r]   r"   c                   @  s4   e Zd Zddd	Zdd
dZdddZdddZdS )r+   rO   r/   r   r   r   r   r2   c                 C  s"   |d usJ || _ || _|| _d S r3   r   r   r   r   r   r7     s   
zCombinedSelector.__init__c                 C  s8   | j dkrdn| j }| jj d| jd| d| jdS )Nr   z
<followed>r:   r;   )r   r=   r   rO   r   )r6   combr   r   r   r>     s   "zCombinedSelector.__repr__c                 C  s<   | j  }t|dkr|d}| j  d| j d| S )Nr?   r@   r   )r   rA   rB   rC   rO   r   r   r   r   r   rA     s   

zCombinedSelector.canonicalrE   c                 C  r   r3   r   r   r   r   r   rF     r   zCombinedSelector.specificityN)rO   r/   r   r   r   r/   r   r2   rK   rL   )r   r   r   r7   r>   rA   rF   r   r   r   r   r+     s
    


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]*$rw   list[Selector]c                 C  s   t | }|rtt|ddgS t| }|dur.ttt|dp$dd|dgS t| }|durJttt|dp@d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)rw   r   streamr   r   r   parse  s   

&
"r   r   r   Iterator[Selector]c                 c  s>    |    	 tt|  V  |  dkr|   |    nd S q)Nr?   DELIM,)skip_whitespacer-   parse_selectorpeeknext)r   r   r   r   r     s   
r   !tuple[Tree, PseudoElement | None]c                 C  s   t | \}}	 |   |  }|dv r	 ||fS |r"td| d|dddr6tt|  j}|   nd}t | \}}t	|||}q)	Nr?   )EOFNr   Got pseudo-element :: not at the end of a selector+>~r   )
parse_simple_selectorr   r   r    is_delimr   r   r   rd   r+   )r   resultr0   r   r   next_selectorr   r   r   r   (  s$   

r   Finside_negationboolc                 C  s  |    t| j}|  }|jdks|dkr;|jdkr!|  j}n|   d }|  dkr6|   |  }n	|}d }nd  }}t||}d }	 |  }|jdv s^|	dddd	s^|r`|d
kr`nj|rjt
d| d|jdkr|t|tt|  j}nM|dkr|   t||  }n<|dkr|   td |  }n+|dkr|   t|| }n|dkr|   |  dkr|   |  }|  dkr|   t|t| }qF|  }| dv rt|}qF|  dkrAt||}t|dkr@t| jdks@t| jdkr| jd jdks@t| jdkr"| jd 	ds@t| jdkr<| jd jdkr<| jd 	ds@t
dqF|   |    | dkr|rWt
dt| dd\}	}
|  }|
rqt
d|
 d |j |d
kr}t
d!| t||	}nF| d"krt| \}}t|||}n2| d#v rt| }t||}n!| d$krt| }t||}nt||t| }nt
d%| qGt| j|krt
d%|   ||fS )&NIDENTr   r@   r   r   r?   )Sr   r   r   r   r   r   rz   r   r   HASHr   rT   )r   r:   )r   r   )r   rj   )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   z inside :not() at zExpected ')', got has)matchesiswherezExpected selector, got )r   rB   usedr   rq   r   rd   next_ident_or_starr!   r   r    r"   r   r   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   r0   r   argumentargument_pseudo_elementr   r   r_   	selectorsr   r   r   r   @  s   








""

Wr   list[Token]c                 C  sP   g }	 |    |  }|jdv s|dv r|| n|dkr |S td| q)Nr?   r   STRINGNUMBER)r   r   r   -r   Expected an argument, got )r   r   rq   r   r    )r   r_   r   r   r   r   r    s   r  tuple[Token, Selector]c                 C  s   |    d}|  }|dv r|}|    |  }ntdddd}	 |jdv s*|d	v r3|tt|j7 }n|d
krAt|}||d fS td| |  }q!)Nr9   )r  r  )r   r   )r   r   r   r   r   r  r?   r  )r   r   r   r  )	r   r   r   rq   r   r   rd   r   r    )r   r   r   r   r   r   r   r   r    s"   
r  r   c                 C  s   g }	 t | d\}}|rtd| d|   |  }|dv r.|   |   || n|dkr:|| 	 |S td| q)Nr?   Tr   z inside functionr   r   r  )r   r    r   r   r   )r   r_   r   r0   r   r   r   r   r    s&   

r  rO   r/   c                 C  sr  |   | }|d u r| dkrtd|  | dkr=|  | dkr4d }|  d}n|}| }d }nd  }}|d u r|   | }|dkr\t| |tt|dd S |dkrcd}n$|	dd	d
dddr| dkrtt|j
d }|  ntd| |   | }|jdvrtd| |   | }|dkrtd| t| |tt|||S )Nr   zExpected '|', got )r   =z|=)r   r;   r   r  ^$r@   r   r   !zOperator expected, got )r   r  zExpected string or ident, got zExpected ']', got )r   r  r   r    r   r  r&   r   r   r   rd   rq   )rO   r   r   r   r   r   rd   r   r   r   r    sF   

r  tokensIterable[Token]tuple[int, int]c                 C  s   | D ]}|j dkrtdqddd | D  }|dkr dS |dkr&d	S |d
kr,dS d
|vr6dt|fS |d
d\}}|sCd}n|dv rNt|d }nt|}|rXt|nd}||fS )zv
    Parses the arguments for :nth-child() and friends.

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

    r  z$String tokens not allowed in series.r9   c                 s  s    | ]	}t t|jV  qd S r3   )r   r   rd   re   r   r   r   rx   )  s    zparse_series.<locals>.<genexpr>odd)r   r?   even)r   r   n)r?   r   r   r?   >   r   r  1)rq   
ValueErrorr{   stripintsplit)r  rg   r   rH   rI   a_as_intb_as_intr   r   r   parse_series  s*   
r'  c                   @  sv   e Zd ZU edd	d
Zeddd
Zddd
Zd ddZd!ddZded< ed ddZ	ed"ddZ
d ddZdS )#r   type_:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']rd   r   r  r#  r   r   c                 C  r   r3   r   clsr(  rd   r  r   r   r   __new__C  s   zToken.__new__Literal['EOF']r2   c                 C  r   r3   r   r*  r   r   r   r,  K  r   r   c                 C  s   t | ||f}||_|S r3   )tupler,  r  )r+  r(  rd   r  objr   r   r   r,  N  s   c                 C  s   d| j  d| j d| j dS )N<z 'z' at r   )rq   rd   r  rU   r   r   r   r>   S  rV   zToken.__repr__valuesr   c                 G  s   | j dko	| j|v S )Nr   )rq   rd   )r6   r1  r   r   r   r   V  r   zToken.is_delimc                 C     | d S )Nr   r   rU   r   r   r   rq   [     z
Token.typec                 C  r2  rZ   r   rU   r   r   r   rd   _  r3  zToken.valuec                 C  s    | j dkr
t| jS tt| jS )Nr  )rq   r<   rd   r   r   rU   r   r   r   rw   c  s   

z	Token.cssN)r(  r)  rd   r   r  r#  r   r   )r(  r-  rd   r2   r  r#  r   r   )r(  r   rd   r   r  r#  r   r   rK   )r1  r   r   r   r   r   )r   r   r   r	   r,  r>   r   __annotations__propertyrq   rd   rw   r   r   r   r   r   B  s   
 


r   c                   @  s    e Zd ZdddZddd	Zd
S )EOFTokenr  r#  r   r   c                 C  s   t | dd |S )Nr   )r   r,  )r+  r  r   r   r   r,  j  rt   zEOFToken.__new__r   c                 C  s   d| j  d| j dS )Nr0  z at r   )rq   r  rU   r   r   r   r>   m  rX   zEOFToken.__repr__N)r  r#  r   r   rK   )r   r   r   r,  r>   r   r   r   r   r7  i  s    
r7  c                   @  sD   e Zd ZdZed Zde ZdZde de Zde de ZdS )	TokenMacrosz&\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?z|\\[^\n\r\f0-9a-f]z\\(?:\n|\r\n|\r|\f)|z
[^\0-\177]z[_a-z0-9-]|r   z[_a-z]|N)	r   r   r   unicode_escapeescapestring_escapenonasciinmcharnmstartr   r   r   r   r8  t  s    r8  c                   @  s   e Zd Z	ddd	d
ZdS )	MatchFunc.r   r   r  r#  endposr   re.Match[str] | Nonec                 C  r   r3   r   )r6   r   r  r@  r   r   r   __call__~  s   zMatchFunc.__call__N)..)r   r   r  r#  r@  r#  r   rA  )r   r   r   rB  r   r   r   r   r?  }  s    r?  patternc                 C  s   t | tt t jjS r3   )recompilevarsr8  
IGNORECASEr   )rC  r   r   r   _compile  r   rH  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   re.Match[str]c                 C  s&   t | dd}|tjkrd}t|S )Nr?      i  )r#  r   sys
maxunicodechr)r   	codepointr   r   r   _replace_unicode  s   
rQ  rd   c                 C  s   t t| } tt| S r3   )_sub_unicode_escaperQ  _sub_simple_escape_replace_simplerc   r   r   r   unescape_ident  ra   rU  r   Iterator[Token]c                 c  s    d}t | }||k rt| |d}|rtdd|V  | }qt| |d}|r=tttt|	 }td||V  | }qt
| |d}|r_tttt|	 dd  }td||V  | }q| | }|tv rt| | |d d}|swJ d| }||krtd	| | | |krtd
| tttttd|	 }td||V  |d }qt| |d}|r|	 }td||V  | }q|d }| || dkr| d|}|dkr|}n|d7 }qtd| | |V  |d7 }||k s||ksJ t|V  d S )Nr   r  r   r   r   r?   r   z)Should have found at least an empty matchzUnclosed string at zInvalid string at r9   r  r  r   z/*z*/r   r   )rB   _match_whitespacer   end_match_identrS  rT  rR  rQ  r   _match_hash_match_string_by_quoter    _sub_newline_escape_match_numberfindr7  )r   r  len_sr   rd   quoteend_pospos2r   r   r   r     s|   @r   c                   @  sJ   e Zd Zdddd	ZdddZdddZdddZdddZdddZdS )r   Nr  r  r   r   r   r2   c                 C  s0   g | _ t|| _|| _d | _d| _| jj| _d S NF)r   iterr  r   peeked_peeking__next__
next_token)r6   r  r   r   r   r   r7     s   
zTokenStream.__init__r   c                 C  sF   | j rd| _ | jd usJ | j| j | jS |  }| j| |S rc  )rf  re  r   r   rh  r6   r   r   r   r   r     s   zTokenStream.nextc                 C  s*   | j s|  | _d| _ | jd usJ | jS )NT)rf  rh  re  rU   r   r   r   r     s
   
zTokenStream.peekr   c                 C  s,   |   }|jdkrtd| tt|jS )Nr   zExpected ident, got )r   rq   r    r   r   rd   ri  r   r   r   r    s   
zTokenStream.next_identc                 C  s2   |   }|jdkr|jS |dkrd S td| )Nr   r   zExpected ident or '*', got )r   rq   rd   r    ri  r   r   r   r    s   
zTokenStream.next_ident_or_starc                 C  s"   |   }|jdkr|   d S d S )Nr   )r   rq   r   )r6   r   r   r   r   r     s   
zTokenStream.skip_whitespacer3   )r  r  r   r   r   r2   )r   r   rK   r4  )r   r2   )	r   r   r   r7   r   r   r  r  r   r   r   r   r   r     s    




)r   r   r   r   )rw   r   r   r   )r   r   r   r   )r   r   r   r   )F)r   r   r   r   r   r   )r   r   r   r  )r   r   r   r  )r   r   r   r   )rO   r/   r   r   r   r&   )r  r  r   r  )rC  r   r   r?  )r   rK  r   r   )rd   r   r   r   )r   r   r   rV  )Mr   
__future__r   r   rD  rM  typingr   r   r   r   r   r   r	   collections.abcr
   r   r   typing_extensionsr   r   	Exceptionr   SyntaxErrorr    r/   r   PseudoElementr-   r#   r,   r$   r%   r'   r(   r)   r*   r&   r!   r"   r+   rE  r   r   r   r   r   r   r   r  r  r  r  r'  r.  r   r7  r8  r?  rH  rW  r]  rZ  rY  r[  subrS  r9  rG  rR  r\  methodcallerrT  rQ  rU  r   r   r   r   r   r   <module>   s    $

I"?



*

r



,$'	



G