grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|j½4ã@sêdZddlZddlZddlZddlmZddlmZgd¢ZGdd„dƒZ dd d „Z d d „Z e  dej ¡jZdd„Zdd„ZedkrseejƒdkrPee ƒƒdSejdZeeƒ�Zee eeƒƒWdƒdS1slwYdSdS)ú8A lexical analyzer class for simple shell-like syntaxes.éN)Údeque)ÚStringIO)ÚshlexÚsplitÚquoteÚjoinc@sveZdZdZ  ddd„Zedd„ƒZdd „Zdd d „Zd d „Z dd„Z dd„Z dd„Z ddd„Z dd„Zdd„ZdS)rrNFcCst|tƒr t|ƒ}|dur||_||_ntj|_d|_||_|r$d|_nd|_d|_ d|_ |jr7|j d7_ d|_ d|_ d|_ d|_d |_d |_tƒ|_d |_d |_d|_tƒ|_d|_|sbd}n|d urhd}||_|rŠtƒ|_|j d7_ |j  t |¡¡}|j  |¡|_ dSdS)NÚú#Z?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÃ�ÂÃÄÅÆÇÈÉÊËÌÃ�ÃŽÃ�Ã�ÑÒÓÔÕÖØÙÚÛÜÃ�Þz Fz'"ú\ú"ú érTz();<>|&z~-./*?=)Ú isinstanceÚstrrÚinstreamÚinfileÚsysÚstdinÚposixÚeofÚ commentersÚ wordcharsÚ whitespaceÚwhitespace_splitÚquotesÚescapeÚ escapedquotesÚstaterÚpushbackÚlinenoÚdebugÚtokenÚ filestackÚsourceÚ_punctuation_charsÚ_pushback_charsÚ maketransÚdictÚfromkeysÚ translate)ÚselfrrrÚpunctuation_charsÚt©r.ú,/opt/alt/python310/lib64/python3.10/shlex.pyÚ__init__sL ùzshlex.__init__cCs|jS©N)r%©r+r.r.r/r,Dszshlex.punctuation_charscCs*|jdkr tdt|ƒƒ|j |¡dS)z:Push a token onto the stack popped by the get_token methodrzshlex: pushing token N)r!ÚprintÚreprrÚ appendleft)r+Útokr.r.r/Ú push_tokenHs zshlex.push_tokencCsvt|tƒr t|ƒ}|j |j|j|jf¡||_||_d|_|jr9|dur/t d|jfƒdSt d|jfƒdSdS)z9Push an input source onto the lexer's input source stack.rNzshlex: pushing to file %szshlex: pushing to stream %s) rrrr#r5rrr r!r3)r+Ú newstreamÚnewfiler.r.r/Ú push_sourceNs üzshlex.push_sourcecCsD|j ¡|j ¡\|_|_|_|jrtd|j|jfƒd|_dS)zPop the input source stack.zshlex: popping to %s, line %dr N) rÚcloser#Úpopleftrr r!r3rr2r.r.r/Ú pop_source\s  ÿ zshlex.pop_sourcecCsæ|jr|j ¡}|jdkrtdt|ƒƒ|S| ¡}|jdurA||jkrA| | ¡¡}|r8|\}}| ||¡|  ¡}||jks%||j krY|j sL|j S|  ¡|  ¡}||j ksF|jdkrq||j krmtdt|ƒƒ|Stdƒ|S)zBGet a token from the input stream (or from stack if it's nonempty)rzshlex: popping token Nz shlex: token=zshlex: token=EOF) rr<r!r3r4Ú read_tokenr$Ú sourcehookr:Ú get_tokenrr#r=)r+r6ÚrawÚspecr9r8r.r.r/r@es4      û  û  ÿzshlex.get_tokencCsÀd}d} |jr|jr|j ¡}n|j d¡}|dkr"|jd7_|jdkr0td|j|fƒ|jdur:d|_ �nù|jdkrÄ|sFd|_�ní||j vr_|jd krTtd ƒ|j s\|j r^|r^�nÕq||j vrr|j  ¡|jd7_�nÀ|j r�||jvr�d }||_�n±||jvrŽ||_ d |_�n¤||jvr›||_ d |_�n—||jvr«|j s¦||_ ||_�n‡|jr¶||_ d |_�n|||_ |j sÁ|j rÃ|rÃ�npq|j|jv�rd}|sÜ|jd krØtd ƒtdƒ‚||jkrõ|j sð|j |7_ d|_�nCd |_�n=|j �r||jv�r|j|jv�r|j}||_�n$|j |7_ �n|j|jv�rS|�s/|jd k�r+tdƒtdƒ‚||jv�rH||jk�rH||k�rH|j |j7_ |j |7_ ||_nß|jdv�r2|�s`d|_nÓ||j v�r€|jd k�rptdƒd|_|j �s~|j �r|�rn´q||j v�r§|j  ¡|jd7_|j �r¦d|_|j �s¤|j �r¥|�r¥nŽqn‹|jd k�rË||jv�r»|j |7_ nw||j v�rÇ|j |¡d|_nh|j �rÙ||jv�rÙ||_nY|j �ré||jv�réd }||_nI||jv�sÿ||jv�sÿ|j�r||jv�r|j |7_ n+|j�r|j |¡n|j |¡|jd k�r"tdƒd|_|j �s0|j �r1|�r1nqq|j }d|_ |j �rG|�sG|dk�rGd}|jdk�r^|�rZtdt|ƒƒ|Stdƒ|S)NFr TrÚ éz&shlex: in state %r I see character: %rr éz+shlex: I see whitespace in whitespace stateÚaÚcz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped character)rFrGz%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)r,r&ÚpoprÚreadr r!r3rr"rrrÚreadlinerrrrÚ ValueErrorrÚappendrr5r4)r+ZquotedZ escapedstateZnextcharÚresultr.r.r/r>…s    ÿ                 ÿ        û    ÿ   �ü ÿzshlex.read_tokencCsV|ddkr |dd…}t|jtƒr$tj |¡s$tj tj |j¡|¡}|t|dƒfS)z(Hook called on a filename to be sourced.rr réÿÿÿÿÚr) rrrÚosÚpathÚisabsrÚdirnameÚopen)r+r9r.r.r/r?s  zshlex.sourcehookcCs(|dur|j}|dur|j}d||fS)zr?rUrVrXr.r.r.r/rs" ÿ/      rFTcCsD|durddl}|jdtdd�t||d�}d|_|sd|_t|ƒS) z-Split the string *s* using shell-like syntax.Nrz4Passing None for 's' to shlex.split() is deprecated.rE)Ú stacklevel)rTr )ÚwarningsÚwarnÚDeprecationWarningrrrÚlist)ÚsZcommentsrr_Zlexr.r.r/r1sÿ rcCsd dd„|Dƒ¡S)z3Return a shell-escaped string from *split_command*.r css�|]}t|ƒVqdSr1)r)Ú.0Úargr.r.r/Ú @s€zjoin..)r)Z split_commandr.r.r/r>srz[^\w@%+=:,./-]cCs,|sdSt|ƒdur |Sd| dd¡dS)z1Return a shell-escaped version of the string *s*.z''Nú'z'"'"')Ú _find_unsafeÚreplace)rcr.r.r/rEs  rcCs$ | ¡}|s dStdt|ƒƒq)NrzToken: )r@r3r4)ZlexerZttr.r.r/Ú _print_tokensQs ürjÚ__main__r)FT)r\rPÚrerÚ collectionsrÚiorÚ__all__rrrÚcompileÚASCIIÚsearchrhrrjrYÚlenÚargvÚfnrTÚfr.r.r.r/Ús.        "ÿû