
                         r    S 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.    N\)"');&|()<>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)	
ShellToken5   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)selfr-   r.   r/   r0   s        r$   __init__ShellToken.__init__?   s    JHJHr#   c                     U R                   [        R                  L d  U R                   [        R                  L a  [	        U R
                  5      $ U R
                  $ r,   )r.   r   r   r   r'   r-   r1   s    r$   UnquotedValueShellToken.UnquotedValueE   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__)r1   others     r$   __eq__ShellToken.__eq__K   s'    %((]]enn,,r#   c                 z    SR                  U R                  U R                  U R                  U R                  5      $ )zImprove debugging during tests.zShellToken({}, {}, {}, {}))formatr-   r.   r/   r0   r5   s    r$   __repr__ShellToken.__repr__Q   s0    '..tzz488/3zz488E Er#   )r0   r.   r/   r-   )r   r   r   r   __doc__r   r   r2   r6   r=   rA   r"   r   r#   r$   r)   r)   5   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   )r/   r0   -)lenr)   r   r   isspacer!   SHELL_REDIRECTION_CHARSisdigitr   r   SHELL_TERMINATOR_CHARSr   SHELL_QUOTE_CHARSSHELL_ESCAPE_CHARr   )ir&   indexcr.   quotes         r$   GetShellTokenrR   W   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   )rR   r0   appendr.   r   r   r    )r&   tokensrN   tokens       r$   GetShellTokensrW      s     &!!E 
- 			A
MM%yyN...A!e 
- ))a %%eimmE 	r#   )rC   enumrM   rL   rK   rI   Enumr   r'   objectr)   rR   rW   r   r#   r$   <module>r[      sY         - $ TYY E EDH9Vr#   