o
    VÛë\¾  ã                   @   s€  d Z ddlmZ ddlZddlmZ eg d¢edd�Zdd	d
dddœZ	e 
dej¡Ze 
de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 
dej¡fde 
d¡fde 
d¡fde 
dejejB ¡fdefdefde 
d ej¡fd!e 
d"ej¡fd#e 
d$d% eejeƒ¡ ¡fd&e 
d'ej¡fd(e 
d)ejejB ¡fgZd*d+„ Zd,d-„ Zd.d/„ Zd2d0d1„ZdS )3zí
    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<!--.*Úlinecommentz//.*Úmultilinecommentz	/\*.*?\*/Údotted_nameÚnameÚnumberzb(
        (?:0|[1-9]\d*)
        (\.\d+)?
        ([eE][-+]?\d+)? |
        (0x[a-fA-F0-9]+)
    )Újsx_tagz(?:</?[^>\s]+|/>)Úoperatorz(%s)r   Útemplate_stringz`(?:[^`\\]*(?:\\.[^`\\]*)*)`ÚstringzT(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )c                 C   sV   g }t D ]$\}}| s|rd|v rq|s|dkrq|dkr!|sqd}| ||f¡ q|S )ze
    Get a tokenization rule list given the passed syntax options.

    Internal to this module.
    Újsxr0   r+   r,   )Ú_rulesÚappend)r2   Údottedr0   ÚrulesÚ
token_typeÚrule© r9   ú8/usr/lib/python3/dist-packages/babel/messages/jslexer.pyÚ	get_rules:   s   r;   c                 C   s   | j dkr
| jdv S | j dv 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-   r1   Úregexp)ÚtypeÚvalue)Útokenr9   r9   r:   Úindicates_divisionN   s   


r@   c                 C   sT  | r| d | d kr| d dv sJ dƒ‚t  d| dd… ¡} g }|j}d}	 |  d|¡}|dk r1nf|| ||… ƒ | |d  }|tv rJ|t| ƒ nH|dv rŽt | |d	 ¡}|d
ur‰| ¡ }t|ƒdkr~z|t	t
|dƒƒƒ W n	 tyx   Y nw |d }q%||| ƒ | ¡ }q%||ƒ n||ƒ |d	 }q&|t| ƒk r¥|| |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é   ú\ÚuUé   Né   é   é   Ú )Úline_join_reÚsubr4   ÚfindÚescapesÚuni_escape_reÚmatchÚgroupÚlenr   ÚintÚ
ValueErrorÚendÚjoin)r1   ÚresultÚaddÚposÚ
escape_posÚ	next_charÚescapedÚescaped_valuer9   r9   r:   Úunquote_stringW   sJ   "ÿÿ
Û'
r]   c                 c   sÞ   � d}d}d}t | ƒ}t|||d�}||k rm|D ]\}	}
|
 | |¡}|dur( nq|r4t | |¡}d}	nt | |¡}d}	|du rE|d7 }q| ¡ }|	durZt|	||ƒ}t|ƒ}|V  |t t 	|¡ƒ7 }| 
¡ }||k sdS 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   rB   )r2   r5   r0   Nr/   r<   )rQ   r;   rO   Údivision_reÚregex_rerP   r(   r@   Úline_reÚfindallrT   )Úsourcer2   r5   r0   Ú
may_dividerX   ÚlinenorT   r6   r7   r8   rO   Útoken_valuer?   r9   r9   r:   Útokenize�   s8   €ÿärf   )TTT) Ú__doc__Úcollectionsr   ÚreÚbabel._compatr   ÚsortedrQ   Ú	operatorsrM   ÚcompileÚUNICODEÚname_reÚdotted_name_rer^   ÚDOTALLr_   r`   ÚpatternrJ   rN   r(   ÚVERBOSEÚIrU   ÚmapÚescaper3   r;   r@   r]   rf   r9   r9   r9   r:   Ú<module>   sH   
û



û
ýð	8