File: //opt/alt/python38/lib/python3.8/site-packages/babel/messages/__pycache__/jslexer.cpython-38.pyc
U
�`� � , @ s� d Z ddlmZ ddlZddlmZ eddddd d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/g+ed0d1�Zd2d3d4d5d6d7�Z e�
d8ej�Ze�
d9ej�Z
e�
d:�Ze�
d;ej�Ze�
d<�Ze�
d=ej �Ze�
d>�Zed?d@�Zde�
dAej�fde�
dB�fdCe�
dD�fdEe�
dFejejB �fdGe
fdHefdIe�
dJej�fdKe�
dLej�fdMe�
dNd�eeje�� �fdOe�
dPej�fdQe�
dRejejB �fgZdSdT� ZdUdV� ZdWdX� Zd[dYdZ�ZdS )\z�
babel.messages.jslexer
~~~~~~~~~~~~~~~~~~~~~~
A simple JavaScript 1.5 lexer which is used for the JavaScript
extractor.
:copyright: (c) 2013-2021 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}�Tokenztype value linenoz\s+z<!--.*Zlinecommentz//.*Zmultilinecommentz /\*.*?\*/�dotted_name�name�numberzb(
(?:0|[1-9]\d*)
(\.\d+)?
([eE][-+]?\d+)? |
(0x[a-fA-F0-9]+)
)Zjsx_tagz(?:</?[^>\s]+|/>)�operatorz(%s)�template_stringz`(?:[^`\\]*(?:\\.[^`\\]*)*)`�stringzT(
'(?:[^'\\]*(?:\\.[^'\\]*)*)' |
"(?:[^"\\]*(?:\\.[^"\\]*)*)"
)c C sV g }t D ]H\}}| s"|r"d|kr"q|s0|dkr0q|dkrB|s>qd}|�||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 �G/opt/alt/python38/lib/python3.8/site-packages/babel/messages/jslexer.py� get_rules: s r8 c C s | j dkr| jdkS | j dkS )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 kr | d dks(t d��t�d| dd� �} g }|j}d}| �d|�}|dk rb�q8|| ||� � | |d }|tkr�|t| � n�|dk�r&t�| |d �}|d
k �r|�� }t |�dk�rz|t
t|d��� W n tk
r� Y nX |d
}qJ||| � |�
� }qJn||� n||� |d }qJ|t | �k �rV|| |d
� � d�|�S )z�Unquote 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� �\ZuU� 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_charZescapedZ
escaped_valuer6 r6 r7 �unquote_stringW sD "�
rV c c s� d}d}d}t | �}t|||d�}||k r�|D ] \} }
|
�| |�}|dk r. q�q.|rft�| |�}d} nt�| |�}d} |dkr�|d7 }q"|�� }| dk r�t| ||�}
t|
�}|
V |t t� |��7 }|�
� }q"dS )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 Ztoken_valuer<