
    Rh)4                        d Z ddlZddlZddlZddlmZ ddlmZ g dZ G d d      Z	ddZ
d	 Z ej                  d
ej                        j                  Zd Zd Zedk(  rS eej(                        dk(  r e e	              yej(                  d   Z ee      5 Z e e	ee             ddd       yy# 1 sw Y   yxY w)8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIO)shlexsplitquotejoinc                   f    e Zd ZdZ	 	 ddZed        Zd ZddZd Z	d Z
d	 Zd
 ZddZd Zd Zy)r   r   Nc                    t        |t              rt        |      }||| _        || _        nt
        j                  | _        d | _        || _        |rd | _        nd| _        d| _	        d| _
        | j                  r| xj                  dz  c_
        d| _        d| _        d| _        d| _        d	| _        d
| _        t#               | _        d| _        d| _        d| _        t#               | _        d | _        |sd}n|du rd}|| _        |rst#               | _        | xj                  dz  c_
        | j                  j5                  t6        j9                  |            }| j                  j;                  |      | _
        y y )N #?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|   ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞz 	
Fz'"\"    r   Tz();<>|&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)selfr   r   r   punctuation_charsts         /usr/lib/python3.12/shlex.py__init__zshlex.__init__   sN   h$)H$DM DKIIDMDK
DHDHB::NN  ^ _N# % 


  "$& )"3#(7D NNi'N((7H)IJA!^^55a8DN     c                     | j                   S N)r)   r/   s    r2   r0   zshlex.punctuation_charsD   s    &&&r4   c                     | j                   dk\  rt        dt        |      z          | j                  j	                  |       y)z:Push a token onto the stack popped by the get_token methodr   zshlex: pushing token N)r%   printreprr#   
appendleft)r/   toks     r2   
push_tokenzshlex.push_tokenH   s1    ::?)DI56  %r4   c                 \   t        |t              rt        |      }| j                  j	                  | j
                  | j                  | j                  f       || _        || _        d| _        | j                  r4|t        d| j
                         yt        d| j                         yy)z9Push an input source onto the lexer's input source stack.r   Nzshlex: pushing to file zshlex: pushing to stream )
r   r   r   r'   r;   r   r   r$   r%   r9   )r/   	newstreamnewfiles      r2   push_sourcezshlex.push_sourceN   s    i% +I!!4;;t{{"KL!::"T[[BCt}}FG	 r4   c                     | j                   j                          | j                  j                         \  | _        | _         | _        | j                  r$t        d| j                   | j
                  fz         d| _        y)zPop the input source stack.zshlex: popping to %s, line %dr   N)	r   closer'   popleftr   r$   r%   r9   r"   r7   s    r2   
pop_sourcezshlex.pop_source\   s_    48NN4J4J4L1dmT[::1]]DKK01 2
r4   c                    | j                   rB| j                   j                         }| j                  dk\  rt        dt	        |      z          |S | j                         }| j                  g|| j                  k(  rX| j                  | j                               }|r|\  }}| j                  ||       | j                         }|| j                  k(  rX|| j                  k(  rH| j                  s| j                  S | j                          | j                         }|| j                  k(  rH| j                  dk\  r3|| j                  k7  rt        dt	        |      z          |S t        d       |S )zBGet a token from the input stream (or from stack if it's nonempty)r   zshlex: popping token zshlex: token=zshlex: token=EOF)r#   rD   r%   r9   r:   
read_tokenr(   
sourcehookrA   	get_tokenr   r'   rE   )r/   r<   rawspecr@   r?   s         r2   rI   zshlex.get_tokene   s+   ==--'')CzzQ-S	9:Joo;;"$t'89+/(Wi$$Y8nn& $ TXXo>>xx!nn& TXXo ::?dhhoS	12 
 ()
r4   c                    d}d}	 | j                   r'| j                  r| j                  j                         }n| j                  j	                  d      }|dk(  r| xj
                  dz  c_        | j                  dk\  rt        d| j                  d|       | j                  	d	| _	        n<| j                  dk(  r\|s	d | _        n!|| j                  v r8| j                  d
k\  rt        d       | j                  s| j                  r|rnݐ	|| j                  v r1| j                  j                          | xj
                  dz  c_        n| j                  r|| j                  v rd}|| _        nu|| j                  v r|| _	        d| _        nW|| j                   v r|| _	        d| _        n9|| j                   v r| j                  s|| _	        || _        n| j"                  r|| _	        d| _        n|| _	        | j                  s| j                  r|rnҐ| j                  | j                   v rd}|s%| j                  d
k\  rt        d       t%        d      || j                  k(  r3| j                  s| xj                  |z  c_	        d| _        nVd| _        nK| j                  r;|| j                  v r-| j                  | j&                  v r| j                  }|| _        n| xj                  |z  c_	        n| j                  | j                  v r|s%| j                  d
k\  rt        d       t%        d      || j                   v r3|| j                  k7  r$||k7  r| xj                  | j                  z  c_	        | xj                  |z  c_	        || _        nO| j                  dv r@|s	d | _        n7|| j                  v r?| j                  d
k\  rt        d       d| _        | j                  s| j                  r|rn|| j                  v ra| j                  j                          | xj
                  dz  c_        | j                  rd| _        | j                  s| j                  r|rn}i| j                  dk(  rW|| j                   v r| xj                  |z  c_	        nE|| j                  vr| j                  j)                  |       d| _        n| j                  r|| j                   v r|| _        n| j                  r|| j                  v r
d}|| _        n|| j                  v s(|| j                   v s| j"                  r$|| j                   vr| xj                  |z  c_	        n| j                   r| j                  j)                  |       n| j*                  j-                  |       | j                  d
k\  rt        d       d| _        | j                  s| j                  r|rn| j                  }d	| _	        | j                  r	|s|d	k(  rd }| j                  dkD  r&|rt        dt/        |      z          |S t        d       |S )NFr   Tr   
   zshlex: in state z I see character: r      z+shlex: I see whitespace in whitespace stateacz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped character)rP   rQ   z%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)r0   r*   popr   readr$   r%   r9   r"   r&   r   r   r   readliner    r   r   r   
ValueErrorr!   appendr#   r;   r:   )r/   quotedescapedstatenextcharresults        r2   rG   zshlex.read_token   s	   %%$*>*>//335==--a04q zzQ$**BJL Mzz!
s"!%DJ0zzQKLzzdjjV 0MM**,KK1$KZZH$;#&L!)DJ/!)DJ!$DJ!7!77!)DJ!$DJ,::%-
!)DJ**!)DJ!$DJ!)DJzzdjjV t{{*zzQ@A$%;<<tzz)::

h.
%(
%(
jjX%<++B,#'::L!)DJJJ(*Jt{{*zzQ@A$%;<< !DKK/ DJJ.8|3KJJ$**,J

h&
)
z)!%DJ0zzQEF!$DJzzdjjV 0MM**,KK1$Kzz%(
::$**!$ZZ3&4#9#99

h.
#4??: 0077A%(
ZZH$;!)DJZZH$;#&L!)DJ$..0H4K//"$*@*@@JJ(*J--,,33H=00:zzQFG!$DJzzdjjV G H 
::f2F::>)DL89  ,-r4   c                 8   |d   dk(  r|dd }t        | j                  t              rft        j                  j                  |      sGt        j                  j                  t        j                  j                  | j                        |      }|t        |d      fS )z(Hook called on a filename to be sourced.r   r   r   r)	r   r   r   ospathisabsr	   dirnameopen)r/   r@   s     r2   rH   zshlex.sourcehook  sm    1:amGdkk3'g0Fggll277??4;;#?IGgs+,,r4   c                 H    || j                   }|| j                  }d||fz  S )z<Emit a C-compiler-like, Emacs-friendly error-message leader.z"%s", line %d: )r   r$   )r/   r   r$   s      r2   error_leaderzshlex.error_leader   s.    >[[F>[[F"ff%555r4   c                     | S r6    r7   s    r2   __iter__zshlex.__iter__(  s    r4   c                 P    | j                         }|| j                  k(  rt        |S r6   )rI   r   StopIteration)r/   r&   s     r2   __next__zshlex.__next__+  s%     DHHr4   )NNFFr6   )NN)__name__
__module____qualname____doc__r3   propertyr0   r=   rA   rE   rI   rG   rH   rd   rg   rj   rf   r4   r2   r   r      sV    >9>#(-9^ ' '&H@Pd-6r4   r   c                 l    | t        d      t        | |      }d|_        |sd|_        t	        |      S )z-Split the string *s* using shell-like syntax.zs argument must not be None)r   Tr   )rU   r   r   r   list)scommentsr   lexs       r2   r   r   1  s;    y677

CC9r4   c                 2    dj                  d | D              S )z3Return a shell-escaped string from *split_command*.r   c              3   2   K   | ]  }t        |        y wr6   )r   ).0args     r2   	<genexpr>zjoin.<locals>.<genexpr>>  s     83E#J8s   )r	   )split_commands    r2   r	   r	   <  s    888-888r4   z[^\w@%+=:,./-]c                 R    | syt        |       | S d| j                  dd      z   dz   S )z1Return a shell-escaped version of the string *s*.z'''z'"'"')_find_unsafereplace)rr   s    r2   r   r   C  s4    A 3	**S00r4   c                 ~    | j                         x}r+t        dt        |      z          | j                         x}r*y y )NzToken: )rI   r9   r:   )lexertts     r2   _print_tokensr   O  s9    !
!"
!i$r("# !
!"
!r4   __main__r   )FT)rn   r^   rer   collectionsr   ior   __all__r   r   r	   compileASCIIsearchr}   r   r   rk   lenargvfnrb   frf   r4   r2   <module>r      s    > 
 	 
  
-\ \|9
 rzz+RXX6==	1$ z
388}egXXa["X 	(%2,'	( 	( 
	( 	(s   B66B?