U
    \Sh'                  ,   @  s4  U d Z ddlmZ ddlZddlm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/d0g+e	d1d2Z
d3ed4< d5d6d7d8d9d:Zd;ed<< ed=ejZed>ejZed?Zed@ejZedAZedBej ZedCZedDZG dEdF dFeZdedGejfdedHfdIedJfdKedLejejB fdMefdNefdOedPejfdQedRejfdSedTdeeje
 fdUedVejfdWedXejejB fgZdYedZ< d[d[d[dYd\d]d^Z dFd[d_d`daZ!dbdbdcdddeZ"dldbd[d[d[dgdhdidjdkZ#dS )mz
    babel.messages.jslexer
    ~~~~~~~~~~~~~~~~~~~~~~

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

    :copyright: (c) 2013-2025 by the Babel Team.
    :license: BSD, see LICENSE for more details.
    )annotationsN)	Generator)
NamedTuple+-*%z!=z==<>z<=z>==z+=z-=z*=z%=z<<z>>z>>>z<<=z>>=z>>>=&z&=|z|=z&&z||^z^=()[]{}!--++~,;.:T)keyreversez	list[str]	operators
	)bfnrtzdict[str, str]escapesz[\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}z[a-fA-F0-9]{1,2}c                   @  s&   e Zd ZU ded< ded< ded< dS )TokenstrtypevalueintlinenoN)__name__
__module____qualname____annotations__ r5   r5   I/root/rtd-docs/venv/lib/python3.8/site-packages/babel/messages/jslexer.pyr+   $   s   
r+   z\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(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )z(list[tuple[str | None, re.Pattern[str]]]_rulesbool)jsxdottedr;   returnc                 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.
    r?   r;   r7   r8   )r=   append)r?   r@   r;   rules
token_typeruler5   r5   r6   	get_rulesA   s    rF   )tokenrA   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   )r8   r9   r<   regexp)r-   r.   )rG   r5   r5   r6   indicates_divisionU   s    

rI   r,   )r<   rA   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q|| ||  | |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|| nd|dkrt| |d	 }|d
k	rx| }|t
t|d |d	 t	| }qJn|| n|| |d	 }qJ|t	| k r|| |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         xX )AssertionErrorline_join_resubrB   findr*   uni_escape_rematchgrouplenchrr/   
ValueErrorendhex_escape_rejoin)r<   resultaddposZ
escape_posZ	next_charescapedZescaped_valuer5   r5   r6   unquote_string^   sT    "






rd   rK   r/   zGenerator[Token, None, None])sourcer?   r@   r;   r0   rA   c                 c  s   d}d}t | }t|||d}||k r|D ] \}	}
|
| |}|dk	r* qq*|rbt| |}d}	nt| |}d}	|dkr|d7 }q| }|	dk	rt|	||}t|}|V  |t t	|7 }|
 }qdS )aU  
    Tokenize JavaScript/JSX source.  Returns a generator of tokens.

    :param source: The JavaScript source to tokenize.
    :param jsx: Enable (limited) JSX parsing.
    :param dotted: Read dotted names as single name token.
    :param template_string: Support ES6 template strings
    :param lineno: starting line number (optional)
    Fr   )r?   r@   r;   Nr:   rH   rK   )rZ   rF   rX   division_reregex_rerY   r+   rI   line_refindallr]   )re   r?   r@   r;   r0   Z
may_dividerb   r]   rC   rD   rE   rX   Ztoken_valuerG   r5   r5   r6   tokenize   s0    
rj   )TTTrK   )$__doc__
__future__r   recollections.abcr   typingr   sortedrZ   r   r4   r*   compileUNICODEZname_reZdotted_name_rerf   DOTALLrg   rh   patternrT   rW   r^   r+   VERBOSEIr_   mapescaper=   rF   rI   rd   rj   r5   r5   r5   r6   <module>   s   
                                        




	C