
    B/g2                     P    S r SSKrSSKrSSKJr  SSKJr  SSKJr   " S S5      r	g)8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIO)Optionalc                   d    \ rS rSrSrSS jrS rSS jrS rS r	S	 r
S
 rSS jrS rS r\rSrg)shlex   r   Nc                    [        U[        5      (       a  [        U5      nUb  Xl        X l        O[
        R                  U l        S U l        X0l        U(       a  S U l        OSU l        SU l	        SU l
        SU l        SU l        SU l        SU l        SU l        S	U l        [#        5       U l        S
U l        SU l        SU l        [#        5       U l        S U l        U(       d  SnOUSL a  SnX@l        U(       ar  [#        5       U l        U =R                  S-  sl
        U R                  R5                  [6        R9                  U5      5      nU R                  R;                  U5      U l
        S U l        SU l        g )N #?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_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last_wordbreak_pos
wordbreaks)selfr   r   r   r(   ts         =/usr/lib/python3/dist-packages/argcomplete/packages/_shlex.py__init__shlex.__init__   s8   h$$)H$M KIIDMDK
DHDHZ
 $ % $'
$w

 %  "$& )!2*/'D NNi'N((7H)IJA!^^55a8DN #'    c                     U R                   S:  a  [        S[        U5      -   5        U R                  R	                  U5        g)z:Push a token onto the stack popped by the get_token methodr   zshlex: pushing token N)r$   printreprr"   
appendleft)r0   toks     r2   
push_tokenshlex.push_tokenJ   s1    ::?)DI56  %r5   c                 r   [        U[        5      (       a  [        U5      nU R                  R	                  U R
                  U R                  U R                  45        X l        Xl        SU l        U R                  (       a7  Ub  [        SU R
                  < 35        g[        SU R                  < 35        gg)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&   r9   r   r   r#   r$   r7   )r0   	newstreamnewfiles      r2   push_sourceshlex.push_sourceP   s     i%% +I!!4;;t{{"KL!::"T[[BCt}}FG	 r5   c                 
   U R                   R                  5         U R                  R                  5       u  U l        U l         U l        U R                  (       a$  [        SU R                   U R
                  4-  5        SU l        g)zPop the input source stack.zshlex: popping to %s, line %dr   N)	r   closer&   popleftr   r#   r$   r7   r!   r0   s    r2   
pop_sourceshlex.pop_source_   sZ    48NN4J4J4L1dmT[::1T]]DKK4PPQ
r5   c                    U R                   (       aC  U R                   R                  5       nU R                  S:  a  [        S[	        U5      -   5        U$ U R                  5       nU R                  bk  X R                  :X  a\  U R                  U R                  5       5      nU(       a  Uu  pEU R                  XT5        U R                  5       nX R                  :X  a  M\  X R                  :X  aN  U R                  (       d  U R                  $ U R                  5         U R                  5       nX R                  :X  a  MN  U R                  S:  a3  X R                  :w  a  [        S[	        U5      -   5        U$ [        S5        U$ )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$   r7   r8   
read_tokenr'   
sourcehookr@   	get_tokenr   r&   rF   )r0   r:   rawspecr?   r>   s         r2   rK   shlex.get_tokeng   s   ==--'')CzzQ-S	9:Joo;;"$t'89+/(W$$Y8nn& $ XXo>>xx!nn& XXo ::?hhoS	12 
 ()
r5   c                    SnSn U R                   (       a,  U R                  (       a  U R                  R                  5       nOU R                  R	                  S5      nUS:X  a  U =R
                  S-  sl        U R                  S:  a  [        SU R                  < SU< 35        U R                  c	  S	U l	        GO4U R                  S:X  Ga  U(       d	  S U l        GOX0R                  ;   aI  U R                  S
:  a  [        S5        U R                  (       d  U R                  (       a	  U(       a  GOGM0  X0R                  ;   a1  U R                  R                  5         U =R
                  S-  sl        GOxU R                  (       a  X0R                  ;   a
  SnX0l        GONX0R                  ;   a  X0l	        SU l        GO0X0R                   ;   a  X0l	        SU l        GOX0R                   ;   a  U R                  (       d  X0l	        X0l        GOU R"                  (       a;  X0l	        SU l        X0R$                  ;   a  ['        U R                  5      S-
  U l        GOX0l	        U R                  (       d  U R                  (       a	  U(       a  GOjGM  U R                  U R                   ;   a  SnU(       d&  U R                  S
:  a  [        S5        [+        S5      eX0R                  :X  a8  U R                  (       d  U =R                  U-  sl	        SU l        GOSU l        GOU R                  (       a=  X0R                  ;   a.  U R                  U R,                  ;   a  U R                  nX0l        GOU =R                  U-  sl	        GOoU R                  U R                  ;   a  U(       d&  U R                  S
:  a  [        S5        [+        S5      eX R                   ;   a3  X0R                  :w  a$  X2:w  a  U =R                  U R                  -  sl	        U =R                  U-  sl	        X l        GOU R                  S;   Ga  U(       d	  S U l        GOX0R                  ;   aP  U R                  S
:  a  [        S5        SU l        U R                  (       d  U R                  (       a	  U(       a  GOOGM  X0R                  ;   aw  U R                  R                  5         U =R
                  S-  sl        U R                  (       a5  SU l        U R                  (       d  U R                  (       a	  U(       a  GOGM#  GOU R                  (       a  X0R                   ;   a  X0l        GOU R                  (       a  X0R                  ;   a
  SnX0l        GOqU R                  S:X  aY  X0R                   ;   a  U =R                  U-  sl	        GO;X0R                  ;  a  U R                  R/                  U5        SU l        GOX0R                  ;   d   X0R                   ;   d  U R"                  (       aB  U =R                  U-  sl	        X0R$                  ;   a  ['        U R                  5      S-
  U l        OU R                   (       a  U R                  R/                  U5        OU R0                  R3                  U5        U R                  S
:  a  [        S5        SU l        U R                  (       d  U R                  (       a  U(       a  OGM  GM  U R                  nS	U l	        U R                  (       a  U(       d  US	:X  a  S nU R                  S:  a*  U(       a  [        S[5        U5      -   5        O[        S5        U R                  S:X  a  S U l        U$ )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)rS   rT   z%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)r(   r)   popr   readr#   r$   r7   r!   r%   r   r   r   readliner   r   r   r   r/   lenr.   
ValueErrorr    appendr"   r9   r8   )r0   quotedescapedstatenextcharresults        r2   rI   shlex.read_token   s   %%$*>*>//335==--a04q zzQ$**hWXzz!
s"!%DJ0zzQKLzzdjjV 0MM**,KK1$KZZH$;#&L!)J/!)J!$DJ!7!77!)J!$DJ,::%-
!)J**!)J!$DJ??225djj/A2E/!)JzzdjjV t{{*zzQ@A$%;<<zz)::

h.
%(
%(
ZZH$;

dN`N`@`#'::L!)JJJ(*Jt{{*zzQ@A$%;<<  ;;.8zz3IhNfJJ$**,J

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

h.
#??: 0077A%(
/8{{3JdNcNcJJ(*J??225djj/A2E/--,,33H=00:zzQFG!$DJzzdjjV I J !%


::f2F::>)DL89,-::&*D#r5   c                 N   US   S:X  a  USS n[        U R                  [        5      (       ak  [        R                  R                  U5      (       dG  [        R                  R                  [        R                  R                  U R                  5      U5      nU[        US5      4$ )z(Hook called on a filename to be sourced.r   r   r   r)	r   r   r   ospathisabsjoindirnameopen)r0   r?   s     r2   rJ   shlex.sourcehook  su    1:amG dkk3''g0F0Fggll277??4;;#?IGgs+,,r5   c                 J    Uc  U R                   nUc  U R                  nSX4-  $ )z<Emit a C-compiler-like, Emacs-friendly error-message leader.z"%s", line %d: )r   r#   )r0   r   r#   s      r2   error_leadershlex.error_leader'  s,    >[[F>[[F"f%555r5   c                     U $ N rE   s    r2   __iter__shlex.__iter__/  s    r5   c                 P    U R                  5       nXR                  :X  a  [        eU$ rn   )rK   r   StopIteration)r0   r%   s     r2   __next__shlex.__next__2  s#     HHr5   )r)   r   r$   r   r   r    r&   r   r   r.   r#   r   r(   r"   r   r'   r!   r%   r   r   r/   r   )NNFFrn   )NN)__name__
__module____qualname____firstlineno____doc__r3   r;   r@   rF   rK   rI   rJ   rk   rp   rt   next__static_attributes__ro   r5   r2   r   r      sC    >1f&H@Tl-6 Dr5   r   )
rz   rc   r   collectionsr   ior   typingr   r   ro   r5   r2   <module>r      s'    ? 
 
   e er5   