
    3                         S r SSKrSSKrSSKJr   SSKJr   \   " S S5      rg! \ a	    SSKJr   Nf = f! \	 a    \
r N'f = f)8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIOc                   h    \ 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
basestringr   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         'lib/third_party/argcomplete/my_shlex.py__init__shlex.__init__"   s=    h
++)H$M KIIDMDK
DHDHB $ % 


  "$& )!2#(7D 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)r/   toks     r1   
push_tokenshlex.push_tokenW   s1    ::?)DI56  %r4   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%   r8   r   r   r"   r#   r6   )r/   	newstreamnewfiles      r1   push_sourceshlex.push_source]   s     i,, +I!!4;;t{{"KL!::"T[[BCt}}FG	 r4   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#   r6   r    r/   s    r1   
pop_sourceshlex.pop_sourcel   s_    48NN4J4J4L1dmT[::1]]DKK01 2
r4   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!   rC   r#   r6   r7   
read_tokenr&   
sourcehookr?   	get_tokenr   r%   rE   )r/   r9   rawspecr>   r=   s         r1   rJ   shlex.get_tokenu   s   ==--'')CzzQ-S	9:Joo;;"$t'89+/(W$$Y8nn& $ XXo>>xx!nn& XXo ::?hhoS	12 
 ()
r4   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OU R                  S:X  Ga  U(       d	  S U l        GOX0R                  ;   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OLU R                  (       a  X0R                  ;   a
  SnX0l        GO"X0R                  ;   a  X0l	        SU l        GOX0R                   ;   a  X0l	        SU l        GOX0R                   ;   a  U R                  (       d  X0l	        X0l        GOU R"                  (       a  X0l	        SU l        GOX0l	        U R                  (       d  U R                  (       a	  U(       a  GOjGMX  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Ms  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)rR   rS   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#   r6   r    r$   r   r   r   readliner   r   r   r   
ValueErrorr   appendr.   lenr-   r!   r8   r7   )r/   quotedescapedstatenextcharresults        r1   rH   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!)J/!)J!$DJ!7!77!)J!$DJ,::%-
!)J**!)J!$DJ!)JzzdjjV t{{*zzQ@A$%;<<zz)::

h.
%(
%(
jjX%<++B,#'::L!)JJJ(*Jt{{*zzQ@A$%;<< !KK/ JJ.83K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%(
..0H4K..JJ(*J??225djj/A2E/--,,33H=00:zzQFG!$DJzzdjjV K L 
::f2F::>)DL89,-::&*D#r4   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)r/   r>   s     r1   rI   shlex.sourcehook,  su    1:amG dkk:..rww}}W7M7Mggll277??4;;#?IGgs+,,r4   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"   )r/   r   r"   s      r1   error_leadershlex.error_leader6  s,    >[[F>[[F"f%555r4   c                     U $ N rD   s    r1   __iter__shlex.__iter__>  s    r4   c                 P    U R                  5       nXR                  :X  a  [        eU$ rm   )rJ   r   StopIteration)r/   r$   s     r1   __next__shlex.__next__A  s#     HHr4   )r(   r   r#   r   r   r   r%   r   r   r-   r"   r   r'   r!   r   r&   r    r$   r   r   r.   r   )NNFFrm   )NN)__name__
__module____qualname____firstlineno____doc__r2   r:   r?   rE   rJ   rH   rI   rj   ro   rs   next__static_attributes__rn   r4   r1   r   r       sI    >9>#(3j&H@Un-6 Dr4   r   )ry   rb   r   collectionsr   r   ImportErrorior   	NameErrorstrr   rn   r4   r1   <module>r      sZ    ? 
 
 !
h h    Js   & 8 55AA