
    ƪb                     .   d Z ddlmZ ddlZ eg ded      Zddd	d
ddZ ej                  dej                        Z
 ej                  dej                        Z ej                  d      Z ej                  dej                        Z ej                  d      Z ej                  dej                   z         Z ej                  d      Z edd      Zd ej                  dej                        fd ej                  d      fd ej                  d      fd ej                  dej                  ej                  z        fdefde
fd ej                  dej(                        fd  ej                  d!ej*                        fd" ej                  d#d$j-                   eej0                  e            z        fd% ej                  d&ej                        fd' ej                  d(ej(                  ej                  z        fgZd) Zd* Zd+ Zd-d,Zy).z
    babel.messages.jslexer
    ~~~~~~~~~~~~~~~~~~~~~~

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

    :copyright: (c) 2013-2022 by the Babel Team.
    :license: BSD, see LICENSE for more details.
    )
namedtupleN)++-*%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                     g }t         D ]3  \  }}| s|rd|v r|s|dk(  r|dk(  r|sd}|j                  ||f       5 |S )ze
    Get a tokenization rule list given the passed syntax options.

    Internal to this module.
    jsxr0   r+   r,   )_rulesappend)r3   dottedr0   rules
token_typerules         8/usr/lib/python3/dist-packages/babel/messages/jslexer.py	get_rulesr;   8   se     E" 	)
Dzez&9:1B#B&Jj$'(	) L    c                 X    | 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)tokens    r:   indicates_divisionrB   L   s0     zzZ{{999::???r<   c                    | r| d   | d   k(  r| d   dv sJ d       t         j                  d| dd       } g }|j                  }d}	 | j                  d|      }|dk  rn || ||        | |dz      }|t        v r |t        |          n|dv rt
        j                  | |d	z         }|\|j                         }t        |      dk(  r"	  |t        t        |d                   |dz   } |||z          |j                         } ||       n ||       |d	z   }|t        |       k  r || |d
        dj                  |      S # t        $ r Y hw xY w)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   \uU   N          )line_join_resubr5   findescapesuni_escape_rematchgrouplenchrint
ValueErrorendjoin)r1   resultaddpos
escape_pos	next_charescapedescaped_values           r:   unquote_stringra   U   s    fQi6":-&)v2E 434EeVAb\2FF
--C
C
[[s+
>F3z"# :>*		"# $#))&*q.AG" '}%*!CM2 678 )1n I-.kkmI 	N1nK N S[F34L88F' & s   E 	EEc              #     K   d}d}d}t        |       }t        |||      }||k  r|D ]  \  }	}
|
j                  | |      }| n< |rt        j                  | |      }d}	nt        j                  | |      }d}	||dz  }`|j                         }|	t        |	||      }t        |      }| |t        t        j                  |            z  }|j                         }||k  ryyw)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   rE   )r3   r6   r0   Nr/   r>   )rT   r;   rR   division_reregex_rerS   r(   rB   line_refindallrX   )sourcer3   r6   r0   
may_divider\   linenorX   r7   r8   r9   rR   token_valuerA   s                 r:   tokenizerk      s      J
CF
f+C#foNE
) % 	JJJvs+E 	 #))&#6'
 vs3%
}qkkm!*k6:E+E2JK#gook233iik9 )s   AC)B"C)'C))TTT)__doc__collectionsr   resortedrT   	operatorsrP   compileUNICODEname_redotted_name_rerc   DOTALLrd   re   patternrM   rQ   r(   VERBOSEIrY   mapescaper4   r;   rB   ra   rk    r<   r:   <module>r|      s  	 # 	 
 D	 4dD
A
"**'
48"**Ebjj 2::>		J
"**_
%rzz%'//12

./7/0 
:2::fbjj)*	:2::i !JBJJw'(L"**ryy2HIJN#Wzrzz 	
 **  


/67Gchhs299i/H&IIJK


#F

STzrzz 	 **ryy
 " #!
.(@5p*r<   