Current File : //lib/python3.6/site-packages/cssselect/__pycache__/parser.cpython-36.pyc
3

ǁaW�\�@s>dZddlZddlZddlZejddkr4eZeZne	Ze
Zdd�ZGdd�de�Z
Gdd	�d	e
e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Zejd�Zejd�Zejd �Zd!d"�Zd#d$�Z d%d&�Z!dNd(d)�Z"d*d+�Z#d,d-�Z$d.d/�Z%Gd0d1�d1e&�Z'Gd2d3�d3e'�Z(Gd4d5�d5�Z)d6d7�Z*e*d8�Z+e*d9�Z,e*d:�Z-e*d;�Z.e*d<�e*d=�d>�Z/ejd?�j0Z1eje)j2ej3�j0Z4ejd@�j0Z5e6edA��r
ej7dBdC�Z8ndDdE�Z8dFdG�Z9dHdI�Z:dJdK�Z;GdLdM�dMe�Z<dS)Oa
    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�cCs|jd�j�jd�S)z(Lower-case, but only in the ASCII range.�utf8)�encode�lower�decode)�string�r�/usr/lib/python3.6/parser.py�ascii_lowersr
c@seZdZdZdS)�
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__rrrr	r!src@seZdZdZdS)�SelectorSyntaxErrorz3Parsing a selector that does not match the grammar.N)rr
rrrrrr	r*src@s*eZdZdZd	dd�Zdd�Zdd�ZdS)
�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.

    NcCs,||_|dk	r"t|t�r"t|�}||_dS)N)�parsed_tree�
isinstance�FunctionalPseudoElementr
�pseudo_element)�selfZtreerrrr	�__init__:s


zSelector.__init__cCsBt|jt�rt|j�}n|jr*d|j}nd}d|jj|j|fS)Nz::%s�z%s[%r%s])rrr�repr�	__class__rr)rrrrr	�__repr__UszSelector.__repr__cCs(|jj�\}}}|jr|d7}|||fS)z�Return the specificity_ of this selector as a tuple of 3 integers.

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

        �)r�specificityr)r�a�b�crrr	r_szSelector.specificity)N)rr
rrrrrrrrr	r0s	

rc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Classz(
    Represents selector.class_name
    cCs||_||_dS)N)�selector�
class_name)rr"r#rrr	roszClass.__init__cCsd|jj|j|jfS)Nz	%s[%r.%s])rrr"r#)rrrr	rsszClass.__repr__cCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	rwszClass.specificityN)rr
rrrrrrrrr	r!ksr!c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)rax
    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.

    cCst|�|_||_dS)N)r
�name�	arguments)rr$r%rrr	r�s
z FunctionalPseudoElement.__init__cCs d|jj|jdd�|jD�fS)Nz%s[::%s(%r)]cSsg|]
}|j�qSr)�value)�.0�tokenrrr	�
<listcomp>�sz4FunctionalPseudoElement.__repr__.<locals>.<listcomp>)rrr$r%)rrrr	r�s
z FunctionalPseudoElement.__repr__cCsdd�|jD�S)NcSsg|]
}|j�qSr)�type)r'r(rrr	r)�sz:FunctionalPseudoElement.argument_types.<locals>.<listcomp>)r%)rrrr	�argument_types�sz&FunctionalPseudoElement.argument_typescCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	r�sz#FunctionalPseudoElement.specificityN)rr
rrrrr+rrrrr	r}s
rc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�Functionz(
    Represents selector:name(expr)
    cCs||_t|�|_||_dS)N)r"r
r$r%)rr"r$r%rrr	r�s
zFunction.__init__cCs$d|jj|j|jdd�|jD�fS)Nz
%s[%r:%s(%r)]cSsg|]
}|j�qSr)r&)r'r(rrr	r)�sz%Function.__repr__.<locals>.<listcomp>)rrr"r$r%)rrrr	r�szFunction.__repr__cCsdd�|jD�S)NcSsg|]
}|j�qSr)r*)r'r(rrr	r)�sz+Function.argument_types.<locals>.<listcomp>)r%)rrrr	r+�szFunction.argument_typescCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	r�szFunction.specificityN)rr
rrrrr+rrrrr	r,�s
r,c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Pseudoz#
    Represents selector:ident
    cCs||_t|�|_dS)N)r"r
�ident)rr"r.rrr	r�szPseudo.__init__cCsd|jj|j|jfS)Nz	%s[%r:%s])rrr"r.)rrrr	r�szPseudo.__repr__cCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	r�szPseudo.specificityN)rr
rrrrrrrrr	r-�sr-c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Negationz.
    Represents selector:not(subselector)
    cCs||_||_dS)N)r"�subselector)rr"r0rrr	r�szNegation.__init__cCsd|jj|j|jfS)Nz%s[%r:not(%r)])rrr"r0)rrrr	r�szNegation.__repr__cCs6|jj�\}}}|jj�\}}}||||||fS)N)r"rr0)r�a1�b1�c1�a2�b2�c2rrr	r�szNegation.specificityN)rr
rrrrrrrrr	r/�sr/c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Attribz>
    Represents selector[namespace|attrib operator value]
    cCs"||_||_||_||_||_dS)N)r"�	namespace�attrib�operatorr&)rr"r8r9r:r&rrr	r�s
zAttrib.__init__cCs\|jrd|j|jf}n|j}|jdkr<d|jj|j|fSd|jj|j||j|jfSdS)Nz%s|%s�existsz
%s[%r[%s]]z%s[%r[%s %s %r]])r8r9r:rrr"r&)rr9rrr	r�s
zAttrib.__repr__cCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	r�szAttrib.specificityN)rr
rrrrrrrrr	r7�s
r7c@s*eZdZdZd	dd�Zdd�Zdd�ZdS)
�ElementzU
    Represents namespace|element

    `None` is for the universal selector '*'

    NcCs||_||_dS)N)r8�element)rr8r=rrr	rszElement.__init__cCs.|jpd}|jrd|j|f}d|jj|fS)N�*z%s|%sz%s[%s])r=r8rr)rr=rrr	rs
zElement.__repr__cCs|jr
dSdSdS)Nrr)rrr)rrr)r=)rrrr	r
szElement.specificity)NN)rr
rrrrrrrrr	r<�s
r<c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Hashz 
    Represents selector#id
    cCs||_||_dS)N)r"�id)rr"r@rrr	rsz
Hash.__init__cCsd|jj|j|jfS)Nz	%s[%r#%s])rrr"r@)rrrr	rsz
Hash.__repr__cCs"|jj�\}}}|d7}|||fS)Nr)r"r)rrrr rrr	rszHash.specificityN)rr
rrrrrrrrr	r?sr?c@s$eZdZdd�Zdd�Zdd�ZdS)�CombinedSelectorcCs"|dk	st�||_||_||_dS)N)�AssertionErrorr"�
combinatorr0)rr"rCr0rrr	r$szCombinedSelector.__init__cCs.|jdkrd}n|j}d|jj|j||jfS)N� z
<followed>z%s[%r %s %r])rCrrr"r0)rZcombrrr	r*s

zCombinedSelector.__repr__cCs6|jj�\}}}|jj�\}}}||||||fS)N)r"rr0)rr1r2r3r4r5r6rrr	r2szCombinedSelector.specificityN)rr
rrrrrrrr	rA#srAz%^[ \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]*$cCs�tj|�}|r$tt|jd�d��gStj|�}|dk	r\ttt|jd�pHdd�|jd���gStj|�}|dk	r�ttt|jd�p�dd�|jd���gSt	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 an Unicode 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�matchrr<�group�_id_rer?�	_class_rer!�TokenStream�tokenize�source�list�parse_selector_group)ZcssrG�streamrrr	�parseEs


rQccs@|j�x2tt|��V|j�dkr6|j�|j�q
Pq
WdS)N�DELIM�,)rRrS)�skip_whitespacer�parse_selector�peek�next)rPrrr	rOos
rOcCs�t|�\}}xl|j�|j�}|dkr(P|r8td|��|jddd�rZ|j�j}|j�nd}t|�\}}t|||�}qW||fS)N�EOFrRrSz4Got pseudo-element ::%s not at the end of a selector�+�>�~rD�rXN�rRrS)r\r])�parse_simple_selectorrTrVr�is_delimrWr&rA)rP�resultrrVrCZ
next_selectorrrr	rUys"

rUFcCs�|j�t|j�}|j�}|jdks,|dkrv|jdkrB|j�j}n|j�d}|j�dkrl|j�|j�}q~|}d}nd}}t||�}d}�x�|j�}|jdks�|j	ddd	d
�s�|r�|d kr�P|r�t
d|��|jd
kr�t||j�j�}q�|d!k�r|j�t||j
��}q�|d"k�r,|j�t||�}q�|d#k�rL|j�|j�d$k�r�|j�|j
�}|j�d%kr�|j�t|t|��}q�|j
�}|j�d&k�r�t|�}q�|j�d'k�r�t||�}q�|j�|j�|j�dk�r:|�r�t
d��t|dd�\}	}
|j�}|
�rt
d|
|jf��|d(k�r.t
d|f��t||	�}nt||t|��}q�t
d|f��q�Wt|j�|k�r�t
d|j�f��||fS))N�IDENTrRr>�|�SrXrSrYrZr[�)z4Got pseudo-element ::%s not at the end of a selector�HASH�.�[�:�(�
first-line�first-letter�before�after�notzGot nested :not()T)�inside_negationz+Got pseudo-element ::%s inside :not() at %szExpected ')', got %szExpected selector, got %s)rRr>)rRrb)rcrX)rRrd)rRrf)rRrg)rRrh)rRrh)rRri)rjrkrlrm)rRri)rRrd)rT�len�usedrVr*rWr&�next_ident_or_starr<r_rr?r!�
next_ident�parse_attribr�parse_argumentsr�_unicoder-r^�posr/r,)rProZselector_startrVr8r=r`rr.ZargumentZargument_pseudo_elementrWrrr	r^�s�









r^cCsVg}xL|j�|j�}|jd	ks(|dkr4|j|�q|d
kr@|Std|f��qWdS)Nra�STRING�NUMBERrRrY�-rdzExpected an argument, got %s)rarxry�rRrY�rRrz)r{r|)rRrd)rTrWr*�appendr)rPr%rWrrr	ru�srucCsj|j�|j�}|dkr6|j�dkr6td|j�f��|j�dkrz|j�|j�dkrhd}|j�d}q�|}|j�}d}nd}}|dk�r|j�|j�}|dkr�t|||dd�S|dkr�d}nD|jdd	d
ddd�o�|j�dk�r�|jd}|j�ntd
|f��|j�|j�}|j	dk�r0td|f��|j�|j�}|dk�rXtd|f��t|||||j�S)NrRrbzExpected '|', got %s�=z|=�]r;�^�$r>r[�!zOperator expected, got %srarxz Expected string or ident, got %szExpected ']', got %s)rRrb)rRrb)rRr~)rRr)rRr~)rRr~)rarx)rRr)
rTrrrVrrWrsr7r_r&r*)r"rPr9r8�oprWr&rrr	rt�sN



rtcCs�x|D]}|jdkrtd��qWdjdd�|D��j�}|dkrDdS|d	krPdS|dkr\dSd|krpd
t|�fS|jdd�\}}|s�d}n&|dks�|d
kr�t|d�}nt|�}|s�d
}nt|�}||fS)zv
    Parses the arguments for :nth-child() and friends.

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

    rxz$String tokens not allowed in series.rcss|]}|jVqdS)N)r&)r'r(rrr	�	<genexpr>+szparse_series.<locals>.<genexpr>ZoddrErZevenr�nrzrY�1)rEr)rEr)rr)r*�
ValueError�join�strip�int�split)�tokensr(�srrrrr	�parse_series s,

r�c@s@eZdZdd�Zdd�Zdd�Zeejd��Z	eejd��Z
d	S)
�TokencCstj|||f�}||_|S)N)�tuple�__new__rw)�clsZtype_r&rw�objrrr	r�Fsz
Token.__new__cCsd|j|j|jfS)Nz<%s '%s' at %i>)r*r&rw)rrrr	rKszToken.__repr__cGs|jdko|j|kS)NrR)r*r&)r�valuesrrr	r_NszToken.is_delimrrN)rr
rr�rr_�propertyr:�
itemgetterr*r&rrrr	r�Es
r�c@seZdZdd�Zdd�ZdS)�EOFTokencCstj|dd|�S)NrX)r�r�)r�rwrrr	r�VszEOFToken.__new__cCsd|j|jfS)Nz
<%s at %i>)r*rw)rrrr	rYszEOFToken.__repr__N)rr
rr�rrrrr	r�Usr�c@s<eZdZdZedZdeZdZdeefZdeefZdS)�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_escapeZnonasciiZnmcharZnmstartrrrr	r�`sr�cCstj|tt�tj�jS)N)�re�compile�varsr��
IGNORECASErG)�patternrrr	�_compilehsr�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)�methodcallerrHrcCs
|jd�S)Nr)rH)rGrrr	�_replace_simple}sr�cCs&t|jd�d�}|tjkrd}t|�S)Nr�i��)r�rH�sys�
maxunicode�_unichr)rGZ	codepointrrr	�_replace_unicode�s
r�cCstt|�}tt|�}|S)N)�_sub_unicode_escaper��_sub_simple_escaper�)r&rrr	�unescape_ident�s

r�ccs
d}t|�}�x�||k�r�t||d�}|rBtdd|�V|j�}qt||d�}|r~tttt|j	���}td||�V|j�}qt
||d�}|r�tttt|j	�dd���}td||�V|j�}q||}|tk�r^t|||dd�}|s�td��|j�}||k�rt
d	|��|||k�r,t
d
|��tttttd|j	����}td||�V|d}qt||d�}|�r�|j	�}td
||�V|j�}q|d}|||�dk�r�|jd|�}|dk�r�|}q|d7}qtd|||�V|d7}qW||k�s�t�t|�VdS)Nr)rwrcrDrarrez)Should have found at least an empty matchzUnclosed string at %szInvalid string at %srrxryrEz/*z*/rR���)rp�_match_whitespacer��end�_match_identr�r�r�r�rH�_match_hash�_match_string_by_quoterBr�_sub_newline_escape�
_match_number�findr�)r�rwZlen_srGr&ZquoteZend_posZpos2rrr	rL�sl


rLc@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)rKNcCsTg|_t|�|_||_d|_d|_y|jj|_Wntk
rN|jj	|_YnXdS)NF)
rq�iterr�rM�peeked�_peekingrW�
next_token�AttributeError�__next__)rr�rMrrr	r�s
zTokenStream.__init__cCs<|jr d|_|jj|j�|jS|j�}|jj|�|SdS)NF)r�rqr}r�r�)rrWrrr	rW�szTokenStream.nextcCs|js|j�|_d|_|jS)NT)r�r�r�)rrrr	rV�s
zTokenStream.peekcCs&|j�}|jdkr td|f��|jS)NrazExpected ident, got %s)rWr*rr&)rrWrrr	rs�s
zTokenStream.next_identcCs6|j�}|jdkr|jS|dkr$dStd|f��dS)NrarRr>zExpected ident or '*', got %s)rRr>)rWr*r&r)rrWrrr	rr�s
zTokenStream.next_ident_or_starcCs|j�}|jdkr|j�dS)Nrc)rVr*rW)rrVrrr	rT�s
zTokenStream.skip_whitespace)N)	rr
rrrWrVrsrrrTrrrr	rK�s


rK)F)=rr�r�r:�version_infoZunicodervZunichrr��str�chrr
�	Exceptionr�SyntaxErrorr�objectrr!rr,r-r/r7r<r?rAr�rFrIrJrQrOrUr^rurtr�r�r�r�r�r�r�r�r�r�r��subr�r��Ir�r��hasattrr�r�r�r�rLrKrrrr	�<module>
sh	;#

*

S-%A
Page not found – Hello World !