509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
Ç�aWœ\  ã               @   s>  d Z ddlZddlZddlZejd dk r4eZeZne	Ze
Zdd„ ZG dd„ deƒZG dd	„ d	eeƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZejdƒZejdƒZejd ƒZd!d"„ Zd#d$„ Z d%d&„ Z!dNd(d)„Z"d*d+„ Z#d,d-„ Z$d.d/„ Z%G d0d1„ d1e&ƒZ'G d2d3„ d3e'ƒZ(G d4d5„ d5ƒZ)d6d7„ Z*e*d8ƒZ+e*d9ƒZ,e*d:ƒZ-e*d;ƒZ.e*d<ƒe*d=ƒd>œZ/ejd?ƒj0Z1eje)j2ej3ƒj0Z4ejd@ƒj0Z5e6edAƒ�r
ej7dBdCƒZ8ndDdE„ Z8dFdG„ Z9dHdI„ Z:dJdK„ Z;G dLdM„ dMeƒZ<dS )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é   c             C   s   | j dƒjƒ jdƒS )z(Lower-case, but only in the ASCII range.Úutf8)ÚencodeÚlowerÚdecode)Ústring© r   ú/usr/lib/python3.6/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.N)r   r   r   r   r   r   r   r	   r   *   s   r   c               @   s*   e Zd ZdZd	dd„Zdd„ Z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.

    Nc             C   s,   || _ |d k	r"t|tƒ r"t|ƒ}|| _d S )N)Úparsed_treeÚ
isinstanceÚFunctionalPseudoElementr
   Úpseudo_element)ÚselfZtreer   r   r   r	   Ú__init__:   s
    

zSelector.__init__c             C   sB   t | jtƒrt| jƒ}n| jr*d| j }nd}d| jj| j|f S )Nz::%sÚ z%s[%r%s])r   r   r   ÚreprÚ	__class__r   r   )r   r   r   r   r	   Ú__repr__U   s    zSelector.__repr__c             C   s(   | j 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   Úspecificityr   )r   ÚaÚbÚcr   r   r	   r   _   s    zSelector.specificity)N)r   r   r   r   r   r   r   r   r   r   r	   r   0   s   	

r   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚClassz(
    Represents selector.class_name
    c             C   s   || _ || _d S )N)ÚselectorÚ
class_name)r   r"   r#   r   r   r	   r   o   s    zClass.__init__c             C   s   d| j j| j| jf S )Nz	%s[%r.%s])r   r   r"   r#   )r   r   r   r	   r   s   s    zClass.__repr__c             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r   w   s    zClass.specificityN)r   r   r   r   r   r   r   r   r   r   r	   r!   k   s   r!   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Z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.

    c             C   s   t |ƒ| _|| _d S )N)r
   ÚnameÚ	arguments)r   r$   r%   r   r   r	   r   Ž   s    
z FunctionalPseudoElement.__init__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>•   s    z4FunctionalPseudoElement.__repr__.<locals>.<listcomp>)r   r   r$   r%   )r   r   r   r	   r   ’   s    
z FunctionalPseudoElement.__repr__c             C   s   dd„ | j D ƒS )Nc             S   s   g | ]
}|j ‘qS r   )Útype)r'   r(   r   r   r	   r)   ˜   s    z:FunctionalPseudoElement.argument_types.<locals>.<listcomp>)r%   )r   r   r   r	   Úargument_types—   s    z&FunctionalPseudoElement.argument_typesc             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r   š   s    z#FunctionalPseudoElement.specificityN)r   r   r   r   r   r   r+   r   r   r   r   r	   r   }   s
   r   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚFunctionz(
    Represents selector:name(expr)
    c             C   s   || _ t|ƒ| _|| _d S )N)r"   r
   r$   r%   )r   r"   r$   r%   r   r   r	   r   ¤   s    
zFunction.__init__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   )r&   )r'   r(   r   r   r	   r)   ¬   s    z%Function.__repr__.<locals>.<listcomp>)r   r   r"   r$   r%   )r   r   r   r	   r   ©   s    zFunction.__repr__c             C   s   dd„ | j D ƒS )Nc             S   s   g | ]
}|j ‘qS r   )r*   )r'   r(   r   r   r	   r)   ¯   s    z+Function.argument_types.<locals>.<listcomp>)r%   )r   r   r   r	   r+   ®   s    zFunction.argument_typesc             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r   ±   s    zFunction.specificityN)r   r   r   r   r   r   r+   r   r   r   r   r	   r,       s
   r,   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚPseudoz#
    Represents selector:ident
    c             C   s   || _ t|ƒ| _d S )N)r"   r
   Úident)r   r"   r.   r   r   r	   r   »   s    zPseudo.__init__c             C   s   d| j j| j| jf S )Nz	%s[%r:%s])r   r   r"   r.   )r   r   r   r	   r   ¿   s    zPseudo.__repr__c             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r   Ã   s    zPseudo.specificityN)r   r   r   r   r   r   r   r   r   r   r	   r-   ·   s   r-   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚNegationz.
    Represents selector:not(subselector)
    c             C   s   || _ || _d S )N)r"   Úsubselector)r   r"   r0   r   r   r	   r   Í   s    zNegation.__init__c             C   s   d| j j| j| jf S )Nz%s[%r:not(%r)])r   r   r"   r0   )r   r   r   r	   r   Ñ   s    zNegation.__repr__c             C   s6   | j jƒ \}}}| jjƒ \}}}|| || || fS )N)r"   r   r0   )r   Úa1Úb1Úc1Úa2Úb2Úc2r   r   r	   r   Õ   s    zNegation.specificityN)r   r   r   r   r   r   r   r   r   r   r	   r/   É   s   r/   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚAttribz>
    Represents selector[namespace|attrib operator value]
    c             C   s"   || _ || _|| _|| _|| _d S )N)r"   Ú	namespaceÚattribÚoperatorr&   )r   r"   r8   r9   r:   r&   r   r   r	   r   ß   s
    zAttrib.__init__c             C   s\   | j rd| j | jf }n| j}| jdkr<d| jj| j|f S d| jj| j|| j| jf S d S )Nz%s|%sÚexistsz
%s[%r[%s]]z%s[%r[%s %s %r]])r8   r9   r:   r   r   r"   r&   )r   r9   r   r   r	   r   æ   s    
zAttrib.__repr__c             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r   ó   s    zAttrib.specificityN)r   r   r   r   r   r   r   r   r   r   r	   r7   Û   s   r7   c               @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
ÚElementzU
    Represents namespace|element

    `None` is for the universal selector '*'

    Nc             C   s   || _ || _d S )N)r8   Úelement)r   r8   r=   r   r   r	   r      s    zElement.__init__c             C   s.   | j pd}| jrd| j|f }d| jj|f S )NÚ*z%s|%sz%s[%s])r=   r8   r   r   )r   r=   r   r   r	   r     s    
zElement.__repr__c             C   s   | j r
dS dS d S )Nr   r   )r   r   r   )r   r   r   )r=   )r   r   r   r	   r   
  s    zElement.specificity)NN)r   r   r   r   r   r   r   r   r   r   r	   r<   ù   s   
r<   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚHashz 
    Represents selector#id
    c             C   s   || _ || _d S )N)r"   Úid)r   r"   r@   r   r   r	   r     s    zHash.__init__c             C   s   d| j j| j| jf S )Nz	%s[%r#%s])r   r   r"   r@   )r   r   r   r	   r     s    zHash.__repr__c             C   s"   | j jƒ \}}}|d7 }|||fS )Nr   )r"   r   )r   r   r   r    r   r   r	   r     s    zHash.specificityN)r   r   r   r   r   r   r   r   r   r   r	   r?     s   r?   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCombinedSelectorc             C   s"   |d k	st ‚|| _|| _|| _d S )N)ÚAssertionErrorr"   Ú
combinatorr0   )r   r"   rC   r0   r   r   r	   r   $  s    zCombinedSelector.__init__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])rC   r   r   r"   r0   )r   Zcombr   r   r	   r   *  s
    
zCombinedSelector.__repr__c             C   s6   | j jƒ \}}}| jjƒ \}}}|| || || fS )N)r"   r   r0   )r   r1   r2   r3   r4   r5   r6   r   r   r	   r   2  s    zCombinedSelector.specificityN)r   r   r   r   r   r   r   r   r   r	   rA   #  s   rA   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]*$c             C   s²   t j| ƒ}|r$tt|jdƒd�ƒgS tj| ƒ}|dk	r\ttt|jdƒpHdd�|jdƒƒƒgS tj| ƒ}|dk	r”ttt|jdƒp€dd�|j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 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Úmatchr   r<   ÚgroupÚ_id_rer?   Ú	_class_rer!   ÚTokenStreamÚtokenizeÚsourceÚlistÚparse_selector_group)ZcssrG   Ústreamr   r   r	   ÚparseE  s    


rQ   c             c   s@   | j ƒ  x2tt| ƒŽ V  | jƒ dkr6| jƒ  | j ƒ  q
P q
W d S )NÚDELIMú,)rR   rS   )Úskip_whitespacer   Úparse_selectorÚpeekÚnext)rP   r   r   r	   rO   o  s    
rO   c             C   s‚   t | ƒ\}}xl| jƒ  | jƒ }|dkr(P |r8td| ƒ‚|jdddƒrZ| jƒ j}| jƒ  nd}t | ƒ\}}t|||ƒ}qW ||fS )NÚEOFrR   rS   z4Got pseudo-element ::%s not at the end of a selectorú+ú>ú~rD   ©rX   N©rR   rS   )r\   r]   )Úparse_simple_selectorrT   rV   r   Úis_delimrW   r&   rA   )rP   Úresultr   rV   rC   Znext_selectorr   r   r	   rU   y  s"    

rU   Fc             C   sˆ  | j ƒ  t| jƒ}| jƒ }|jdks,|dkrv|jdkrB| jƒ j}n| jƒ  d }| jƒ dkrl| jƒ  | jƒ }q~|}d }nd  }}t||ƒ}d }�xÎ| jƒ }|jdks¾|j	ddd	d
ƒs¾|rÀ|d krÀP |rÐt
d| ƒ‚|jdkrì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%kr�| jƒ  t|t| ƒƒ}q�| jƒ }|jƒ d&k�r t|ƒ}q�| jƒ d'k�rºt||ƒ}q�| jƒ  | j ƒ  |jƒ dk�r:|�ræt
dƒ‚t| dd�\}	}
| jƒ }|
�rt
d|
|jf ƒ‚|d(k�r.t
d|f ƒ‚t||	ƒ}nt||t| ƒƒ}q�t
d|f ƒ‚q�W t| jƒ|k�r€t
d| jƒ f ƒ‚||fS ))NÚIDENTrR   r>   ú|ÚSrX   rS   rY   rZ   r[   ú)z4Got pseudo-element ::%s not at the end of a selectorÚHASHÚ.ú[ú:ú(ú
first-lineúfirst-letterÚbeforeÚafterÚnotzGot nested :not()T)Úinside_negationz+Got pseudo-element ::%s inside :not() at %szExpected ')', got %szExpected selector, got %s)rR   r>   )rR   rb   )rc   rX   )rR   rd   )rR   rf   )rR   rg   )rR   rh   )rR   rh   )rR   ri   )rj   rk   rl   rm   )rR   ri   )rR   rd   )rT   ÚlenÚusedrV   r*   rW   r&   Únext_ident_or_starr<   r_   r   r?   r!   Ú
next_identÚparse_attribr   Úparse_argumentsr   Ú_unicoder-   r^   Úposr/   r,   )rP   ro   Zselector_startrV   r8   r=   r`   r   r.   ZargumentZargument_pseudo_elementrW   r   r   r	   r^   ‘  s’    









r^   c             C   sV   g }xL| j ƒ  | jƒ }|jd	ks(|dkr4|j|ƒ q|dkr@|S td|f ƒ‚qW d S )Nra   ÚSTRINGÚNUMBERrR   rY   ú-rd   zExpected an argument, got %s)ra   rx   ry   ©rR   rY   ©rR   rz   )r{   r|   )rR   rd   )rT   rW   r*   Úappendr   )rP   r%   rW   r   r   r	   ru   ä  s    ru   c             C   sj  |j ƒ  |jƒ }|d kr6|jƒ dkr6td|jƒ f ƒ‚|jƒ dkrz|jƒ  |jƒ dkrhd }|jƒ  d}q‚|}|jƒ }d }nd  }}|d k�r|j ƒ  |jƒ }|dkr´t| ||dd ƒS |dkrÂd}nD|jdd	d
dddƒoà|jƒ dk� rø|jd }|jƒ  ntd|f ƒ‚|j ƒ  |jƒ }|j	dk�r0td|f ƒ‚|j ƒ  |jƒ }|dk�rXtd|f ƒ‚t| ||||jƒS )NrR   rb   zExpected '|', got %sú=z|=ú]r;   ú^ú$r>   r[   ú!zOperator expected, got %sra   rx   z Expected string or ident, got %szExpected ']', got %s)rR   rb   )rR   rb   )rR   r~   )rR   r   )rR   r~   )rR   r~   )ra   rx   )rR   r   )
rT   rr   rV   r   rW   rs   r7   r_   r&   r*   )r"   rP   r9   r8   ÚoprW   r&   r   r   r	   rt   ó  sN    



rt   c             C   sÊ   x| D ]}|j dkrtdƒ‚qW djdd„ | D ƒƒjƒ }|dkrDdS |d	krPdS |dkr\dS d|krpd
t|ƒfS |jddƒ\}}|sŠd}n&|dksš|dkr¨t|d ƒ}nt|ƒ}|sºd
}nt|ƒ}||fS )zv
    Parses the arguments for :nth-child() and friends.

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

    rx   z$String tokens not allowed in series.r   c             s   s   | ]}|j V  qd S )N)r&   )r'   r(   r   r   r	   ú	<genexpr>+  s    zparse_series.<locals>.<genexpr>ZoddrE   r   Zevenr   Únrz   rY   Ú1)rE   r   )rE   r   )r   r   )r*   Ú
ValueErrorÚjoinÚstripÚintÚsplit)Útokensr(   Úsr   r   r   r   r	   Úparse_series   s,    

rŽ   c               @   s@   e Zd Zdd„ Zdd„ Zdd„ ZeejdƒƒZ	eejdƒƒZ
d	S )
ÚTokenc             C   s   t j| ||fƒ}||_|S )N)ÚtupleÚ__new__rw   )ÚclsZtype_r&   rw   Úobjr   r   r	   r‘   F  s    zToken.__new__c             C   s   d| j | j| jf S )Nz<%s '%s' at %i>)r*   r&   rw   )r   r   r   r	   r   K  s    zToken.__repr__c             G   s   | j dko| j|kS )NrR   )r*   r&   )r   Úvaluesr   r   r	   r_   N  s    zToken.is_delimr   r   N)r   r   r   r‘   r   r_   Úpropertyr:   Ú
itemgetterr*   r&   r   r   r   r	   r�   E  s
   r�   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚEOFTokenc             C   s   t j| dd |ƒS )NrX   )r�   r‘   )r’   rw   r   r   r	   r‘   V  s    zEOFToken.__new__c             C   s   d| j | jf S )Nz
<%s at %i>)r*   rw   )r   r   r   r	   r   Y  s    zEOFToken.__repr__N)r   r   r   r‘   r   r   r   r   r	   r—   U  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             C   s   t j| ttƒ t jƒjS )N)ÚreÚcompileÚvarsr˜   Ú
IGNORECASErG   )Úpatternr   r   r	   Ú_compileh  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)ÚmethodcallerrH   r   c             C   s
   | j dƒS )Nr   )rH   )rG   r   r   r	   Ú_replace_simple}  s    r¤   c             C   s&   t | jdƒdƒ}|tjkrd}t|ƒS )Nr   é   iýÿ  )rŠ   rH   ÚsysÚ
maxunicodeÚ_unichr)rG   Z	codepointr   r   r	   Ú_replace_unicode€  s    
r©   c             C   s   t t| ƒ} tt| ƒ} | S )N)Ú_sub_unicode_escaper©   Ú_sub_simple_escaper¤   )r&   r   r   r	   Úunescape_ident‡  s    

r¬   c             c   s
  d}t | ƒ}�xÞ||k �rìt| |d�}|rBtdd|ƒV  |jƒ }qt| |d�}|r~tttt|j	ƒ ƒƒ}td||ƒV  |jƒ }qt
| |d�}|rÂtttt|j	ƒ dd … ƒƒ}td||ƒV  |jƒ }q| | }|tk�r^t| | |d d�}|sôtdƒ‚|jƒ }||k�rtd	| ƒ‚| | |k�r,td
| ƒ‚tttttd|j	ƒ ƒƒƒ}td||ƒV  |d }qt| |d�}|�r�|j	ƒ }td||ƒV  |jƒ }q|d }| ||… dk�rÐ| jd|ƒ}|dk�rÆ|}q|d7 }qtd| | |ƒV  |d7 }qW ||k�süt‚t|ƒV  d S )Nr   )rw   rc   rD   ra   r   re   z)Should have found at least an empty matchzUnclosed string at %szInvalid string at %sr   rx   ry   rE   z/*z*/rR   éÿÿÿÿ)rp   Ú_match_whitespacer�   ÚendÚ_match_identr«   r¤   rª   r©   rH   Ú_match_hashÚ_match_string_by_quoterB   r   Ú_sub_newline_escapeÚ_match_numberÚfindr—   )r�   rw   Zlen_srG   r&   ZquoteZend_posZpos2r   r   r	   rL   �  sl    


rL   c               @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )rK   Nc             C   sT   g | _ t|ƒ| _|| _d | _d| _y| jj| _W n tk
rN   | jj	| _Y nX d S )NF)
rq   ÚiterrŒ   rM   ÚpeekedÚ_peekingrW   Ú
next_tokenÚAttributeErrorÚ__next__)r   rŒ   rM   r   r   r	   r   Ï  s    
zTokenStream.__init__c             C   s<   | j r d| _ | jj| jƒ | jS | jƒ }| jj|ƒ |S d S )NF)r¸   rq   r}   r·   r¹   )r   rW   r   r   r	   rW   Û  s    zTokenStream.nextc             C   s   | j s| jƒ | _d| _ | jS )NT)r¸   r¹   r·   )r   r   r   r	   rV   å  s    
zTokenStream.peekc             C   s&   | j ƒ }|jdkr td|f ƒ‚|jS )Nra   zExpected ident, got %s)rW   r*   r   r&   )r   rW   r   r   r	   rs   ë  s    
zTokenStream.next_identc             C   s6   | j ƒ }|jdkr|jS |dkr$d S td|f ƒ‚d S )Nra   rR   r>   zExpected ident or '*', got %s)rR   r>   )rW   r*   r&   r   )r   rW   r   r   r	   rr   ñ  s    
zTokenStream.next_ident_or_starc             C   s   | j ƒ }|jdkr| jƒ  d S )Nrc   )rV   r*   rW   )r   rV   r   r   r	   rT   û  s    
zTokenStream.skip_whitespace)N)	r   r   r   r   rW   rV   rs   rr   rT   r   r   r   r	   rK   Î  s   


rK   )F)=r   r¦   r›   r:   Úversion_infoZunicoderv   Zunichrr¨   ÚstrÚchrr
   Ú	Exceptionr   ÚSyntaxErrorr   Úobjectr   r!   r   r,   r-   r/   r7   r<   r?   rA   rœ   rF   rI   rJ   rQ   rO   rU   r^   ru   rt   rŽ   r�   r�   r—   r˜   r    r®   r´   r±   r°   r²   Úsubr«   r™   ÚIrª   r³   Úhasattrr£   r¤   r©   r¬   rL   rK   r   r   r   r	   Ú<module>   sh   	;#

*

S-%A