a
    ze4                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ g d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reejdkree  n@ejd ZeeZeeee W d   n1 s0    Y  dS )    N)deque)StringIO)shlexsplitquotejoinc                   @   sn   e 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   NFc                 C   s  t |trt|}|d u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u 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-   /usr/lib/python3.9/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 )Nr   zshlex: pushing token )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 ur\t	d| jf  nt	d| jf  d S )Nr   zshlex: pushing to file %szshlex: pushing to stream %s)
r   r   r   r"   r4   r   r   r   r    r2   )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 )Nzshlex: popping to %s, line %dr   )	r   closer"   popleftr   r   r    r2   r   r1   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 urz|| jkrz| |  }|rp|\}}| || | 	 }q@|| j
kr| js| j
S |   | 	 }qz| jdkr|| j
krtdt|  ntd |S )Nr   zshlex: popping token zshlex: token=zshlex: token=EOF)r   r;   r    r2   r3   
read_tokenr#   
sourcehookr9   	get_tokenr   r"   r<   )r*   r5   rawspecr8   r7   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 u rtd| _	qq| jdkr|sd | _qq|| j
v r| jdkrtd	 | j	s| jr|rqnqn|| jv r| j  |  jd7  _n| jr|| jv rd
}|| _n|| jv r&|| _	d
| _nr|| j v r@|| _	d| _nX|| jv rb| jsZ|| _	|| _n6| jrx|| _	d
| _n || _	| j	s| jr|rqnqq| j| jv rDd}|s| jdkrtd td|| jkr| js|  j	|7  _	d| _qnd
| _n>| jr4|| jv r4| j| jv r4| j}|| _n|  j	|7  _	q| j| jv r|st| jdkrltd td|| jv r|| jkr||kr|  j	| j7  _	|  j	|7  _	|| _q| jdv r|sd | _qq|| j
v r| jdkrtd d| _| j	s| jr|rqnqq|| jv rh| j  |  jd7  _| jrd| _| j	s| jr|rqnqq| jdkr|| j v r|  j	|7  _	n"|| j
vr| j| d| _qq| jr|| jv r|| _q| jr|| jv rd
}|| _q|| jv s|| jv s| jr,|| j vr,|  j	|7  _	q| j rB| j| n| j| | jdkrbtd d| _| j	s| jr|rqqqq| 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)rE   rF   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    r2   r   r!   r   r   r   readliner   r   r   r   
ValueErrorr   appendr   r4   r3   )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 )Nr   r   r   r)	r   r   r   ospathisabsr   dirnameopen)r*   r8   r-   r-   r.   r>     s
    zshlex.sourcehookc                 C   s(   |d u r| j }|d u r| j}d||f S )Nz"%s", line %d: )r   r   )r*   r   r   r-   r-   r.   error_leader   s
    zshlex.error_leaderc                 C   s   | S r0   r-   r1   r-   r-   r.   __iter__(  s    zshlex.__iter__c                 C   s   |   }|| jkrt|S r0   )r?   r   StopIteration)r*   r!   r-   r-   r.   __next__+  s    
zshlex.__next__)NNFF)N)NN)__name__
__module____qualname__r/   propertyr+   r6   r9   r<   r?   r=   r>   rT   rU   rW   r-   r-   r-   r.   r      s     
/

	  	
r   FTc                 C   sD   | d u r dd l }|jdtdd t| |d}d|_|s<d|_t|S )Nr   z4Passing None for 's' to shlex.split() is deprecated.rD   )
stacklevel)r   Tr   )warningswarnDeprecationWarningr   r   r   list)sZcommentsr   r]   Zlexr-   r-   r.   r   1  s    r   c                 C   s   d dd | D S )Nr   c                 s   s   | ]}t |V  qd S r0   )r   ).0argr-   r-   r.   	<genexpr>@      zjoin.<locals>.<genexpr>)r   )Zsplit_commandr-   r-   r.   r   >  s    r   z[^\w@%+=:,./-]c                 C   s,   | sdS t | d u r| S d| dd d S )Nz'''z'"'"')_find_unsafereplace)ra   r-   r-   r.   r   E  s
    r   c                 C   s$   |   }|sq tdt|  q d S )NzToken: )r?   r2   r3   )Zlexerttr-   r-   r.   _print_tokensQ  s    rj   __main__r   )FT)rO   rer   collectionsr   ior   __all__r   r   r   compileASCIIsearchrg   r   rj   rX   lenargvfnrS   fr-   r-   r-   r.   <module>
   s&      


