B
    Áì2a,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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               @   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 | _|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,   ú1/var/www/html/prediksi/Python-3.7.12/Lib/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 |  ¡  |  	¡ }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   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–|s’d | _P �qf|| j
krÆ| jdkr®t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�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¶|�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|�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�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�râd
}|| _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�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)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escapedstateÚ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;   rS   rT   rV   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)ÚsÚ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lexerÚttr,   r,   r-   Ú_print_tokensG  s
    rc   Ú__main__r   )FT)rZ   rM   Úrer   Úcollectionsr   Úior   Ú__all__r   r   ÚcompileÚASCIIÚsearchr`   r   rc   rW   ÚlenÚargvÚfnrR   Úfr,   r,   r,   r-   Ú<module>   s&   	
  
	

