a
    &ñ»jò�  ã                   @  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rpddlmZmZmZ ddlmZ dd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,dd-d.œd/d0„Z-d1d2d3œd4d5„Z.d1d6d3œd7d8„Z/drd1d:d6d;œd<d=„Z0d1d>d3œd?d@„Z1d1dAd3œdBdC„Z2d1dDd3œdEdF„Z3dGd1d#dHœdIdJ„Z4dKdLdMœdNdO„Z5G dPdQ„ dQe6ee	e f ƒZ7G dRdS„ dSe7ƒZ8G dTdU„ dUƒZ9G dVdW„ dWe
ƒZ:ddWdXœdYdZ„Z;e;d[ƒZ<e;d\ƒZ=e;d]ƒZ>e;d^ƒZ?e;d_ƒe;d`ƒdaœZ@e )db¡jAZBe )e9jCejD¡jAZEe )dc¡jAZFe Gddde¡ZHdfddgœdhdi„ZIdddjœdkdl„ZJddmdnœdodp„ZKG dqd1„ d1ƒZLdS )szâ
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Ústr)ÚstringÚreturnc                 C  s   |   d¡ ¡  d¡S )z(Lower-case, but only in the ASCII range.Úutf8)ÚencodeÚlowerÚdecode)r   © r   ú6E:\soccer\ml_env\Lib\site-packages\cssselect/parser.pyÚascii_lower   s    r   c                   @  s   e Zd ZdZdS )ÚSelectorErrorzáCommon 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                   @  sN   e Zd ZdZdddddœdd„Zd	d
œdd„Zd	d
œdd„Zd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ÚTreezPseudoElement | NoneÚNone)Ú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__L   s    
ÿzSelector.__init__r   ©r   c                 C  sJ   t | jtƒrt| jƒ}n| jr,d| j› �}nd}| jj› d| j›|› d�S )Nú::Ú ú[ú])r2   r/   r*   ÚreprÚ	__class__r   r1   )r3   r/   r   r   r   Ú__repr__h   s    zSelector.__repr__c                 C  sb   t | jtƒrd| j ¡ › �}n| jr2d| j› �}nd}| j ¡ › |› �}t|ƒdkr^| d¡}|S )z8Return a CSS representation for this selector (a string)r6   r7   é   Ú*)r2   r/   r*   Ú	canonicalr1   ÚlenÚlstrip)r3   r/   Úresr   r   r   r?   q   s    
zSelector.canonicalútuple[int, int, int]c                 C  s(   | j  ¡ \}}}| jr|d7 }|||fS )z’Return the specificity_ of this selector as a tuple of 3 integers.

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

        r=   )r1   Úspecificityr/   ©r3   ÚaÚbÚcr   r   r   rD   ~   s    zSelector.specificity)N©r   r   r   r   r4   r<   r?   rD   r   r   r   r   r+   A   s
   
	r+   c                   @  sL   e Zd ZdZddddœdd„Zddœd	d
„Zddœdd„Zddœdd„ZdS )r!   z(
    Represents selector.class_name
    r,   r   r-   )ÚselectorÚ
class_namer   c                 C  s   || _ || _d S r0   )rJ   rK   )r3   rJ   rK   r   r   r   r4   �   s    zClass.__init__r5   c                 C  s   | j j› d| j›d| j› d�S )Nr8   Ú.r9   )r;   r   rJ   rK   ©r3   r   r   r   r<   “   s    zClass.__repr__c                 C  s   | j  ¡ › d| j› �S )NrL   )rJ   r?   rK   rM   r   r   r   r?   –   s    zClass.canonicalrC   c                 C  s"   | j  ¡ \}}}|d7 }|||fS ©Nr=   ©rJ   rD   rE   r   r   r   rD   ™   s    zClass.specificityNrI   r   r   r   r   r!   Š   s
   r!   c                   @  sJ   e Zd ZdZdddœdd„Zddœdd	„Zd
dœdd„Zd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.

    r   úSequence[Token])ÚnameÚ	argumentsc                 C  s   t |ƒ| _|| _d S r0   )r   rQ   rR   )r3   rQ   rR   r   r   r   r4   ±   s    
z FunctionalPseudoElement.__init__r5   c                 C  s,   dd„ | j D ƒ}| jj› d| j› d|›d�S )Nc                 S  s   g | ]
}|j ‘qS r   ©Úvalue©Ú.0Útokenr   r   r   Ú
<listcomp>¶   ó    z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>z[::ú(ú)])rR   r;   r   rQ   ©r3   Ztoken_valuesr   r   r   r<   µ   s    z FunctionalPseudoElement.__repr__ú	list[str]c                 C  s   dd„ | j D ƒS )Nc                 S  s   g | ]
}|j ‘qS r   ©ÚtyperU   r   r   r   rX   º   rY   z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>©rR   rM   r   r   r   Úargument_types¹   s    z&FunctionalPseudoElement.argument_typesc                 C  s(   d  dd„ | jD ƒ¡}| j› d|› d�S )Nr7   c                 s  s   | ]}|  ¡ V  qd S r0   ©ÚcssrU   r   r   r   Ú	<genexpr>½   rY   z4FunctionalPseudoElement.canonical.<locals>.<genexpr>rZ   ú))ÚjoinrR   rQ   ©r3   Úargsr   r   r   r?   ¼   s    z!FunctionalPseudoElement.canonicalN)r   r   r   r   r4   r<   ra   r?   r   r   r   r   r*   Ÿ   s
   c                   @  s\   e Zd ZdZdddddœdd„Zdd	œd
d„Zdd	œdd„Zdd	œdd„Zdd	œdd„ZdS )r"   z(
    Represents selector:name(expr)
    r,   r   rP   r-   )rJ   rQ   rR   r   c                 C  s   || _ t|ƒ| _|| _d S r0   )rJ   r   rQ   rR   )r3   rJ   rQ   rR   r   r   r   r4   Æ   s    
zFunction.__init__r5   c                 C  s4   dd„ | j D ƒ}| jj› d| j›d| j› d|›d�S )Nc                 S  s   g | ]
}|j ‘qS r   rS   rU   r   r   r   rX   Ì   rY   z%Function.__repr__.<locals>.<listcomp>r8   ú:rZ   r[   )rR   r;   r   rJ   rQ   r\   r   r   r   r<   Ë   s    zFunction.__repr__r]   c                 C  s   dd„ | j D ƒS )Nc                 S  s   g | ]
}|j ‘qS r   r^   rU   r   r   r   rX   Ð   rY   z+Function.argument_types.<locals>.<listcomp>r`   rM   r   r   r   ra   Ï   s    zFunction.argument_typesc                 C  s4   d  dd„ | jD ƒ¡}| j ¡ › d| j› d|› d�S )Nr7   c                 s  s   | ]}|  ¡ V  qd S r0   rb   rU   r   r   r   rd   Ó   rY   z%Function.canonical.<locals>.<genexpr>ri   rZ   re   )rf   rR   rJ   r?   rQ   rg   r   r   r   r?   Ò   s    zFunction.canonicalrC   c                 C  s"   | j  ¡ \}}}|d7 }|||fS rN   rO   rE   r   r   r   rD   Ö   s    zFunction.specificityN)	r   r   r   r   r4   r<   ra   r?   rD   r   r   r   r   r"   Á   s   r"   c                   @  sL   e Zd ZdZddddœdd„Zddœd	d
„Zddœdd„Zddœdd„ZdS )r#   z#
    Represents selector:ident
    r,   r   r-   )rJ   Úidentr   c                 C  s   || _ t|ƒ| _d S r0   )rJ   r   rj   )r3   rJ   rj   r   r   r   r4   á   s    zPseudo.__init__r5   c                 C  s   | j j› d| j›d| j› d�S )Nr8   ri   r9   )r;   r   rJ   rj   rM   r   r   r   r<   å   s    zPseudo.__repr__c                 C  s   | j  ¡ › d| j› �S )Nri   )rJ   r?   rj   rM   r   r   r   r?   è   s    zPseudo.canonicalrC   c                 C  s"   | j  ¡ \}}}|d7 }|||fS rN   rO   rE   r   r   r   rD   ë   s    zPseudo.specificityNrI   r   r   r   r   r#   Ü   s
   r#   c                   @  sL   e Zd ZdZddddœdd„Zddœd	d
„Zddœdd„Zddœdd„ZdS )r%   z.
    Represents selector:not(subselector)
    r,   r-   )rJ   Úsubselectorr   c                 C  s   || _ || _d S r0   )rJ   rk   )r3   rJ   rk   r   r   r   r4   ö   s    zNegation.__init__r   r5   c                 C  s   | j j› d| j›d| j›d�S )Nr8   ú:not(r[   ©r;   r   rJ   rk   rM   r   r   r   r<   ú   s    zNegation.__repr__c                 C  s6   | j  ¡ }t|ƒdkr | d¡}| j ¡ › d|› d�S )Nr=   r>   rl   re   )rk   r?   r@   rA   rJ   ©r3   Zsubselr   r   r   r?   ý   s    

zNegation.canonicalrC   c                 C  s6   | j  ¡ \}}}| j ¡ \}}}|| || || fS r0   ©rJ   rD   rk   ©r3   Za1Úb1Úc1Za2Úb2Úc2r   r   r   rD     s    zNegation.specificityNrI   r   r   r   r   r%   ñ   s
   r%   c                   @  sL   e Zd ZdZddddœdd„Zdd	œd
d„Zdd	œdd„Zdd	œdd„ZdS )r&   z.
    Represents selector:has(subselector)
    r,   ÚTokenr+   ©rJ   Ú
combinatorrk   c                 C  s   || _ || _|| _d S r0   rv   ©r3   rJ   rw   rk   r   r   r   r4     s    zRelation.__init__r   r5   c                 C  s   | j j› d| j›d| j›d�S )Nr8   ú:has(r[   rm   rM   r   r   r   r<     s    zRelation.__repr__c                 C  s\   z| j d  ¡ }W n ty.   | j  ¡ }Y n0 t|ƒdkrF| d¡}| j ¡ › d|› d�S )Nr   r=   r>   ry   re   )rk   r?   Ú	TypeErrorr@   rA   rJ   rn   r   r   r   r?     s    
zRelation.canonicalrC   c                 C  sb   | j  ¡ \}}}z| jd  ¡ \}}}W n" tyJ   | j ¡ \}}}Y n0 || || || fS )Néÿÿÿÿ)rJ   rD   rk   rz   rp   r   r   r   rD     s    zRelation.specificityNrI   r   r   r   r   r&   	  s
   	r&   c                   @  sJ   e Zd ZdZdddœdd„Zddœd	d
„Zddœdd„Zddœdd„ZdS )r'   z/
    Represents selector:is(selector_list)
    r,   zIterable[Tree]©rJ   Úselector_listc                 C  s   || _ || _d S r0   r|   ©r3   rJ   r}   r   r   r   r4   -  s    zMatching.__init__r   r5   c                 C  s2   d  dd„ | jD ƒ¡}| jj› d| j›d|› d�S )Nú, c                 s  s   | ]}t |ƒV  qd S r0   ©r:   ©rV   Úsr   r   r   rd   2  rY   z$Matching.__repr__.<locals>.<genexpr>r8   ú:is(r[   ©rf   r}   r;   r   rJ   ©r3   Úargs_strr   r   r   r<   1  s    zMatching.__repr__c                 C  sR   g }| j D ]}| ¡ }| | d¡¡ q
d dd„ |D ƒ¡}| j ¡ › d|› d�S )Nr>   r   c                 s  s   | ]}t |ƒV  qd S r0   ©r   r�   r   r   r   rd   :  rY   z%Matching.canonical.<locals>.<genexpr>rƒ   re   ©r}   r?   ÚappendrA   rf   rJ   ©r3   Zselector_argumentsr‚   Zselargr†   r   r   r   r?   5  s    
zMatching.canonicalrC   c                 C  s   t dd„ | jD ƒƒS )Nc                 s  s   | ]}|  ¡ V  qd S r0   )rD   )rV   Úxr   r   r   rd   >  rY   z'Matching.specificity.<locals>.<genexpr>)Úmaxr}   rM   r   r   r   rD   =  s    zMatching.specificityNrI   r   r   r   r   r'   (  s
   r'   c                   @  sJ   e Zd ZdZdddœdd„Zddœd	d
„Zddœdd„Zd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
    r,   ú
list[Tree]r|   c                 C  s   || _ || _d S r0   r|   r~   r   r   r   r4   G  s    zSpecificityAdjustment.__init__r   r5   c                 C  s2   d  dd„ | jD ƒ¡}| jj› d| j›d|› d�S )Nr   c                 s  s   | ]}t |ƒV  qd S r0   r€   r�   r   r   r   rd   L  rY   z1SpecificityAdjustment.__repr__.<locals>.<genexpr>r8   ú:where(r[   r„   r…   r   r   r   r<   K  s    zSpecificityAdjustment.__repr__c                 C  sR   g }| j D ]}| ¡ }| | d¡¡ q
d dd„ |D ƒ¡}| j ¡ › d|› d�S )Nr>   r   c                 s  s   | ]}t |ƒV  qd S r0   r‡   r�   r   r   r   rd   T  rY   z2SpecificityAdjustment.canonical.<locals>.<genexpr>rŽ   re   rˆ   rŠ   r   r   r   r?   O  s    
zSpecificityAdjustment.canonicalrC   c                 C  s   dS )N©r   r   r   r   rM   r   r   r   rD   W  s    z!SpecificityAdjustment.specificityNrI   r   r   r   r   r(   A  s
   r(   c                   @  sŠ   e Zd ZdZedddddddœdd	„ƒZeddddd
ddœdd	„ƒZdddddddœdd	„Zddœdd„Zddœdd„Zddœdd„ZdS )r$   z>
    Represents selector[namespace|attrib operator value]
    r,   ú
str | Noner   zLiteral['exists']r-   )rJ   Ú	namespaceÚattribÚoperatorrT   r   c                 C  s   d S r0   r   ©r3   rJ   r‘   r’   r“   rT   r   r   r   r4   `  s    zAttrib.__init__ru   c                 C  s   d S r0   r   r”   r   r   r   r4   j  s    zToken | Nonec                 C  s"   || _ || _|| _|| _|| _d S r0   )rJ   r‘   r’   r“   rT   r”   r   r   r   r4   t  s
    r5   c              
   C  s€   | j r| j › d| j› �n| j}| jdkrD| jj› d| j›d|› d�S | jd usRJ ‚| jj› d| j›d|› d| j› d| jj›d�
S )Nú|Úexistsr8   z]]ú )r‘   r’   r“   r;   r   rJ   rT   )r3   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–   r8   r9   )r‘   r’   r“   rT   rc   rJ   r?   )r3   r’   Úopr   r   r   r?   ‰  s    
zAttrib.canonicalrC   c                 C  s"   | j  ¡ \}}}|d7 }|||fS rN   rO   rE   r   r   r   rD   ”  s    zAttrib.specificityN)	r   r   r   r   r	   r4   r<   r?   rD   r   r   r   r   r$   [  s   		r$   c                   @  sN   e Zd ZdZdddddœdd„Zdd	œd
d„Zdd	œdd„Zdd	œdd„ZdS )r   zU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nr�   r-   )r‘   Úelementr   c                 C  s   || _ || _d S r0   )r‘   r™   )r3   r‘   r™   r   r   r   r4   ¢  s    zElement.__init__r   r5   c                 C  s   | j j› d|  ¡ › d�S )Nr8   r9   )r;   r   r?   rM   r   r   r   r<   ¨  s    zElement.__repr__c                 C  s$   | j pd}| jr | j› d|› �}|S )Nr>   r•   )r™   r‘   )r3   r™   r   r   r   r?   «  s    
zElement.canonicalrC   c                 C  s   | j r
dS dS )N)r   r   r=   r�   ©r™   rM   r   r   r   rD   ±  s    zElement.specificity)NNrI   r   r   r   r   r   š  s    ÿr   c                   @  sL   e Zd ZdZddddœdd„Zddœd	d
„Zddœdd„Zddœdd„ZdS )r    z 
    Represents selector#id
    r,   r   r-   )rJ   Úidr   c                 C  s   || _ || _d S r0   )rJ   r›   )r3   rJ   r›   r   r   r   r4   ¼  s    zHash.__init__r5   c                 C  s   | j j› d| j›d| j› d�S )Nr8   ú#r9   )r;   r   rJ   r›   rM   r   r   r   r<   À  s    zHash.__repr__c                 C  s   | j  ¡ › d| j› �S )Nrœ   )rJ   r?   r›   rM   r   r   r   r?   Ã  s    zHash.canonicalrC   c                 C  s"   | j  ¡ \}}}|d7 }|||fS rN   rO   rE   r   r   r   rD   Æ  s    zHash.specificityNrI   r   r   r   r   r    ·  s
   r    c                   @  sJ   e Zd Zdddddœdd„Zddœdd	„Zddœd
d„Zddœdd„ZdS )r)   r,   r   r-   )rJ   rw   rk   r   c                 C  s"   |d usJ ‚|| _ || _|| _d S r0   rv   rx   r   r   r   r4   Í  s    zCombinedSelector.__init__r5   c                 C  s8   | j dkrdn| j }| jj› d| j›d|› d| j›d�S )Nr—   z
<followed>r8   r9   )rw   r;   r   rJ   rk   )r3   Ú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—   )rk   r?   r@   rA   rJ   rw   rn   r   r   r   r?   Ù  s    

zCombinedSelector.canonicalrC   c                 C  s6   | j  ¡ \}}}| j ¡ \}}}|| || || fS r0   ro   rp   r   r   r   rD   ß  s    zCombinedSelector.specificityN)r   r   r   r4   r<   r?   rD   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]*$zlist[Selector])rc   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r”t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)rc   r    Ústreamr   r   r   Úparseó  s    

&
"ÿrª   r¤   zIterator[Selector])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¨   z!tuple[Tree, PseudoElement | None]c                 C  sˆ   t | ƒ\}}|  ¡  |  ¡ }|dv r&q€|r:td|› d�ƒ‚| ddd¡rbtt|  ¡ jƒ}|  ¡  nd}t | ƒ\}}t	|||ƒ}q||fS )N©)ÚEOFNr«   úGot pseudo-element ::ú not at the end of a selectorú+ú>ú~r—   )
Úparse_simple_selectorr®   r°   r   Úis_delimr   r   r±   rT   r)   )r©   Úresultr/   r°   rw   Znext_selectorr   r   r   r¯   (  s     
ÿ
r¯   FÚbool)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Š|rÒt
d
|› d�ƒ‚|jdkrôt|tt|  ¡ jƒƒ}qŒ|dk�r|  ¡  t||  ¡ ƒ}qŒ|dk�r8|  ¡  td |  ¡ ƒ}qŒ|dk�rV|  ¡  t|| ƒ}qŒ|dk�rz|  ¡  |  ¡ dk�rª|  ¡  |  ¡ }|  ¡ dkrŒ|  ¡  t|t| ƒƒ}qŒ|  ¡ }| ¡ dv �rÊt|ƒ}qŒ|  ¡ dk�rxt||ƒ}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�rn| jd jdk�rn| jd  	d¡sŒt
dƒ‚qŒ|  ¡  |   ¡  | ¡ dk�rü|�r¤t
dƒ‚t| dd�\}	}
|  ¡ }|
�rØt
d
|
› d|j› �ƒ‚|d	k�rðt
d |› �ƒ‚t||	ƒ}n|| ¡ d!k�r$t| ƒ\}}t|||ƒ}nT| ¡ d"v �rFt| ƒ}t||ƒ}n2| ¡ d#k�rht| ƒ}t||ƒ}nt||t| ƒƒ}qŒt
d$|› �ƒ‚qŒt| jƒ|k�r¬t
d$|  ¡ › �ƒ‚||fS )%NÚIDENT©r¬   r>   ©r¬   r•   )ÚSr³   r­   r¶   r·   r¸   ©r¬   re   r´   rµ   ÚHASH©r¬   rL   )r¬   r8   )r¬   ri   )r¬   rZ   )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®   r@   Úusedr°   r_   r±   rT   Ú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½   Zselector_startr°   r‘   r™   r»   r/   rj   ZargumentZargument_pseudo_elementr±   rw   rR   Ú	selectorsr   r   r   r¹   @  sÚ    



ÿþýý
ÿ




ÿ
ÿþþýýûúù
ÿÿ
ÿ
r¹   zlist[Token]c                 C  sR   g }|   ¡  |  ¡ }|jdv s&|dv r2| |¡ q|dkr>|S td|› �ƒ‚qd S )N©r¾   ÚSTRINGÚNUMBER)©r¬   r¶   ©r¬   ú-rÂ   úExpected an argument, got )r®   r±   r_   r‰   r   )r©   rR   r±   r   r   r   rÔ   ²  s    rÔ   ztuple[Token, Selector]c                 C  sœ   |   ¡  d}|  ¡ }|dv r2|}|   ¡  |  ¡ }ntdddd�}|jdv sR|dv rd|tt|jƒ7 }n*|d	kr€t|ƒ}||d fS td
|› �ƒ‚|  ¡ }q@d S )Nr7   )rÜ   rÝ   )r¬   r·   )r¬   r¸   r¬   r—   r   ©rÕ   rÙ   )rÄ   r¿   rÂ   rß   )	r®   r±   ru   r_   r   r   rT   rª   r   )r©   rk   r±   rw   r»   r   r   r   rÖ   Â  s    
rÖ   r�   c                 C  s„   g }t | dƒ\}}|r&td|› d�ƒ‚|  ¡  |  ¡ }|dv rZ|  ¡  |  ¡  | |¡ q|dkrp| |¡ q€qtd|› �ƒ‚q|S )NTr´   z inside functionr²   rÂ   rß   )r¹   r   r®   r±   r‰   )r©   rR   r»   r/   r±   r   r   r   r×   Ü  s"    
ÿ
r×   r,   )rJ   r©   r   c                 C  s|  |  ¡  | ¡ }|d u r6| ¡ dkr6td| ¡ › �ƒ‚| ¡ dkrz| ¡  | ¡ dkrhd }| ¡  d}q‚|}| ¡ }d }nd  }}|d u �r|  ¡  | ¡ }|dkrºt| |tt|ƒdd ƒS |dkrÈd}nL| 	dd	d
ddd¡�r| ¡ dk�rtt|j
ƒd }| ¡  ntd|› �ƒ‚|  ¡  | ¡ }|jdv�r>td|› �ƒ‚|  ¡  | ¡ }|dk�rftd|› �ƒ‚t| |tt|ƒ||ƒS )NrÀ   zExpected '|', got )r¬   ú=z|=)r¬   r9   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º   rT   r_   )rJ   r©   r’   r‘   r˜   r±   rT   r   r   r   rÓ   ò  sH    

ÿ

rÓ   úIterable[Token]ztuple[int, int])Ú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¡\}}|s†d}n|dv rœt|d ƒ}nt|ƒ}|r°t|ƒnd}||fS )zv
    Parses the arguments for :nth-child() and friends.

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

    rÚ   z$String tokens not allowed in series.r7   c                 s  s   | ]}t t|jƒV  qd S r0   )r   r   rT   rU   r   r   r   rd   )  rY   zparse_series.<locals>.<genexpr>Zodd)rž   r=   Zeven)rž   r   Ún)r=   r   r   r=   >   rÞ   r¶   Ú1)r_   Ú
ValueErrorrf   ÚstripÚintÚsplit)ræ   rW   r‚   rF   rG   Za_as_intZb_as_intr   r   r   Úparse_series  s(    

rí   c                   @  sª   e Zd ZU edddddœdd„ƒZedd	dddœd
d„ƒZdddddœdd„Zddœdd„Zdddœdd„Zded< eddœdd„ƒZ	eddœdd„ƒZ
ddœdd„ZdS )ru   z:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']r   rë   r   )Útype_rT   rÕ   r   c                 C  s   d S r0   r   ©Úclsrî   rT   rÕ   r   r   r   Ú__new__C  s    zToken.__new__zLiteral['EOF']r-   c                 C  s   d S r0   r   rï   r   r   r   rñ   K  s    r�   c                 C  s   t  | ||f¡}||_|S r0   )Útuplerñ   rÕ   )rð   rî   rT   rÕ   Úobjr   r   r   rñ   N  s    r5   c                 C  s   d| j › d| j› d| j› d�S )Nú<z 'z' at r·   )r_   rT   rÕ   rM   r   r   r   r<   S  s    zToken.__repr__r¼   )Úvaluesr   c                 G  s   | j dko| j|v S )Nr¬   )r_   rT   )r3   rõ   r   r   r   rº   V  s    zToken.is_delimrÕ   c                 C  s   | d S )Nr   r   rM   r   r   r   r_   [  s    z
Token.typec                 C  s   | d S rN   r   rM   r   r   r   rT   _  s    zToken.valuec                 C  s    | j dkrt| jƒS tt| jƒS )NrÚ   )r_   r:   rT   r   r   rM   r   r   r   rc   c  s    

z	Token.cssN)r   r   r   r	   rñ   r<   rº   Ú__annotations__Úpropertyr_   rT   rc   r   r   r   r   ru   B  s   
ru   c                   @  s*   e Zd Zdddœdd„Zddœdd	„Zd
S )ÚEOFTokenrë   r   )rÕ   r   c                 C  s   t  | dd |¡S )Nr³   )ru   rñ   )rð   rÕ   r   r   r   rñ   j  s    zEOFToken.__new__r   r5   c                 C  s   d| j › d| j› d�S )Nrô   z at r·   )r_   rÕ   rM   r   r   r   r<   m  s    zEOFToken.__repr__N)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ddœdd„ZdS )
Ú	MatchFunc.r   rë   zre.Match[str] | None)r   rÕ   Úendposr   c                 C  s   d S r0   r   )r3   r   rÕ   rý   r   r   r   Ú__call__~  s    zMatchFunc.__call__N)..)r   r   r   rþ   r   r   r   r   rü   }  s    ÿrü   )Úpatternr   c                 C  s   t  | ttƒ t j¡jS r0   )Ú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¡   r=   zre.Match[str])r    r   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    
r  )rT   r   c                 C  s   t t| ƒ} tt| ƒS r0   )Ú_sub_unicode_escaper  Ú_sub_simple_escapeÚ_replace_simplerS   r   r   r   Úunescape_identŸ  s    
r  zIterator[Token])r‚   r   c                 c  s  d}t | ƒ}||k �rìt| |d�}|r>tdd|ƒV  | ¡ }qt| |d�}|rztttt| 	¡ ƒƒ}td||ƒV  | ¡ }qt
| |d�}|r¾tttt| 	¡ dd … ƒƒ}td||ƒV  | ¡ }q| | }|tv �r^t| | |d d�}|sðJ 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�súJ ‚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 r7   rÚ   rÛ   rž   z/*z*/r{   r¬   )r@   Ú_match_whitespaceru   ÚendÚ_match_identr  r  r  r  r¡   Ú_match_hashÚ_match_string_by_quoter   Ú_sub_newline_escapeÚ_match_numberÚfindrø   )r‚   rÕ   Zlen_sr    rT   ÚquoteÚend_posÚpos2r   r   r   r¥   ¤  sx    
ÿþ

ÿþ

r¥   c                   @  sf   e Zd Zdddddœdd„Zdd	œd
d„Zdd	œdd„Zdd	œdd„Zdd	œdd„Zdd	œdd„ZdS )r¤   Nrå   r�   r-   )ræ   r¦   r   c                 C  s0   g | _ t|ƒ| _|| _d | _d| _| jj| _d S ©NF)rÐ   Úiterræ   r¦   ÚpeekedÚ_peekingÚ__next__Ú
next_token)r3   ræ   r¦   r   r   r   r4   ì  s    
zTokenStream.__init__ru   r5   c                 C  sF   | j r.d| _ | jd usJ ‚| j | j¡ | jS |  ¡ }| j |¡ |S r  )r  r  rÐ   r‰   r!  ©r3   r±   r   r   r   r±   ô  s    zTokenStream.nextc                 C  s*   | j s|  ¡ | _d| _ | jd us$J ‚| jS )NT)r  r!  r  rM   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±   r_   r   r   r   rT   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|› �ƒ‚d S )Nr¾   r¿   zExpected ident or '*', got )r±   r_   rT   r   r"  r   r   r   rÑ     s    
zTokenStream.next_ident_or_starc                 C  s   |   ¡ }|jdkr|  ¡  d S )NrÁ   )r°   r_   r±   )r3   r°   r   r   r   r®     s    
zTokenStream.skip_whitespace)N)	r   r   r   r4   r±   r°   rÒ   rÑ   r®   r   r   r   r   r¤   ë  s   
)F)Mr   Ú
__future__r   r“   r   r  Útypingr   r   r   r   r   r   r	   Úcollections.abcr
   r   r   Ztyping_extensionsr   r   Ú	Exceptionr   ÚSyntaxErrorr   r,   r   ZPseudoElementr+   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ò   ru   rø   rù   rü   r  r  r  r  r  r  Úsubr  rú   r  r  r  Úmethodcallerr  r  r  r¥   r¤   r   r   r   r   Ú<module>   s~   $
ÿI"?

ÿ* ÿr,$'	þG