o
    mi^                     @  s  U d Z ddlmZ ddlZddlmZ ddlmZ eg de	ddZ
d	ed
< ddddddZded< 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ZG dd de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+d,d- e
D  fd.ed/ejfd0ed1ejejB fgZd2ed3< dGd8d9ZdHd;d<ZdId>d?Z 				@dJdKdEdFZ!dS )Lz
babel.messages.jslexer
~~~~~~~~~~~~~~~~~~~~~~

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

:copyright: (c) 2013-2026 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   P/home/kim/smarthome/.venv/lib/python3.10/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)r   c                 c  s    | ]}t |V  qd S )N)reescape).0opr5   r5   r6   	<genexpr>9   s    r?   template_stringz`(?:[^`\\]*(?:\\.[^`\\]*)*)`stringzT(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )(list[tuple[str | None, re.Pattern[str]]]_rulesjsxbooldottedreturnc                 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.
    rD   r@   r7   r8   )rC   append)rD   rF   r@   rules
token_typeruler5   r5   r6   	get_rulesB   s   
rL   tokenc                 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   )r8   r9   rA   regexp)r-   r.   )rM   r5   r5   r6   indicates_divisionZ   s   


rO   r,   c                 C  s  | r| d | d kr| d dv sJ dt d| dd } g }|j}d}	 | d|}|dk r1n|| ||  | |d  }|tv rJ|t|  ns|d	v rt| |d
 }|dur| }t|dkr~z|t	t
|d W n	 tyx   Y nw |d }q%|||  | }q%|| n/|dv rt| |d
 }|dur| }|t	t
|d |d
 t| }q%|| n|| |d
 }q&|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   T\ZuU   N         xX )line_join_resubrH   findr*   uni_escape_rematchgrouplenchrr/   
ValueErrorendhex_escape_rejoin)rA   resultaddposZ
escape_posZ	next_charescapedZescaped_valuer5   r5   r6   unquote_stringc   sZ   "

2
ri   rQ   sourcer0   r/   Generator[Token, None, None]c                 c  s    d}d}t | }t|||d}||k rk|D ]\}	}
|
| |}|dur& nq|r2t| |}d}	nt| |}d}	|du rC|d7 }q| }|	durXt|	||}t|}|V  |t t	|7 }|
 }||k sdS 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   )rD   rF   r@   Nr:   rN   rQ   )r_   rL   r]   division_reregex_rer^   r+   rO   line_refindallrb   )rj   rD   rF   r@   r0   Z
may_dividerg   rb   rI   rJ   rK   r]   Ztoken_valuerM   r5   r5   r6   tokenize   s6   rp   )rD   rE   rF   rE   r@   rE   rG   rB   )rM   r+   rG   rE   )rA   r,   rG   r,   )TTTrQ   )rj   r,   rD   rE   rF   rE   r@   rE   r0   r/   rG   rk   )"__doc__
__future__r   r;   collections.abcr   typingr   sortedr_   r   r4   r*   compileUNICODEZname_reZdotted_name_rerl   DOTALLrm   rn   patternrY   r\   rc   r+   VERBOSEIrd   rC   rL   rO   ri   rp   r5   r5   r5   r6   <module>   sT    



 



	F