
                             S r SSKJr  SSKJr  SSKJr  SSKrSrSrSrS	r	 " S
 S\R                  5      rS r " S S\5      rS rS rg)zgcloud shell completion.    )absolute_import)division)unicode_literalsN\)"');&|()<>c                   0    \ rS rSrSrSrSrSrSrSr	Sr
S	rg
)ShellTokenType                         N)__name__
__module____qualname____firstlineno__ARGFLAG
TERMINATORIOREDIRECTIONFILETRAILING_BACKSLASH__static_attributes__r       3lib/googlecloudsdk/command_lib/interactive/lexer.pyr   r      s&    	#	
$*"+	
$r&   r   c                     U $ )zProcesses a quoted shell argument from the lexer.

Args:
  s: the raw quoted string (ex: "\"foo\" \\ 'bar'")

Returns:
  An argument as would be passed from a shell to a process it forks
  (ex: "foo" \ 'bar').

r   )ss    r'   UnquoteShellr*   )   s	     
(r&   c                   N    \ rS rSrSr\R                  SS4S jrS rS r	S r
Srg)	
ShellToken8   zShell token info.

Attributes:
  value: The token string with quotes and escapes preserved.
  lex: Instance of ShellTokenType
  start: the index of the first char of the raw value
  end: the index directly after the last char of the raw value
Nc                 4    Xl         X l        X0l        X@l        g N)valuelexstartend)selfr0   r1   r2   r3   s        r'   __init__ShellToken.__init__B   s    JHJHr&   c                     U R                   [        R                  L d  U R                   [        R                  L a  [	        U R
                  5      $ U R
                  $ r/   )r1   r   r   r   r*   r0   r4   s    r'   UnquotedValueShellToken.UnquotedValueH   s>    xx>%%%^5H5H)H$**%%ZZr&   c                 j    [        XR                  5      (       a  U R                  UR                  :H  $ g)zEquality based on properties.F)
isinstance	__class____dict__)r4   others     r'   __eq__ShellToken.__eq__N   s'    %((]]enn,,r&   c                 z    SR                  U R                  U R                  U R                  U R                  5      $ )zImprove debugging during tests.zShellToken({}, {}, {}, {}))formatr0   r1   r2   r3   r8   s    r'   __repr__ShellToken.__repr__T   s0    '..tzz488/3zz488E Er&   )r3   r1   r2   r0   )r   r   r   r   __doc__r   r   r5   r9   r@   rD   r%   r   r&   r'   r,   r,   8   s+     !/ 2 2$D Er&   r,   c                 D   U n U [        U5      :  a%  X:  a  [        S[        R                  U S-
  U 5      $ gX   nUR	                  5       (       d  OU S-  n MU  U n[        U5      S-
  U :X  a*  X   S:X  a"  U S-  n [        XU  [        R
                  X 5      $ U[        ;   d7  UR                  5       (       Ga  U S-   [        U5      :  a  XS-      [        ;   a  U nX   R                  5       (       a  U S-  n U [        U5      :  a  X   [        ;   a  U S-  n U [        U5      :  a.  X   [        ;   a"  U S-  n U [        U5      :  a  X   [        ;   a  M"  U [        U5      S-
  :  a8  X   S:X  a0  XS-      R                  5       (       a  U S-  n [        R                  nO[        R                  n[        XU  XBU S9$ Un U[        ;   a   U S-  n [        XU  [        R                  X S9$ SnU [        U5      :  av  X   nX5:X  a  SnOTUcQ  U[        ;   a  UnODU[        :X  a  U S-   [        U5      :  a  U S-  n O"O7UR	                  5       (       a  O!U[        ;   a  OU S-  n U [        U5      :  a  Mv  X   S:X  a  [        R                  O[        R                  n[        XU  XBU S9$ )	zReturns the next shell token at s[i:].

Args:
  i: The index of the next character in s.
  s: The string to parse for shell tokens.

Returns:
 A ShellToken, None if there are no more token in s.
 r   Nr   r
   r   )r2   r3   -)lenr,   r   r   isspacer$   SHELL_REDIRECTION_CHARSisdigitr!   r"   SHELL_TERMINATOR_CHARSr    SHELL_QUOTE_CHARSSHELL_ESCAPE_CHARr   )ir)   indexcr1   quotes         r'   GetShellTokenrU   Z   s    %CF{	
"n00!a%;;	A99;;FA 	 % 	VaZ1_FAaaj."C"CUNN ""aiikka!ec!fnAh))Et||~~1fa3q6zad551faAJ14#::	Q AJ14#::	
SVaZADCKA!eH,<,<,>,>	Q((
C!<<A 
  FAaaj.";";5PP %	CF
	Aze		
	!!Q3Q<
q&! 99;;&&FA# 	
CF
$  !x3N4F4F#	AAJa	88r&   c                 >   / nSn [        X 5      nU(       d   U$ UR                  nUR                  U5        UR                  [        R
                  :X  aG  [        X 5      nU(       d   U$ UR                  n[        R                  Ul        UR                  U5        M  )zReturns the list of ShellTokens in s.

Args:
  s: The string to parse for shell tokens.

Returns:
  The list of ShellTokens in s.
r   )rU   r3   appendr1   r   r"   r#   )r)   tokensrQ   tokens       r'   GetShellTokensrZ      s     &!!E 
- 			A
MM%yyN...A!e 
- ))a %%eimmE 	r&   )rF   
__future__r   r   r   enumrP   rO   rN   rL   Enumr   r*   objectr,   rU   rZ   r   r&   r'   <module>r_      s`      &  '    - $ TYY E EDH9Vr&   