
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \œ2  ã               @   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jdejƒjZdd„ Zdd„ ZedkrÄeejƒdkr˜e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               @   sf   e Zd ZdZd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 | _|sÄd}n|dkrÐd}|| _|�rtƒ | _|  j
d7  _
| j
jtj|ƒƒ}| j
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   r#   Út© r+   ú/usr/lib64/python3.6/shlex.pyÚ__init__   sJ    
zshlex.__init__c             C   s*   | j dkrtdt|ƒ ƒ | j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_tokenD   s    
zshlex.push_tokenc             C   sp   t |tƒrt|ƒ}| j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!   r0   r   r   r   r   r.   )r)   Ú	newstreamÚnewfiler+   r+   r,   Úpush_sourceJ   s    
zshlex.push_sourcec             C   sD   | j jƒ  | 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_sourceX   s    
zshlex.pop_sourcec             C   sÜ   | j r.| j jƒ }| jdkr*tdt|ƒ ƒ |S | jƒ }| jdk	r~x<|| jkr|| j| jƒ ƒ}|rr|\}}| j||ƒ | j	ƒ }qBW x*|| j
kr¨| js–| j
S | jƒ  | j	ƒ }q€W | jdkrØ|| j
krÐt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   r7   r   r.   r/   Ú
read_tokenr"   Ú
sourcehookr5   Ú	get_tokenr   r!   r8   )r)   r1   ÚrawÚspecr4   r3   r+   r+   r,   r;   a   s.    




zshlex.get_tokenc             C   sÂ  d}d}�x\| j r$| jr$| jjƒ }n| j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”|s’d | _P �qd|| j
krÆ| jdkr®td	ƒ | j	s¾| jr|rP nqnÌ|| jkrê| jjƒ  |  jd7  _n¨| joø|| jk�rd
}|| _nŠ|| jk�r"|| _	d
| _np|| j k�r<|| _	d| _nV|| jk�r^| j�sV|| _	|| _n4| j�rt|| _	d
| _n|| _	| j	�sŒ| jr|rP nqq| j| jk�r<d}|�sÈ| jdk�rÀt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´|�sl| jdk�rdtdƒ tdƒ‚|| jk�rž|| jk�rž||k�rž|  j	| j7  _	|  j	|7  _	|| _q| jdkr|�sÎd | _P q|| j
k�r| jdk�rîtdƒ d| _| j	�s| jr|rP nqq|| jk�rZ| jjƒ  |  jd7  _| j�rdd| _| j	�sR| jr|rP nqq| jdk�r¤|| j k�r‚|  j	|7  _	n || j
k�rš| jj|ƒ d| _P q| j�rÀ|| jk�rÀ|| _q| j�rà|| jk�ràd
}|| _q|| jk�s || jk�s | j�r|  j	|7  _	q| j �r&| jj|ƒ n| jj|ƒ | jdk�rFtdƒ d| _| j	�s^| jr|rP qqqW | j	}d| _	| j�r’| �r’|dk�r’d }| jdk�r¾|�r¶t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 characterz%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)rA   rB   )r#   r$   Úpopr   Úreadr   r   r.   r   r    r   r   r   Úreadliner   r   r   r   Ú
ValueErrorr   Úappendr   r0   r/   )r)   ZquotedZescapedstateZnextcharÚresultr+   r+   r,   r9   �   sü    









zshlex.read_tokenc             C   sX   |d dkr|dd… }t | jtƒrJtjj|ƒ rJtjjtj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)   r4   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 ƒ }|| 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-   r2   r5   r8   r;   r9   r:   rQ   rR   rT   r+   r+   r+   r,   r      s    
.
	  	
FTc             C   s$   t | |d�}d|_|sd|_t|ƒS )N)r   Tr   )r   r   r   Úlist)ÚsZcommentsr   Zlexr+   r+   r,   r   ,  s
    z[^\w@%+=:,./-]c             C   s,   | sdS t | ƒdkr| S d| jddƒ d S )z1Return a shell-escaped version of the string *s*.z''Nú'z'"'"')Ú_find_unsafeÚreplace)rZ   r+   r+   r,   r   6  s
    c             C   s(   x"| j ƒ }|sP tdt|ƒ ƒ qW d S )NzToken: )r;   r.   r/   )ZlexerZttr+   r+   r,   Ú_print_tokensB  s
    r^   Ú__main__r   )FT)rX   rK   Úrer   Úcollectionsr   Úior   Ú__all__r   r   ÚcompileÚASCIIÚsearchr\   r   r^   rU   ÚlenÚargvÚfnrP   Úfr+   r+   r+   r,   Ú<module>   s&   	
  


