U
    [e                  ,   @   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
d8ejZe
d9ejZe
d:Ze
d;ejZe
d<Ze
d=ej Ze
d>Zed?d@Zde
dAejfde
dBfdCe
dDfdEe
dFejejB fdGefdHefdIe
dJejfdKe
dLejfdMe
dNdeeje fdOe
dPejfdQe
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-2019 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^=()[]{}!--++~,;.: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   sV   g }t D ]H\}}| s"|r"d|kr"q|s0|dkr0q|dkrB|s>qd}|||f q|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 r6   X/var/www/html/services/stratfitenv/lib/python3.8/site-packages/babel/messages/jslexer.py	get_rules:   s    r8   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*   r+   r.   regexp)typevalue)tokenr6   r6   r7   indicates_divisionN   s    

r=   c                 C   s`  | r | d | d kr | d dks(t dtd| dd } g }|j}d}| d|}|dk rbq8|| ||  | |d  }|tkr|t|  n|dkr&t| |d	 }|d
k	r| }t	|dkrz|t
t|d W n tk
r   Y nX |d }qJ|||  | }qJn|| n|| |d	 }qJ|t	| k rV|| |d
  d|S )zUnquote a string with JavaScript rules.  The string has to start with
    string delimiters (``'``, ``"`` or the back-tick/grave accent (for template strings).)
    r   z"'`z)string provided is not properly delimitedz\1   \ZuU   N          )AssertionErrorline_join_resubr1   findescapesuni_escape_rematchgrouplenr   int
ValueErrorendjoin)r.   resultaddposZ
escape_posZ	next_charescapedZescaped_valuer6   r6   r7   unquote_stringW   sD    "



rW   c                 c   s   d}d}d}t | }t|||d}||k r|D ] \}	}
|
| |}|dk	r. qq.|rft| |}d}	nt| |}d}	|dkr|d7 }q"| }|	dk	rt|	||}t|}|V  |t t	|7 }|
 }q"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/   r2   r-   Nr,   r9   )rN   r8   rL   division_reregex_rerM   r(   r=   line_refindallrQ   )sourcer/   r2   r-   Z
may_dividerU   linenorQ   r3   r4   r5   rL   Ztoken_valuer<   r6   r6   r7   tokenize   s2    r^   )TTT) __doc__collectionsr   reZbabel._compatr   sortedrN   	operatorsrJ   compileUNICODEZname_reZdotted_name_rerX   DOTALLrY   rZ   patternrG   rK   r(   VERBOSEIrR   mapescaper0   r8   r=   rW   r^   r6   r6   r6   r7   <module>   s   
                                        




	8