
    Mh'                       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          Z
d	ed
<   ddddddZded<    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j        d          Z G d de          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+                     eej        e
                    z            fd, ej        d-ej                  fd. ej        d/ej        ej        z            fgZd0ed1<   dAd6Z dBd8Z!dCd:Z"dDdEd@Z#dS )Fz
    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                  .    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__     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/babel/messages/jslexer.pyr-   r-   $   s+         IIIJJJKKKKKr8   r-   z\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(
        '(?:[^'\\]*(?:\\.[^'\\]*)*)'  |
        "(?:[^"\\]*(?:\\.[^"\\]*)*)"
    )(list[tuple[str | None, re.Pattern[str]]]_rulesjsxbooldottedreturnc                    g }t           D ]9\  }}| s|rd|v r|s|dk    r|dk    r|s d}|                    ||f           :|S )ze
    Get a tokenization rule list given the passed syntax options.

    Internal to this module.
    rE   rA   r<   r=   )rD   append)rE   rG   rA   rules
token_typerules         r9   	get_rulesrN   A   s     E" 	) 	)
D 	z 	ez&9&9 	:1B#B#B&& Jj$'((((Lr8   tokenc                <    | 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>   rB   regexp)r/   r0   )rO   s    r9   indicates_divisionrR   U   s-     zZ{999:???r8   r.   c                v   | r| d         | d         k    r
| d         dv s
J d            t                               d| dd                   } g }|j        }d}	 |                     d|          }|dk     rn || ||                    | |dz            }|t          v r |t          |                    nD|d	v rt
                              | |d
z             }||                                }t          |          dk    r=	  |t          t          |d                               |dz   }# t          $ r Y nw xY w |||z              |                                }
 ||           n|dv r}t                              | |d
z             }|Q|                                } |t          t          |d                               |d
z   t          |          z   } ||           n ||           |d
z   }|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\uU   N         xX )line_join_resubrJ   findr+   uni_escape_rematchgrouplenchrr1   
ValueErrorendhex_escape_rejoin)rB   resultaddpos
escape_pos	next_charescapedescaped_values           r9   unquote_stringrq   ^   s     4fQi6":--&)v2E2E2E3 3F2E2EeVAbD\22FF
-C
C0[[s++
>>F3z>"### :>*	C	"#### $#))&*q.AAG" '}%%**!CM2 6 677888 )1n 	 &   
 I-...kkmmI $#))&*q.AAG" 'CM2..//000 1ns='9'99I C	NNN1na0d S[[F344L776??s   &D- -
D:9D:rU   sourcer2   r1   Generator[Token, None, None]c              #  .  K   d}d}t          |           }t          |||          }||k     r|D ]\  }	}
|
                    | |          }| nF |rt                              | |          }d}	nt                              | |          }d}	||dz  }m|                                }|	$t          |	||          }t          |          }|V  |t          t          	                    |                    z  }|
                                }||k     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   )rE   rG   rA   Nr@   rQ   rU   )rd   rN   rb   division_reregex_rerc   r-   rR   line_refindallrg   )rr   rE   rG   rA   r2   
may_dividerl   rg   rK   rL   rM   rb   token_valuerO   s                 r9   tokenizer{      s8      J
C
f++C#foNNNE
)) % 	 	JJJvs++E  !  &#))&#66'

 vs33%
}qkkmm!*k6::E+E22JKKK#gook22333iikk9 ))))))r8   )rE   rF   rG   rF   rA   rF   rH   rC   )rO   r-   rH   rF   )rB   r.   rH   r.   )TTTrU   )rr   r.   rE   rF   rG   rF   rA   rF   r2   r1   rH   rs   )$__doc__
__future__r   recollections.abcr   typingr   sortedrd   r    r6   r+   compileUNICODEname_redotted_name_reru   DOTALLrv   rw   patternr^   ra   rh   r-   VERBOSEIri   mapescaperD   rN   rR   rq   r{   r7   r8   r9   <module>r      s*  	 	 	 # " " " " " 				 % % % % % %      v   
 D  	     !%4dDQQ Q Q Q Q
"*'
4
48"*EEbj  2:>	JJ
"*_
%
%rz%'/122
.//
.//    J    
:2:fbj))*	:2:i  !JBJw''(L"*ry2HIIJN#Wzrz 	
 *   

/667Gchhss29i/H/H&I&IIJJK

#F
SSTzrz 	 *ry
 " " #!4    .   (@ @ @ @@ @ @ @F+ + + + + + +r8   