
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
HX              ,   @   s  d Z ddlmZ ddlZddlmZ eddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/g+ed0d1Zd2d3d4d5d6d7Z	ej
d8ejZej
d9ejZej
d:Zej
d;ejZej
d<Zej
d=ej Zej
d>Zed?d@Zdej
dAejfdej
dBfdCej
dDfdEej
dFejejB fdGefdHefdIej
dJejfdKej
dLejfdMej
dNdjeeje fdOej
dPejfdQej
dRejejB fgZdSdT ZdUdV ZdWdX Zd[dYdZZdS )\z
    babel.messages.jslexer
    ~~~~~~~~~~~~~~~~~~~~~~

    A simple JavaScript 1.5 lexer which is used for the JavaScript
    extractor.

    :copyright: (c) 2013 by the Babel Team.
    :license: BSD, see LICENSE for more details.
    )
namedtupleN)unichr+-*%z!=z==<>z<=z>==z+=z-=z*=z%=z<<z>>z>>>z<<=z>>=z>>>=&z&=|z|=z&&z||^z^=()[]{}!z--z++~,;.:T)keyreverse
	)bfnrtz[\w$_][\w\d$_]*z[\w$_][\w\d$_.]*[\w\d$_.]z/=?z%/(?:[^/\\]*(?:\\.[^/\\]*)*)/[a-zA-Z]*z(\r\n|\n|\r)z\\z[a-fA-F0-9]{1,4}Tokenztype value linenoz\s+z<!--.*Zlinecommentz//.*Zmultilinecommentz	/\*.*?\*/dotted_namenamenumberzb(
        (?:0|[1-9]\d*)
        (\.\d+)?
        ([eE][-+]?\d+)? |
        (0x[a-fA-F0-9]+)
    )Zjsx_tagz(?:</?[^>\s]+|/>)operatorz(%s)template_stringz`(?:[^`\\]*(?:\\.[^`\\]*)*)`stringzT(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )c             C   s^   g }xTt D ]L\}}|  r&|r&d|kr&q
| r6|dkr6q
|dkrH|sDq
d}|j||f q
W |S )ze
    Get a tokenization rule list given the passed syntax options.

    Internal to this module.
    jsxr+   r'   r(   )_rulesappend)r-   dottedr+   rules
token_typerule r4   /usr/lib/python3.6/jslexer.py	get_rules:   s    r6   c             C   s   | j dkr| jdkS | j dkS )zzA helper function that helps the tokenizer to decide if the current
    token may be followed by a division operator.
    r*   r   r   r   ++--r(   r)   r,   regexp)r   r   r   r7   r8   )r(   r)   r,   r9   )typevalue)tokenr4   r4   r5   indicates_divisionN   s    

r=   c             C   s4  t jd| dd } g }|j}d}x| jd|}|dk r:P || ||  | |d  }|tkrl|t|  n|dkrtj| |d }|dk	r|j }t|dkry|t	t
|d	 W n tk
r   Y nX |d
 }q$|||  |j }q$n|| n|| |d }q$W |t| k r*|| |d  dj|S )zUnquote a string with JavaScript rules.  The string has to start with
    string delimiters (``'``, ``"`` or the back-tick/grave accent (for template strings).)
    z\1   r   \ZuU   N          )line_join_resubr/   findescapesuni_escape_rematchgrouplenr   int
ValueErrorendjoin)r,   resultaddposZ
escape_posZ	next_charZescapedZescaped_valuer4   r4   r5   unquote_stringW   s@    
rU   c             c   s   d}d}d}t | }t|||d}x||k rx^|D ]\}	}
|
j| |}|dk	r2P q2W |rjtj| |}d}	ntj| |}d}	|dkr|d7 }q$|j }|	dk	rt|	||}t|}|V  |t tj	|7 }|j
 }q$W dS )z
    Tokenize JavaScript/JSX source.  Returns a generator of tokens.

    :param jsx: Enable (limited) JSX parsing.
    :param dotted: Read dotted names as single name token.
    :param template_string: Support ES6 template strings
    Fr   r>   )r-   r0   r+   Nr*   r9   )rM   r6   rK   division_reregex_rerL   r&   r=   line_refindallrP   )sourcer-   r0   r+   Z
may_dividerT   linenorP   r1   r2   r3   rK   Ztoken_valuer<   r4   r4   r5   tokenize   s2    
r\   )TTT) __doc__collectionsr   reZbabel._compatr   sortedrM   Z	operatorsrI   compileUNICODEZname_reZdotted_name_rerV   DOTALLrW   rX   patternrF   rJ   r&   VERBOSEIrQ   mapescaper.   r6   r=   rU   r\   r4   r4   r4   r5   <module>   sF   





	8