o
    jS                     @  s  U 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r9ddlmZmZmZ ddlmZ dud
dZG dd deZG dd deeZed Zded< edef Zded< 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*d0Z-dvd3d4Z.dwd8d9Z/dxd;d<Z0	=dydzd@dAZ1d{dCdDZ2d|dFdGZ3d}dIdJZ4d~dLdMZ5ddQdRZ6G dSdT dTe7eedB f Z8G dUdV dVe8Z9G dWdX dXZ:G dYdZ dZe	Z;dd\d]Z<e<d^Z=e<d_Z>e<d`Z?e<daZ@e<dbe<dcddZAe*dejBZCe*e:jDejEjBZFe*dfjBZGeHdgdhZIddkdlZJddndoZKddrdsZLG dtd6 d6ZMd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Protocol	TypeAlias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   Q/var/www/html/Deteccion_Ine/venv/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CombinedSelectorr   TreeFunctionalPseudoElementPseudoElementc                   @  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treer,   pseudo_elementPseudoElement | Noner   Nonec                 C  s*   || _ |d urt|tst|}|| _d S N)parsed_tree
isinstancer-   r   r1   )selfr0   r1   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:: [])r6   r1   r-   repr	__class__r   r5   )r7   r1   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)r9   r:      *)r6   r1   r-   	canonicalr5   lenlstrip)r7   r1   resr   r   r   rB   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@   )r5   specificityr1   r7   abcr   r   r   rG   ~   s   
zSelector.specificityr4   )r0   r,   r1   r2   r   r3   r   r   r   rF   r   r   r   r   r8   r?   rB   rG   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   r3   c                 C     || _ || _d S r4   )rP   rQ   )r7   rP   rQ   r   r   r   r8         
zClass.__init__c                 C     | j j d| jd| j dS )Nr;   .r<   )r>   r   rP   rQ   r7   r   r   r   r?         zClass.__repr__c                 C     | j   d| j S )NrU   )rP   rB   rQ   rV   r   r   r   rB         zClass.canonicalrF   c                 C  "   | j  \}}}|d7 }|||fS Nr@   rP   rG   rH   r   r   r   rG         
zClass.specificityN)rP   r,   rQ   r   r   r3   rL   rM   rN   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 r4   )r   r_   r`   )r7   r_   r`   r   r   r   r8         

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_   r7   Ztoken_valuesr   r   r   r?      s   z FunctionalPseudoElement.__repr__	list[str]c                 C     dd | j D S )Nc                 S  rc   r   typerf   r   r   r   ri      rj   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>r`   rV   r   r   r   argument_types      z&FunctionalPseudoElement.argument_typesc                 C  s(   d dd | jD }| j d| dS )Nr:   c                 s      | ]}|  V  qd S r4   cssrf   r   r   r   	<genexpr>       z4FunctionalPseudoElement.canonical.<locals>.<genexpr>rk   ))joinr`   r_   r7   argsr   r   r   rB      s   z!FunctionalPseudoElement.canonicalN)r_   r   r`   ra   rL   r   rn   )r   r   r   r   r8   r?   rs   rB   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)
    rP   r,   r_   r   r`   ra   r   r3   c                 C  s   || _ t|| _|| _d S r4   )rP   r   r_   r`   )r7   rP   r_   r`   r   r   r   r8      s   

zFunction.__init__c                 C  s4   dd | j D }| jj d| jd| j d|dS )Nc                 S  rc   r   rd   rf   r   r   r   ri      rj   z%Function.__repr__.<locals>.<listcomp>r;   :rk   rl   )r`   r>   r   rP   r_   rm   r   r   r   r?      s   $zFunction.__repr__rn   c                 C  ro   )Nc                 S  rc   r   rp   rf   r   r   r   ri      rj   z+Function.argument_types.<locals>.<listcomp>rr   rV   r   r   r   rs      rt   zFunction.argument_typesc                 C  s4   d dd | jD }| j  d| j d| dS )Nr:   c                 s  ru   r4   rv   rf   r   r   r   rx      ry   z%Function.canonical.<locals>.<genexpr>r   rk   rz   )r{   r`   rP   rB   r_   r|   r   r   r   rB      s   zFunction.canonicalrF   c                 C  rZ   r[   r\   rH   r   r   r   rG      r]   zFunction.specificityN)rP   r,   r_   r   r`   ra   r   r3   rL   r~   rM   )	r   r   r   r   r8   r?   rs   rB   rG   r   r   r   r   r$      s    



r$   c                   @  rO   )r%   z#
    Represents selector:ident
    rP   r,   identr   r   r3   c                 C  s   || _ t|| _d S r4   )rP   r   r   )r7   rP   r   r   r   r   r8      s   zPseudo.__init__c                 C  rT   )Nr;   r   r<   )r>   r   rP   r   rV   r   r   r   r?      rW   zPseudo.__repr__c                 C  rX   )Nr   )rP   rB   r   rV   r   r   r   rB      rY   zPseudo.canonicalrF   c                 C  rZ   r[   r\   rH   r   r   r   rG      r]   zPseudo.specificityN)rP   r,   r   r   r   r3   rL   rM   rN   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)
    rP   r,   subselectorr   r3   c                 C  rR   r4   )rP   r   )r7   rP   r   r   r   r   r8      rS   zNegation.__init__r   c                 C     | j j d| jd| jdS )Nr;   :not(rl   r>   r   rP   r   rV   r   r   r   r?      rW   zNegation.__repr__c                 C  s6   | j  }t|dkr|d}| j  d| dS )Nr@   rA   r   rz   )r   rB   rC   rD   rP   r7   Zsubselr   r   r   rB      s   

zNegation.canonicalrF   c                 C  6   | j  \}}}| j \}}}|| || || fS r4   rP   rG   r   r7   Za1b1c1Za2b2c2r   r   r   rG        zNegation.specificityN)rP   r,   r   r,   r   r3   rL   rM   rN   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)
    rP   r,   
combinatorTokenr   r/   c                 C  s   || _ || _|| _d S r4   rP   r   r   r7   rP   r   r   r   r   r   r8     s   
zRelation.__init__r   r   c                 C  r   )Nr;   :has(rl   r   rV   r   r   r   r?     rW   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@   rA   r   rz   )r   rB   	TypeErrorrC   rD   rP   r   r   r   r   rB     s   
zRelation.canonicalrF   c                 C  sb   | j  \}}}z| jd  \}}}W n ty%   | j \}}}Y nw || || || fS )N)rP   rG   r   r   r   r   r   r   rG     s   zRelation.specificityN)rP   r,   r   r   r   r/   rL   rM   rN   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)
    rP   r,   selector_listIterable[Tree]c                 C  rR   r4   rP   r   r7   rP   r   r   r   r   r8   -  rS   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 r4   r=   rg   sr   r   r   rx   2  ry   z$Matching.__repr__.<locals>.<genexpr>r;   :is(rl   r{   r   r>   r   rP   r7   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 )NrA   r   c                 s  r   r4   r   r   r   r   r   rx   :  ry   z%Matching.canonical.<locals>.<genexpr>r   rz   r   rB   appendrD   r{   rP   r7   Zselector_argumentsr   Zselargr   r   r   r   rB   5     
zMatching.canonicalrF   c                 C  s   t dd | jD S )Nc                 s  ru   r4   )rG   )rg   xr   r   r   rx   >  ry   z'Matching.specificity.<locals>.<genexpr>)maxr   rV   r   r   r   rG   =     zMatching.specificityN)rP   r,   r   r   rL   rM   rN   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
    rP   r,   r   
list[Tree]c                 C  rR   r4   r   r   r   r   r   r8   G  rS   zSpecificityAdjustment.__init__r   r   c                 C  r   )Nr   c                 s  r   r4   r   r   r   r   r   rx   L  ry   z1SpecificityAdjustment.__repr__.<locals>.<genexpr>r;   :where(rl   r   r   r   r   r   r?   K  r   zSpecificityAdjustment.__repr__c                 C  r   )NrA   r   c                 s  r   r4   r   r   r   r   r   rx   T  ry   z2SpecificityAdjustment.canonical.<locals>.<genexpr>r   rz   r   r   r   r   r   rB   O  r   zSpecificityAdjustment.canonicalrF   c                 C  s   dS )Nr   r   r   r   rV   r   r   r   rG   W     z!SpecificityAdjustment.specificityN)rP   r,   r   r   rL   rM   rN   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]
    rP   r,   	namespace
str | Noneattribr   operatorLiteral['exists']re   r3   r   c                 C     d S r4   r   r7   rP   r   r   r   re   r   r   r   r8   `     zAttrib.__init__r   c                 C  r   r4   r   r   r   r   r   r8   j  r   Token | Nonec                 C  s"   || _ || _|| _|| _|| _d S r4   )rP   r   r   r   re   r   r   r   r   r8   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   rP   re   )r7   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   re   rw   rP   rB   )r7   r   opr   r   r   rB     s   
zAttrib.canonicalrF   c                 C  rZ   r[   r\   rH   r   r   r   rG     r]   zAttrib.specificityN)rP   r,   r   r   r   r   r   r   re   r3   r   r3   )rP   r,   r   r   r   r   r   r   re   r   r   r3   )rP   r,   r   r   r   r   r   r   re   r   r   r3   rL   rM   )	r   r   r   r   r	   r8   r?   rB   rG   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   r3   c                 C  rR   r4   )r   r   )r7   r   r   r   r   r   r8     s   
zElement.__init__r   c                 C  s   | j j d|   dS )Nr;   r<   )r>   r   rB   rV   r   r   r   r?        zElement.__repr__c                 C  s$   | j pd}| jr| j d| }|S )NrA   r   )r   r   )r7   r   r   r   r   rB     s   
zElement.canonicalrF   c                 C  s   | j rdS dS )N)r   r   r@   r   r   rV   r   r   r   rG     s   zElement.specificity)NN)r   r   r   r   r   r3   rL   rM   rN   r   r   r   r   r!     s    

r!   c                   @  rO   )r"   z 
    Represents selector#id
    rP   r,   idr   r   r3   c                 C  rR   r4   )rP   r   )r7   rP   r   r   r   r   r8     rS   zHash.__init__c                 C  rT   )Nr;   #r<   )r>   r   rP   r   rV   r   r   r   r?     rW   zHash.__repr__c                 C  rX   )Nr   )rP   rB   r   rV   r   r   r   rB     rY   zHash.canonicalrF   c                 C  s"   | j  \}}}|d7 }|||fS r[   r\   rH   r   r   r   rG     r]   zHash.specificityN)rP   r,   r   r   r   r3   rL   rM   rN   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+   rP   r,   r   r   r   r   r3   c                 C  s"   |d usJ || _ || _|| _d S r4   r   r   r   r   r   r8     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   rP   r   )r7   combr   r   r   r?     s   "zCombinedSelector.__repr__c                 C  s<   | j  }t|dkr|d}| j  d| j d| S )Nr@   rA   r   )r   rB   rC   rD   rP   r   r   r   r   r   rB     s   

zCombinedSelector.canonicalrF   c                 C  r   r4   r   r   r   r   r   rG     r   zCombinedSelector.specificityN)rP   r,   r   r   r   r,   r   r3   rL   rM   )r   r   r   r8   r?   rB   rG   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d|  j}|   nd	}t | \}}t|||}q)
Nr@   )EOFNr   Got pseudo-element :: not at the end of a selector+>~r   r   )	parse_simple_selectorr   r   r    is_delimr   r   re   r+   )r   resultr1   r   r   Z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d|  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   rA   r   r   r@   )Sr   r   r   r   r   r   rz   r   r   HASHr   r   rU   )r   r;   )r   r   )r   rk   )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   rC   usedr   rq   r   re   next_ident_or_starr!   r   r    r"   r   r#   
next_identparse_attribr-   parse_argumentsr   r   r%   r=   r   posr'   parse_relative_selectorr(   parse_simple_selector_argumentsr)   r*   r$   )r   r   Zselector_startr   r   r   r   r1   r   argumentZargument_pseudo_elementnext_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d
|j7 }n|dkrAt|}||d fS td| |  }q!)Nr:   )r	  r
  )r   r   )r   r   r   r   r   r   r@   r  )r   r   r   r   r  )r   r   r   rq   r   re   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   r1   r  r   r   r   r    s&   

r  rP   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d|dd S |dkrcd}n$|d	d
ddddr| dkrtd|j	d }|  ntd| |   | }|j
dvrtd| |   | }|dkrtd| t| |td|||S )Nr   zExpected '|', got )r   =z|=)r   r<   r   r   r  ^$rA   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   re   rq   )rP   r   r   r   r   r  re   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.r:   c                 s  s    | ]	}t d |jV  qdS )r   N)r   re   rf   r   r   r   rx   )  s    zparse_series.<locals>.<genexpr>Zodd)r   r@   Zeven)r   r   n)r@   r   r   r@   >   r  r   1)rq   
ValueErrorr{   stripintsplit)r  rh   r   rI   rJ   Za_as_intZ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']re   r   r   r  r   r   c                 C  r   r4   r   clsr  re   r   r   r   r   __new__C  s   zToken.__new__Literal['EOF']r3   c                 C  r   r4   r   r  r   r   r   r!  K  r   r   c                 C  s   t | ||f}||_|S r4   )tupler!  r   )r   r  re   r   objr   r   r   r!  N  s   c                 C  s   d| j  d| j d| j dS )N<z 'z' at r   )rq   re   r   rV   r   r   r   r?   S  rW   zToken.__repr__valuesr   c                 G  s   | j dko	| j|v S )Nr   )rq   re   )r7   r&  r   r   r   r   V  r   zToken.is_delimc                 C     | d S )Nr   r   rV   r   r   r   rq   [     z
Token.typec                 C  r'  r[   r   rV   r   r   r   re   _  r(  zToken.valuec                 C  s    | j dkr
t| jS td| jS )Nr  r   )rq   r=   re   r   rV   r   r   r   rw   c  s   

z	Token.cssN)r  r  re   r   r   r  r   r   )r  r"  re   r3   r   r  r   r   )r  r   re   r   r   r  r   r   rL   )r&  r   r   r   r   r   )r   r   r   r	   r!  r?   r   __annotations__propertyrq   re   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 )Nr%  z at r   )rq   r   rV   r   r   r   r?   m  rY   zEOFToken.__repr__N)r   r  r   r   rL   )r   r   r   r!  r?   r   r   r   r   r,  i  s    
r,  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escapeZstring_escapeZnonasciiZnmcharZnmstartr   r   r   r   r-  t  s    r-  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   r4   r   )r7   r   r   r1  r   r   r   __call__~  s   zMatchFunc.__call__N)..)r   r   r   r  r1  r  r   r2  )r   r   r   r3  r   r   r   r   r0  }  s    r0  patternc                 C  s   t | tt t jjS r4   )recompilevarsr-  
IGNORECASEr   )r4  r   r   r   _compile  r   r9  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   
rB  re   c                 C  s   t t| } tt| S r4   )_sub_unicode_escaperB  _sub_simple_escape_replace_simplerd   r   r   r   unescape_ident  rb   rF  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 r:   r  r  r   z/*z*/r   r   )rC   _match_whitespacer   end_match_identrD  rE  rC  rB  r   _match_hash_match_string_by_quoter    _sub_newline_escape_match_numberfindr,  )r   r   Zlen_sr   re   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   r3   c                 C  s0   g | _ t|| _|| _d | _d| _| jj| _d S NF)r   iterr  r   peeked_peeking__next__
next_token)r7   r  r   r   r   r   r8     s   
zTokenStream.__init__r   c                 C  sF   | j rd| _ | jd usJ | j| j | jS |  }| j| |S rS  )rV  rU  r   r   rX  r7   r  r   r   r   r     s   zTokenStream.nextc                 C  s*   | j s|  | _d| _ | jd usJ | jS )NT)rV  rX  rU  rV   r   r   r   r     s
   
zTokenStream.peekr   c                 C  s,   |   }|jdkrtd| td|jS )Nr   zExpected ident, got r   )r   rq   r    r   re   rY  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   re   r    rY  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   )r7   r   r   r   r   r     s   
zTokenStream.skip_whitespacer4   )r  r  r   r   r   r3   )r   r   rL   r)  )r   r3   )	r   r   r   r8   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   )rP   r,   r   r   r   r&   )r  r  r   r  )r4  r   r   r0  )r   r<  r   r   )re   r   r   r   )r   r   r   rG  )Nr   
__future__r   r   r5  r>  typingr   r   r   r   r   r   r	   collections.abcr
   r   r   Ztyping_extensionsr   r   	Exceptionr   SyntaxErrorr    r,   r*  r   r.   r/   r#   r-   r$   r%   r'   r(   r)   r*   r&   r!   r"   r+   r6  r   r   r   r   r   r   r   r   r   r  r   r  r#  r   r,  r-  r0  r9  rH  rN  rK  rJ  rL  subrD  r.  r8  rC  rM  methodcallerrE  rB  rF  r   r   r   r   r   r   <module>   s    $

I"?



*

r



,$'	



G