a
    xd                     @   sF  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 eedd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$eee d)d*d+Z%d,ee d-d.d/Z&d,e
eee f d-d0d1Z'dcd,e(e
eee f d3d4d5Z)d,ed6 d-d7d8Z*d,e
d6ef d-d9d:Z+d,ee d-d;d<Z,ed,ed=d>d?Z-ed6 e
e.e.f d@dAdBZ/G dCd6 d6e
eee f Z0G dDdE dEe0Z1G dFdG dGZ2ej3rG dHdI dIej4Z5edIdJdKdLZ6e6dMZ7e6dNZ8e6dOZ9e6dPZ:e6dQe6dRdSZ;e!dTj<Z=e!e2j>ej?j<Z@e!dUj<ZAeBdVdWZCdXedYdZd[ZDeed\d]d^ZEeee0 d_d`daZFG dbd, d,ZGdS )da  
    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                 C   s   |  d dS )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)r	    r   H/var/www/html/Ranjet/env/lib/python3.9/site-packages/cssselect/parser.pyascii_lower   s    r   c                   @   s   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      s   r   c                   @   s   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   )ElementHashClassFunctionPseudoAttribNegationRelationMatchingSpecificityAdjustmentCombinedSelectorFunctionalPseudoElementc                   @   s\   e Zd ZdZdeee ddddZedddZ	edd	d
Z
eeeef 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pseudo_elementr
   c                 C   s*   || _ |d ur t|ts t|}|| _d S N)parsed_tree
isinstancer$   r   r'   )selfr&   r'   r   r   r   __init__F   s    zSelector.__init__r
   c                 C   sB   t | jtrt| j}n| jr*d| j }nd}d| jj| j|f S )N::%s z%s[%r%s])r*   r'   r$   repr	__class__r   r)   )r+   r'   r   r   r   __repr__`   s    zSelector.__repr__c                 C   s^   t | jtrd| j  }n| jr.d| j }nd}d| j |f }t|dkrZ|d}|S )z8Return a CSS representation for this selector (a string)r.   r/   z%s%s   *)r*   r'   r$   	canonicalr)   lenlstrip)r+   r'   resr   r   r   r5   i   s    
zSelector.canonicalc                 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

        r3   )r)   specificityr'   r+   abcr   r   r   r9   v   s    zSelector.specificity)N)r   r   r   r   Treer   PseudoElementr,   strr2   r5   r   intr9   r   r   r   r   r%   ;   s
   
	r%   c                   @   sV   e Zd ZdZeeddddZedddZedd	d
Ze	e
e
e
f dddZdS )r   z(
    Represents selector.class_name
    N)selector
class_namer
   c                 C   s   || _ || _d S r(   )rB   rC   )r+   rB   rC   r   r   r   r,      s    zClass.__init__r-   c                 C   s   d| j j| j| jf S )Nz	%s[%r.%s])r1   r   rB   rC   r+   r   r   r   r2      s    zClass.__repr__c                 C   s   d| j  | jf S )Nz%s.%s)rB   r5   rC   rD   r   r   r   r5      s    zClass.canonicalc                 C   s"   | j  \}}}|d7 }|||fS Nr3   rB   r9   r:   r   r   r   r9      s    zClass.specificityr   r   r   r   r>   r@   r,   r2   r5   r   rA   r9   r   r   r   r   r      s
   r   c                   @   sR   e Zd ZdZeed dddZedddZee dd	d
Z	e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.

    Token)name	argumentsc                 C   s   t || _|| _d S r(   )r   rI   rJ   )r+   rI   rJ   r   r   r   r,      s    
z FunctionalPseudoElement.__init__r-   c                 C   s    d| j j| jdd | jD f S )Nz%s[::%s(%r)]c                 S   s   g | ]
}|j qS r   value.0tokenr   r   r   
<listcomp>       z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>)r1   r   rI   rJ   rD   r   r   r   r2      s
    z FunctionalPseudoElement.__repr__c                 C   s   dd | j D S )Nc                 S   s   g | ]
}|j qS r   typerM   r   r   r   rP      rQ   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>rJ   rD   r   r   r   argument_types   s    z&FunctionalPseudoElement.argument_typesc                 C   s$   d dd | jD }d| j|f S )Nr/   c                 s   s   | ]}|  V  qd S r(   cssrM   r   r   r   	<genexpr>   rQ   z4FunctionalPseudoElement.canonical.<locals>.<genexpr>z%s(%s))joinrJ   rI   r+   argsr   r   r   r5      s    z!FunctionalPseudoElement.canonicalN)r   r   r   r   r@   r   r,   r2   r   rU   r5   r   r   r   r   r$      s
   c                   @   sn   e Zd ZdZeeed ddddZeddd	Ze	e dd
dZ
edddZeeeef dddZdS )r   z(
    Represents selector:name(expr)
    rH   N)rB   rI   rJ   r
   c                 C   s   || _ t|| _|| _d S r(   )rB   r   rI   rJ   )r+   rB   rI   rJ   r   r   r   r,      s    
zFunction.__init__r-   c                 C   s$   d| j j| j| jdd | jD f S )Nz%s[%r:%s(%r)]c                 S   s   g | ]
}|j qS r   rK   rM   r   r   r   rP      rQ   z%Function.__repr__.<locals>.<listcomp>)r1   r   rB   rI   rJ   rD   r   r   r   r2      s    zFunction.__repr__c                 C   s   dd | j D S )Nc                 S   s   g | ]
}|j qS r   rR   rM   r   r   r   rP      rQ   z+Function.argument_types.<locals>.<listcomp>rT   rD   r   r   r   rU      s    zFunction.argument_typesc                 C   s,   d dd | jD }d| j | j|f S )Nr/   c                 s   s   | ]}|  V  qd S r(   rV   rM   r   r   r   rX      rQ   z%Function.canonical.<locals>.<genexpr>z	%s:%s(%s))rY   rJ   rB   r5   rI   rZ   r   r   r   r5      s    zFunction.canonicalc                 C   s"   | j  \}}}|d7 }|||fS rE   rF   r:   r   r   r   r9      s    zFunction.specificity)r   r   r   r   r>   r@   r   r,   r2   r   rU   r5   r   rA   r9   r   r   r   r   r      s   r   c                   @   sV   e Zd ZdZeeddddZedddZedd	d
Ze	e
e
e
f dddZdS )r   z#
    Represents selector:ident
    N)rB   identr
   c                 C   s   || _ t|| _d S r(   )rB   r   r\   )r+   rB   r\   r   r   r   r,      s    zPseudo.__init__r-   c                 C   s   d| j j| j| jf S )Nz	%s[%r:%s])r1   r   rB   r\   rD   r   r   r   r2      s    zPseudo.__repr__c                 C   s   d| j  | jf S )Nz%s:%s)rB   r5   r\   rD   r   r   r   r5      s    zPseudo.canonicalc                 C   s"   | j  \}}}|d7 }|||fS rE   rF   r:   r   r   r   r9      s    zPseudo.specificityrG   r   r   r   r   r      s
   r   c                   @   sV   e Zd ZdZeeddddZedddZedd	d
Ze	e
e
e
f dddZdS )r   z.
    Represents selector:not(subselector)
    N)rB   subselectorr
   c                 C   s   || _ || _d S r(   )rB   r]   )r+   rB   r]   r   r   r   r,      s    zNegation.__init__r-   c                 C   s   d| j j| j| jf S )Nz%s[%r:not(%r)]r1   r   rB   r]   rD   r   r   r   r2      s    zNegation.__repr__c                 C   s2   | j  }t|dkr |d}d| j |f S )Nr3   r4   z
%s:not(%s))r]   r5   r6   r7   rB   r+   Zsubselr   r   r   r5      s    

zNegation.canonicalc                 C   s6   | j  \}}}| j \}}}|| || || fS r(   rB   r9   r]   r+   Za1b1Zc1Za2b2c2r   r   r   r9     s    zNegation.specificity)r   r   r   r   r>   r,   r@   r2   r5   r   rA   r9   r   r   r   r   r      s
   r   c                   @   sV   e Zd ZdZededddZedddZedd	d
Z	e
eeef dddZdS )r    z.
    Represents selector:has(subselector)
    rH   rB   
combinatorr]   c                 C   s   || _ || _|| _d S r(   re   r+   rB   rf   r]   r   r   r   r,     s    zRelation.__init__r-   c                 C   s   d| j j| j| jf S )Nz%s[%r:has(%r)]r^   rD   r   r   r   r2     s
    zRelation.__repr__c                 C   sX   z| j d  }W n ty.   | j  }Y n0 t|dkrF|d}d| j |f S )Nr   r3   r4   z
%s:has(%s))r]   r5   	TypeErrorr6   r7   rB   r_   r   r   r   r5     s    
zRelation.canonicalc                 C   sb   | j  \}}}z| jd  \}}}W n" tyJ   | j \}}}Y n0 || || || fS )N)rB   r9   r]   rh   ra   r   r   r   r9   "  s    zRelation.specificityN)r   r   r   r   r>   r%   r,   r@   r2   r5   r   rA   r9   r   r   r   r   r      s
   	r    c                   @   sX   e Zd ZdZeee dddZedddZeddd	Z	e
eeef dd
dZdS )r!   z/
    Represents selector:is(selector_list)
    rB   selector_listc                 C   s   || _ || _d S r(   rj   r+   rB   rk   r   r   r   r,   0  s    zMatching.__init__r-   c                 C   s"   d| j j| jdtt| jf S )Nz%s[%r:is(%s)], r1   r   rB   rY   mapr0   rk   rD   r   r   r   r2   4  s
    zMatching.__repr__c                 C   sF   g }| j D ]}| }||d q
d| j dtt|f S )Nr4   z	%s:is(%s)rm   rk   r5   appendr7   rB   rY   ro   r@   r+   Zselector_argumentssZselargr   r   r   r5   ;  s
    
zMatching.canonicalc                 C   s   t dd | jD S )Nc                 s   s   | ]}|  V  qd S r(   )r9   )rN   xr   r   r   rX   C  rQ   z'Matching.specificity.<locals>.<genexpr>)maxrk   rD   r   r   r   r9   B  s    zMatching.specificityN)r   r   r   r   r>   r   r,   r@   r2   r5   r   rA   r9   r   r   r   r   r!   +  s
   r!   c                   @   sX   e Zd ZdZeee dddZedddZeddd	Z	e
eeef dd
dZdS )r"   zz
    Represents selector:where(selector_list)
    Same as selector:is(selector_list), but its specificity is always 0
    rj   c                 C   s   || _ || _d S r(   rj   rl   r   r   r   r,   L  s    zSpecificityAdjustment.__init__r-   c                 C   s"   d| j j| jdtt| jf S )Nz%s[%r:where(%s)]rm   rn   rD   r   r   r   r2   P  s
    zSpecificityAdjustment.__repr__c                 C   sF   g }| j D ]}| }||d q
d| j dtt|f S )Nr4   z%s:where(%s)rm   rp   rr   r   r   r   r5   W  s    
zSpecificityAdjustment.canonicalc                 C   s   dS )Nr   r   r   r   rD   r   r   r   r9   a  s    z!SpecificityAdjustment.specificityN)r   r   r   r   r>   r   r,   r@   r2   r5   r   rA   r9   r   r   r   r   r"   F  s
   
r"   c                   @   s   e Zd ZdZejeee eddddddZ	ejeee eedddddZ	eee eeed ddd	dZ	ed
ddZ
ed
ddZeeeef d
ddZdS )r   z>
    Represents selector[namespace|attrib operator value]
    ztyping.Literal["exists"]N)rB   	namespaceattriboperatorrL   r
   c                 C   s   d S r(   r   r+   rB   rw   rx   ry   rL   r   r   r   r,   j  s    	zAttrib.__init__rH   c                 C   s   d S r(   r   rz   r   r   r   r,   u  s    c                 C   s"   || _ || _|| _|| _|| _d S r(   )rB   rw   rx   ry   rL   rz   r   r   r   r,   {  s
    r-   c              	   C   sf   | j rd| j | jf }n| j}| jdkr<d| jj| j|f S d| jj| j|| jtd| jjf S d S )N%s|%sexistsz
%s[%r[%s]]z%s[%r[%s %s %r]]rH   )	rw   rx   ry   r1   r   rB   typingcastrL   )r+   rx   r   r   r   r2     s    
zAttrib.__repr__c                 C   s^   | j rd| j | jf }n| j}| jdkr.|}nd|| jtd| j f }d| j |f S )Nr{   r|   z%s%s%srH   %s[%s])	rw   rx   ry   r}   r~   rL   rW   rB   r5   )r+   rx   opr   r   r   r5     s    
zAttrib.canonicalc                 C   s"   | j  \}}}|d7 }|||fS rE   rF   r:   r   r   r   r9     s    zAttrib.specificity)r   r   r   r   r}   overloadr>   r   r@   r,   r2   r5   r   rA   r9   r   r   r   r   r   e  s.   
r   c                   @   s`   e Zd ZdZdee ee ddddZedddZedd	d
Ze	e
e
e
f dddZdS )r   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    N)rw   elementr
   c                 C   s   || _ || _d S r(   )rw   r   )r+   rw   r   r   r   r   r,     s    zElement.__init__r-   c                 C   s   d| j j|  f S )Nr   )r1   r   r5   rD   r   r   r   r2     s    zElement.__repr__c                 C   s"   | j pd}| jrd| j|f }|S )Nr4   r{   )r   rw   )r+   r   r   r   r   r5     s    
zElement.canonicalc                 C   s   | j r
dS dS d S )N)r   r   r3   rv   r   rD   r   r   r   r9     s    zElement.specificity)NN)r   r   r   r   r   r@   r,   r2   r5   r   rA   r9   r   r   r   r   r     s
   r   c                   @   sV   e Zd ZdZeeddddZedddZedd	d
Ze	e
e
e
f dddZdS )r   z 
    Represents selector#id
    N)rB   idr
   c                 C   s   || _ || _d S r(   )rB   r   )r+   rB   r   r   r   r   r,     s    zHash.__init__r-   c                 C   s   d| j j| j| jf S )Nz	%s[%r#%s])r1   r   rB   r   rD   r   r   r   r2     s    zHash.__repr__c                 C   s   d| j  | jf S )Nz%s#%s)rB   r5   r   rD   r   r   r   r5     s    zHash.canonicalc                 C   s"   | j  \}}}|d7 }|||fS rE   rF   r:   r   r   r   r9     s    zHash.specificityrG   r   r   r   r   r     s
   r   c                   @   sT   e Zd ZeeeddddZedddZeddd	Zee	e	e	f dd
dZ
dS )r#   N)rB   rf   r]   r
   c                 C   s"   |d usJ || _ || _|| _d S r(   re   rg   r   r   r   r,     s    zCombinedSelector.__init__r-   c                 C   s.   | j dkrd}n| j }d| jj| j|| jf S )N z
<followed>z%s[%r %s %r])rf   r1   r   rB   r]   )r+   combr   r   r   r2     s    
zCombinedSelector.__repr__c                 C   s6   | j  }t|dkr |d}d| j | j|f S )Nr3   r4   z%s %s %s)r]   r5   r6   r7   rB   rf   r_   r   r   r   r5     s    

zCombinedSelector.canonicalc                 C   s6   | j  \}}}| j \}}}|| || || fS r(   r`   ra   r   r   r   r9     s    zCombinedSelector.specificity)r   r   r   r>   r@   r,   r2   r5   r   rA   r9   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   r
   c                 C   s   t | }|r$tt|ddgS t| }|dur\ttt|dpHdd|dgS t| }|durttt|dpd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.

    r3   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   r
   c                 c   s<   |    tt|  V  |  dkr8|   |    qq8qd S )NDELIM,)skip_whitespacer%   parse_selectorpeeknext)r   r   r   r   r   +  s    
r   c                 C   s   t | \}}|   |  }|dv r&q~|r6td| |dddr`tt|  j	}|   nd}t | \}}t
|||}q||fS )N)EOFNr   4Got pseudo-element ::%s not at the end of a selector+>~r   )parse_simple_selectorr   r   r   is_delimr}   r~   r@   r   rL   r#   )r   resultr'   r   rf   Znext_selectorr   r   r   r   6  s     
r   F)r   inside_negationr
   c                 C   s  |    t| j}|  }|jdks,|dkrv|jdkrB|  j}n|   d }|  dkrl|   |  }q~|}d }nd  }}t||}d }|  }|jdv s|	dddds|r|d	krq|rt
d
| |jdkrt|tt|  j}q|dkr|   t||  }q|dkr6|   td |  }q|dkrT|   t|| }q|dkrt|   |  dkr|   |  }|  dkr|   t|t| }q|  }| dv rt|}q|  dkrvt||}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st| jdkrl| jd jdkrl| jd 	dst
dq|   |    | dkr|rt
dt| dd\}	}
|  }|
rt
d|
|jf |d	krt
d|f t||	}n|| d krt| \}}t|||}nT| d!v r@t| }t||}n2| d"krbt| }t||}nt||t| }qt
d#|f qt| j|krt
d#|  f ||fS )$NIDENTr   r4   r   |)Sr   r   r   r   r   r   )r   HASH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   z+Got pseudo-element ::%s inside :not() at %szExpected ')', got %sZhas)matchesiswherezExpected selector, got %s) r   r6   usedr   rS   r   rL   next_ident_or_starr   r   r   r   r}   r~   r@   r   
next_identparse_attribr$   parse_argumentsr   r   r0   r   posr   parse_relative_selectorr    parse_simple_selector_argumentsr!   r"   r   )r   r   Zselector_startr   rw   r   r   r'   r\   argumentZargument_pseudo_elementr   rf   rJ   	selectorsr   r   r   r   N  s    












r   rH   c                 C   sR   g }|    |  }|jdv s&|dv r2|| q|dkr>|S td|f qd S )Nr   STRINGNUMBER)r   r   r   -r   Expected an argument, got %s)r   r   rS   rq   r   )r   rJ   r   r   r   r   r     s    r   c                 C   s   |    d}|  }|dv r2|}|    |  }ntdddd}|jdv sR|dv rf|tt|j7 }n*|d	krt|}||d fS t	d
|f |  }q@d S )Nr/   )r   r   )r   r   )r   r   r   r   r   r   r   )r   r   r   r   )
r   r   rH   rS   r}   r~   r@   rL   r   r   )r   r]   r   rf   r   r   r   r   r     s    
r   c                 C   s   g }t | d\}}|r$td|f |   |  }|dv rX|   |   || q|dkrn|| q~qtd|f q|S )NTz'Got pseudo-element ::%s inside functionr   r   r   )r   r   r   r   rq   )r   rJ   r   r'   r   r   r   r   r     s"    
r   )rB   r   r
   c                 C   s  |   | }|d u r6| dkr6td| f | dkrz|  | dkrhd }|  d}q|}| }d }nd  }}|d u r|   | }|dkrt| |tt	|dd S |dkrd}nN|
dd	d
dddr
| dkr
tt	|jd }|  ntd|f |   | }|jdvrBtd|f |   | }|dkrjtd|f t| |tt	|||S )Nr   zExpected '|', got %s)r   =z|=)r   ]r|   r   ^$r4   r   r   !zOperator expected, got %s)r   r   z Expected string or ident, got %szExpected ']', got %s)r   r   r   r   r   r   r   r}   r~   r@   r   rL   rS   )rB   r   rx   rw   r   r   rL   r   r   r   r     sD    
$

r   )tokensr
   c                 C   s   | D ]}|j dkrtdqddd | D  }|dkr@dS |dkrLd	S |d
krXdS d
|vrldt|fS |d
d\}}|sd}n&|dks|dkrt|d }nt|}|sd}nt|}||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 t|jV  qd S r(   )r}   r~   r@   rL   rM   r   r   r   rX   1  rQ   zparse_series.<locals>.<genexpr>Zodd)r   r3   Zeven)r   r   n)r3   r   r   r3   r   r   1)rS   
ValueErrorrY   striprA   split)r   rO   rs   r;   r<   Za_as_intZb_as_intr   r   r   parse_series&  s,    

r   c                   @   s   e Zd ZU ejdeed dddZejdded dddZeee ed dddZed	d
dZ	ee
dddZeed< eed	ddZeee d	ddZed	ddZdS )rH   zAtyping.Literal["IDENT", "HASH", "STRING", "S", "DELIM", "NUMBER"])type_rL   r   r
   c                 C   s   d S r(   r   clsr   rL   r   r   r   r   __new__O  s    zToken.__new__ztyping.Literal["EOF"]Nc                 C   s   d S r(   r   r   r   r   r   r   X  s    c                 C   s   t | ||f}||_|S r(   )tupler   r   )r   r   rL   r   objr   r   r   r   \  s    r-   c                 C   s   d| j | j| jf S )Nz<%s '%s' at %i>)rS   rL   r   rD   r   r   r   r2   a  s    zToken.__repr__)valuesr
   c                 G   s   | j dko| j|v S )Nr   )rS   rL   )r+   r   r   r   r   r   d  s    zToken.is_delimr   c                 C   s   | d S )Nr   r   rD   r   r   r   rS   i  s    z
Token.typec                 C   s   | d S rE   r   rD   r   r   r   rL   m  s    zToken.valuec                 C   s&   | j dkrt| jS tt| jS d S )Nr   )rS   r0   rL   r}   r~   r@   rD   r   r   r   rW   q  s    

z	Token.css)r   r   r   r}   r   r@   rA   r   r   r2   boolr   __annotations__propertyrS   rL   rW   r   r   r   r   rH   N  s"   
c                   @   s*   e Zd Zed dddZedddZdS )EOFToken)r   r
   c              	   C   s   t dt| dd |S )Nr   r   )r}   r~   rH   r   )r   r   r   r   r   r   y  s    zEOFToken.__new__r-   c                 C   s   d| j | jf S )Nz
<%s at %i>)rS   r   rD   r   r   r   r2   |  s    zEOFToken.__repr__N)r   r   r   rA   r   r@   r2   r   r   r   r   r   x  s   r   c                   @   s<   e Zd ZdZed Zde ZdZdeef Zdeef 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-]|%s|%sz[_a-z]|%s|%sN)	r   r   r   unicode_escapeescapeZstring_escapeZnonasciiZnmcharZnmstartr   r   r   r   r     s   r   c                   @   s&   e Zd Zdeeeed dddZdS )	MatchFunc.re.Match[str])r	   r   endposr
   c                 C   s   d S r(   r   )r+   r	   r   r   r   r   r   __call__  s    zMatchFunc.__call__N)..)r   r   r   r@   rA   r   r   r   r   r   r   r     s
    r   )patternr
   c                 C   s   t | tt t jjS r(   )recompilevarsr   
IGNORECASEr   )r   r   r   r   _compile  s    r   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   r3   r   )r   r
   c                 C   s&   t | dd}|tjkrd}t|S )Nr3      i  )rA   r   sys
maxunicodechr)r   	codepointr   r   r   _replace_unicode  s    
r   )rL   r
   c                 C   s   t t| } tt| } | S r(   )_sub_unicode_escaper   _sub_simple_escape_replace_simplerK   r   r   r   unescape_ident  s    

r   )rs   r
   c                 c   s  d}t | }||k rt| |d}|r>tdd|V  | }qt| |d}|rztttt|	 }td||V  | }qt
| |d}|rtttt|	 dd  }td||V  | }q| | }|tv rZt| | |d d}|sJ d| }||krtd	| | | |kr(t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|}q|d7 }qtd| | |V  |d7 }q||ksJ t|V  d S )Nr   r   r   r   r   r3   r   z)Should have found at least an empty matchzUnclosed string at %szInvalid string at %sr/   r   r   r   z/*z*/ri   r   )r6   _match_whitespacerH   end_match_identr   r   r   r   r   _match_hash_match_string_by_quoter   _sub_newline_escape_match_numberfindr   )rs   r   Zlen_sr   rL   quoteZend_pospos2r   r   r   r     sr    




r   c                   @   sr   e Zd Zdee ee ddddZedddZeddd	Z	edd
dZ
ee dddZddddZdS )r   N)r   r   r
   c                 C   s0   g | _ t|| _|| _d | _d| _| jj| _d S NF)r   iterr   r   peeked_peeking__next__
next_token)r+   r   r   r   r   r   r,     s    
zTokenStream.__init__r-   c                 C   sL   | j r0d| _ | jtt| j tt| jS |  }| j| |S d S r  )r  r   rq   r}   r~   rH   r
  r  r+   r   r   r   r   r     s    zTokenStream.nextc                 C   s$   | j s|  | _d| _ tt| jS )NT)r  r  r
  r}   r~   rH   rD   r   r   r   r     s    
zTokenStream.peekc                 C   s.   |   }|jdkr td|f tt|jS )Nr   zExpected ident, got %s)r   rS   r   r}   r~   r@   rL   r  r   r   r   r     s    
zTokenStream.next_identc                 C   s6   |   }|jdkr|jS |dkr$d S td|f d S )Nr   r   zExpected ident or '*', got %s)r   rS   rL   r   r  r   r   r   r     s    
zTokenStream.next_ident_or_starc                 C   s   |   }|jdkr|   d S )Nr   )r   rS   r   )r+   r   r   r   r   r   #  s    
zTokenStream.skip_whitespace)N)r   r   r   r   rH   r   r@   r,   r   r   r   r   r   r   r   r   r   r     s   
	)F)Hr   r   r   ry   r}   r   r   r   r   r   r   r   r@   r   	Exceptionr   SyntaxErrorr   r>   r?   r%   r   r$   r   r   r   r    r!   r"   r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r   rH   r   r   TYPE_CHECKINGProtocolr   r   r   r  r  r   r  subr   r   Ir   r  methodcallerr   r   r   r   r   r   r   r   r   <module>   s|   $
G%#G


( t*(*	D