B
    \ c,3              	   @   s   d Z ddlZddlZddlZddlmZ ddlmZ dddgZG dd dZ	dddZ
edejjZdd Zdd Zedkreejdkree	  n,ejd ZeeZee	ee W dQ R X dS )z8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIOshlexsplitquotec               @   sr   e Zd ZdZdddZedd Zdd	 Zdd
dZdd Z	dd Z
dd Zdd ZdddZdd Zdd ZdS )r   z8A lexical analyzer class for simple shell-like syntaxes.NFc             C   s  t |trt|}|d k	r(|| _|| _ntj| _d | _|| _|rHd | _nd| _d| _	d| _
| jrn|  j
d7  _
d| _d| _d| _d| _d	| _d
| _t | _d| _d| _d| _t | _d | _|sd}n|dkrd}|| _|rt | _|  j
d7  _
| j
t|}| j
|| _
d S )N #Z?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t r,   lib/python3.7/shlex.py__init__   sJ    
zshlex.__init__c             C   s   | j S )N)r#   )r)   r,   r,   r-   r*   D   s    zshlex.punctuation_charsc             C   s*   | j dkrtdt|  | j| dS )z:Push a token onto the stack popped by the get_token methodr   zshlex: pushing token N)r   printreprr   
appendleft)r)   tokr,   r,   r-   
push_tokenH   s    
zshlex.push_tokenc             C   sp   t |trt|}| j| j| j| jf || _|| _d| _| jrl|dk	r\t	d| jf  nt	d| jf  dS )z9Push an input source onto the lexer's input source stack.r   Nzshlex: pushing to file %szshlex: pushing to stream %s)
r   r   r   r!   r1   r   r   r   r   r/   )r)   	newstreamnewfiler,   r,   r-   push_sourceN   s    
zshlex.push_sourcec             C   sD   | j   | j \| _| _ | _| jr:td| j | jf  d| _dS )zPop the input source stack.zshlex: popping to %s, line %dr   N)	r   closer!   popleftr   r   r   r/   r   )r)   r,   r,   r-   
pop_source\   s    
zshlex.pop_sourcec             C   s   | j r.| j  }| jdkr*tdt|  |S |  }| jdk	r~x<|| jkr|| |  }|rr|\}}| || | 	 }qBW x*|| j
kr| js| j
S |   | 	 }qW | jdkr|| j
krtdt|  ntd |S )zBGet a token from the input stream (or from stack if it's nonempty)r   zshlex: popping token Nzshlex: token=zshlex: token=EOF)r   r8   r   r/   r0   
read_tokenr"   
sourcehookr6   	get_tokenr   r!   r9   )r)   r2   rawspecr5   r4   r,   r,   r-   r<   e   s.    




zshlex.get_tokenc             C   s  d}d}x^| j r$| jr$| j }n| jd}|dkrF|  jd7  _| jdkrbtd| j|f  | jd krvd| _	P q| jdkr|sd | _P qf|| j
kr| jdkrtd	 | j	s| jr|rP nqn|| jkr| j  |  jd7  _n| jr
|| jkr
d
}|| _n|| jkr$|| _	d
| _np|| j kr>|| _	d| _nV|| jkr`| jsX|| _	|| _n4| jrv|| _	d
| _n|| _	| j	s| jr|rP nqq| j| jkr>d}|s| jdkrtd td|| jkr| js|  j	|7  _	d| _P nd
| _n>| jr.|| jkr.| j| jkr.| j}|| _n|  j	|7  _	q| j| jkr|sn| jdkrftd td|| jkr|| jkr||kr|  j	| j7  _	|  j	|7  _	|| _q| jdkr|sd | _P q|| j
kr| jdkrtd d| _| j	s| jr|rP nqq|| jkr\| j  |  jd7  _| jrfd| _| j	sT| jr|rP nqq| jdkr|| j kr|  j	|7  _	n || j
kr| j| d| _P q| jr|| jkr|| _q| jr|| jkrd
}|| _q|| jks|| jks| jr|  j	|7  _	q| j r(| j| n| j| | jdkrHtd d| _| j	s`| jr|rP qqqW | j	}d| _	| jr|s|dkrd }| jdkr|rtdt|  ntd |S )NFr   r   
   z&shlex: in state %r I see character: %rr      z+shlex: I see whitespace in whitespace stateacTz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped character)rB   rC   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   r/   r   r    r   r   r   readliner   r   r   r   
ValueErrorr   appendr   r1   r0   )r)   ZquotedZescapedstateZnextcharresultr,   r,   r-   r:      s    









zshlex.read_tokenc             C   sV   |d dkr|dd }t | jtrHtj|sHtjtj| j|}|t|dfS )z(Hook called on a filename to be sourced.r   r
   r   r)	r   r   r   ospathisabsjoindirnameopen)r)   r5   r,   r,   r-   r;     s
    zshlex.sourcehookc             C   s(   |dkr| j }|dkr| j}d||f S )z<Emit a C-compiler-like, Emacs-friendly error-message leader.Nz"%s", line %d: )r   r   )r)   r   r   r,   r,   r-   error_leader  s
    zshlex.error_leaderc             C   s   | S )Nr,   )r)   r,   r,   r-   __iter__'  s    zshlex.__iter__c             C   s   |   }|| jkrt|S )N)r<   r   StopIteration)r)   r    r,   r,   r-   __next__*  s    
zshlex.__next__)NNFF)N)NN)__name__
__module____qualname____doc__r.   propertyr*   r3   r6   r9   r<   r:   r;   rR   rS   rU   r,   r,   r,   r-   r      s    
.
	  	
FTc             C   s$   t | |d}d|_|sd|_t|S )z-Split the string *s* using shell-like syntax.)r   Tr   )r   r   r   list)sZcommentsr   Zlexr,   r,   r-   r   0  s
    z[^\w@%+=:,./-]c             C   s,   | sdS t | dkr| S d| dd d S )z1Return a shell-escaped version of the string *s*.z''N'z'"'"')_find_unsafereplace)r\   r,   r,   r-   r   ;  s
    c             C   s(   x"|   }|sP tdt|  qW d S )NzToken: )r<   r/   r0   )ZlexerZttr,   r,   r-   _print_tokensG  s
    r`   __main__r   )FT)rY   rL   rer   collectionsr   ior   __all__r   r   compileASCIIsearchr^   r   r`   rV   lenargvfnrQ   fr,   r,   r,   r-   <module>   s&   	
  
	

