
    Xh'                       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j4                        fd' ej                  d(ej6                        fd) ej                  d*d+j9                   eej<                  e
            z        fd, ej                  d-ej                        fd. ej                  d/ej4                  ej$                  z        fgZd0ed1<   d6d2Z d7d3Z!d8d4Z"d9d:d5Z#y);z
    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<   y)TokenstrtypevalueintlinenoN)__name__
__module____qualname____annotations__     J/var/www/html/myenv/lib/python3.12/site-packages/babel/messages/jslexer.pyr-   r-   $   s    
IJKr8   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]]]_rulesc                    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.
    jsxrA   r<   r=   )rD   append)rF   dottedrA   rules
token_typerules         r9   	get_rulesrL   A   se     E" 	)
Dzez&9:1B#B&Jj$'(	) Lr8   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>   rB   regexp)r/   r0   )tokens    r9   indicates_divisionrP   U   s0     zzZ{{999::???r8   c                x   | 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                         } ||       nn|dv rbt        j                  | |d	z         }|>|j                         } |t        t        |d                   |d	z   t        |      z   }& ||       n ||       |d	z   }=|t        |       k  r || |d
        dj                  |      S # t        $ r Y w 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         xX )line_join_resubrG   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_stringro   ^   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 $#))&*q.AG" 'CM2./0 1ns='99I 	N1na d S[F34L776?= & s   F- -	F98F9c              #    K   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)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   )rF   rH   rA   Nr@   rN   rS   )rb   rL   r`   division_reregex_rera   r-   rP   line_refindallre   )sourcerF   rH   rA   r2   
may_dividerj   re   rI   rJ   rK   r`   token_valuerO   s                 r9   tokenizerx      s      J
C
f+C#foNE
) % 	JJJvs+E 	 #))&#6'
 vs3%
}qkkm!*k6:E+E2JK#gook233iik9 )s   ?C'B"C'%C')rF   boolrH   ry   rA   ry   returnrC   )rO   r-   rz   ry   )rB   r.   rz   r.   )TTTrS   )ru   r.   rF   ry   rH   ry   rA   ry   r2   r1   rz   zGenerator[Token, None, None])$__doc__
__future__r   recollections.abcr   typingr   sortedrb   r    r6   r+   compileUNICODEname_redotted_name_rerq   DOTALLrr   rs   patternr\   r_   rf   r-   VERBOSEIrg   mapescaperD   rL   rP   ro   rx   r7   r8   r9   <module>r      sB  	 # 	 %  
 D	9  !%4dDQ Q
"**'
48"**Ebjj 2::>		J
"**_
%rzz%'//12

./

./J  
: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
 " #!40 .(@@F+r8   