
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a4  ã                	   @   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dgZG d	d„ dƒZ	ddd„Z
dd„ Ze 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 5 Q R X dS )ú8A lexical analyzer class for simple shell-like syntaxes.é    N)Údeque)ÚStringIOÚshlexÚsplitÚquoteÚjoinc                   @   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   r   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
 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.   ú*/opt/alt/python38/lib64/python3.8/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#   r5   r   r   r    r!   r3   )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!   r3   r   r2   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	rz|| jkrz|  |  ¡ ¡}|rp|\}}|  ||¡ |  	¡ }q@|| j
kr¢| js�| j
S |  ¡  |  	¡ }qz| 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   r<   r!   r3   r4   Ú
read_tokenr$   Ú
sourcehookr:   Ú	get_tokenr   r#   r=   )r+   r6   ÚrawÚspecr9   r8   r.   r.   r/   r@   e   s.    








zshlex.get_tokenc                 C   sÜ  d}d}| j r | jr | j ¡ }n| j d¡}|dkrB|  jd7  _| jdkr^td| j|f ƒ | jd krtd| _	�q„q| jdk�rš|s’d | _�q„�q‚|| j
krÈ| jdkr®td	ƒ | j	s¾| jr|r�q„nqnÐ|| jkrì| j ¡  |  jd7  _n¬| j�r|| jk�rd
}|| _nŒ|| jk�r&|| _	d
| _nr|| j k�r@|| _	d| _nX|| jk�rb| j�sZ|| _	|| _n6| j�rx|| _	d
| _n || _	| j	�s„| jr|r�q„nqq| j| jk�rDd}|�sÎ| jdk�rÆtdƒ tdƒ‚|| jk�r| j�sü|  j	|7  _	d| _�q„nd
| _n>| j�r4|| jk�r4| j| jk�r4| j}|| _n|  j	|7  _	q| j| jk�r¼|�st| jdk�rltdƒ tdƒ‚|| jk�r¦|| jk�r¦||k�r¦|  j	| j7  _	|  j	|7  _	|| _q| jdkr|�sØd | _�q„q|| j
k�r| jdk�røtdƒ d| _| j	�s„| jr|r�q„nqq|| jk�rh| j ¡  |  jd7  _| j�r‚d| _| j	�s„| jr|r�q„nqq| jdk�r´|| j k�r�|  j	|7  _	n"|| j
k�r¨| j |¡ d| _�q„q| j�rÐ|| jk�rÐ|| _q| j�rð|| jk�rðd
}|| _q|| jk�s|| jk�s| j�r,|| j k�r,|  j	|7  _	q| j �rB| j |¡ n| j |¡ | jdk�rbtdƒ d| _| j	�s„| jr|r�q„qqq| j	}d| _	| j�r¬|�s¬|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 character)rF   rG   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!   r3   r   r"   r   r   r   Úreadliner   r   r   r   Ú
ValueErrorr   Úappendr   r5   r4   )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Úisabsr   ÚdirnameÚopen)r+   r9   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 r1   r.   r2   r.   r.   r/   Ú__iter__(  s    zshlex.__iter__c                 C   s   |   ¡ }|| jkrt‚|S r1   )r@   r   ÚStopIteration)r+   r"   r.   r.   r/   Ú__next__+  s    
zshlex.__next__)NNFF)N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   Úpropertyr,   r7   r:   r=   r@   r>   r?   rU   rV   rX   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   1  s
    c                 C   s   d  dd„ | D ƒ¡S )z3Return a shell-escaped string from *split_command*.r   c                 s   s   | ]}t |ƒV  qd S r1   )r   )Ú.0Úargr.   r.   r/   Ú	<genexpr><  s     zjoin.<locals>.<genexpr>)r   )Zsplit_commandr.   r.   r/   r   :  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   A  s
    c                 C   s$   |   ¡ }|sq tdt|ƒ ƒ q d S )NzToken: )r@   r3   r4   )ZlexerZttr.   r.   r/   Ú_print_tokensM  s    rf   Ú__main__r   )FT)r\   rP   Úrer   Úcollectionsr   Úior   Ú__all__r   r   r   ÚcompileÚASCIIÚsearchrd   r   rf   rY   ÚlenÚargvÚfnrT   Úfr.   r.   r.   r/   Ú<module>   s(   	   
	

