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 S )N)r"   Ú
combinatorr0   )r   r"   rB   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])rB   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cssrF   Ústreamr   r   r	   ÚparseE  s    


rP   c             c   s@   | j ƒ  x2tt| ƒŽ V  | jƒ dkr6| jƒ  | j ƒ  q
P q
W d S )NÚDELIMú,)rQ   rR   )Úskip_whitespacer   Úparse_selectorÚpeekÚnext)rO   r   r   r	   rN   o  s    
rN   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ÚEOFrQ   rR   z4Got pseudo-element ::%s not at the end of a selectorú+ú>ú~rC   ©rW   N©rQ   rR   )r[   r\   )Úparse_simple_selectorrS   rU   r   Úis_delimrV   r&   rA   )rO   Úresultr   rU   rB   Znext_selectorr   r   r	   rT   y  s"    

rT   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ÚIDENTrQ   r>   ú|ÚSrW   rR   rX   rY   rZ   ú)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)rQ   r>   )rQ   ra   )rb   rW   )rQ   rc   )rQ   re   )rQ   rf   )rQ   rg   )rQ   rg   )rQ   rh   )ri   rj   rk   rl   )rQ   rh   )rQ   rc   )rS   ÚlenÚusedrU   r*   rV   r&   Únext_ident_or_starr<   r^   r   r?   r!   Ú
next_identÚparse_attribr   Úparse_argumentsr   Ú_unicoder-   r]   Úposr/   r,   )rO   rn   Zselector_startrU   r8   r=   r_   r   r.   ZargumentZargument_pseudo_elementrV   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 )Nr`   ÚSTRINGÚNUMBERrQ   rX   ú-rc   zExpected an argument, got %s)r`   rw   rx   ©rQ   rX   ©rQ   ry   )rz   r{   )rQ   rc   )rS   rV   r*   Úappendr   )rO   r%   rV   r   r   r	   rt   ä  s    rt   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 )NrQ   ra   zExpected '|', got %sú=z|=ú]r;   ú^ú$r>   rZ   ú!zOperator expected, got %sr`   rw   z Expected string or ident, got %szExpected ']', got %s)rQ   ra   )rQ   ra   )rQ   r}   )rQ   r~   )rQ   r}   )rQ   r}   )r`   rw   )rQ   r~   )
rS   rq   rU   r   rV   rr   r7   r^   r&   r*   )r"   rO   r9   r8   ÚoprV   r&   r   r   r	   rs   ó  sN    



rs   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)``

    rw   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oddrD   r   Zevenr   Únry   rX   Ú1)rD   r   )rD   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__rv   )ÚclsZtype_r&   rv   Ú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&   rv   )r   r   r   r	   r   K  s    zToken.__repr__c             G   s   | j dko| j|kS )NrQ   )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 )NrW   )rŽ   r�   )r‘   rv   r   r   r	   r�   V  s    zEOFToken.__new__c             C   s   d| j | jf S )Nz
<%s at %i>)r*   rv   )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—   Ú
IGNORECASErF   )Ú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)ÚmethodcallerrG   r   c             C   s
   | j dƒS )Nr   )rG   )rF   r   r   r	   Ú_replace_simple}  s    r£   c             C   s&   t | jdƒdƒ}|tjkrd}t|ƒS )Nr   é   iýÿ  )r‰   rG   ÚsysÚ
maxunicodeÚ_unichr)rF   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�rRt| | |d 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 t|ƒV  d S )Nr   )rv   rb   rC   r`   r   rd   zUnclosed string at %szInvalid string at %sr   rw   rx   rD   z/*z*/rQ   éÿÿÿÿ)ro   Ú_match_whitespacerŽ   ÚendÚ_match_identrª   r£   r©   r¨   rG   Ú_match_hashÚ_match_string_by_quoter   Ú_sub_newline_escapeÚ_match_numberÚfindr–   )rŒ   rv   Zlen_srF   r&   ZquoteZend_posZpos2r   r   r	   rK   �  sh    


rK   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 )rJ   Nc             C   sT   g | _ t|ƒ| _|| _d | _d| _y| jj| _W n tk
rN   | jj	| _Y nX d S )NF)
rp   Úiterr‹   rL   ÚpeekedÚ_peekingrV   Ú
next_tokenÚAttributeErrorÚ__next__)r   r‹   rL   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·   rp   r|   r¶   r¸   )r   rV   r   r   r	   rV   Û  s    zTokenStream.nextc             C   s   | j s| jƒ | _d| _ | jS )NT)r·   r¸   r¶   )r   r   r   r	   rU   å  s    
zTokenStream.peekc             C   s&   | j ƒ }|jdkr td|f ƒ‚|jS )Nr`   zExpected ident, got %s)rV   r*   r   r&   )r   rV   r   r   r	   rr   ë  s    
zTokenStream.next_identc             C   s6   | j ƒ }|jdkr|jS |dkr$d S td|f ƒ‚d S )Nr`   rQ   r>   zExpected ident or '*', got %s)rQ   r>   )rV   r*   r&   r   )r   rV   r   r   r	   rq   ñ  s    
zTokenStream.next_ident_or_starc             C   s   | j ƒ }|jdkr| jƒ  d S )Nrb   )rU   r*   rV   )r   rU   r   r   r	   rS   û  s    
zTokenStream.skip_whitespace)N)	r   r   r   r   rV   rU   rr   rq   rS   r   r   r   r	   rJ   Î  s   


rJ   )F)=r   r¥   rš   r:   Úversion_infoZunicoderu   Zunichrr§   ÚstrÚchrr
   Ú	Exceptionr   ÚSyntaxErrorr   Úobjectr   r!   r   r,   r-   r/   r7   r<   r?   rA   r›   rE   rH   rI   rP   rN   rT   r]   rt   rs   r�   r�   rŽ   r–   r—   rŸ   r­   r³   r°   r¯   r±   Úsubrª   r˜   ÚIr©   r²   Úhasattrr¢   r£   r¨   r«   rK   rJ   r   r   r   r	   Ú<module>   sh   	;#

*

S-%A