o
    i2                     @   sJ   d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd dZ	dS )8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIO)Optionalc                   @   sj   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eZdS )shlexr   NFc                 C   s  t |tr	t|}|d ur|| _|| _ntj| _d | _|| _|r$d | _nd| _d| _	d| _
d| _d| _d| _d| _d| _d	| _t | _d
| _d| _d| _t | _d | _|sXd}n|du r^d}|| _|r~t | _|  j
d7  _
| j
t|}| j
|| _
d | _d| _d S )N #?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_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last_wordbreak_pos
wordbreaks)selfr   r   r   r$   t r.   a/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/argcomplete/packages/_shlex.py__init__   sJ   

zshlex.__init__c                 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_tokenJ   s   
zshlex.push_tokenc                 C   sv   t |tr	t|}| j| j| j| jf || _|| _d| _| jr9|dur/t	d| jf  dS t	d| jf  dS 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"   r3   r   r   r   r    r1   )r,   	newstreamnewfiler.   r.   r/   push_sourceP   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    r1   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urA|| jkrA| |  }|r8|\}}| || | 	 }|| jks%|| j
krY| jsL| j
S |   | 	 }|| j
ksF| jdkrq|| j
krmtdt|  |S 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    r1   r2   
read_tokenr#   
sourcehookr8   	get_tokenr   r"   r<   )r,   r4   rawspecr7   r6   r.   r.   r/   r?   g   s4   








zshlex.get_tokenc                 C   s  d}d}	 | j r| jr| j }n| jd}|dkr"|  jd7  _| jdkr0td| j|f  | jd u r:d| _	n| jdkr|sFd | _n|| j
v r_| jd	krTtd
 | j	s\| jr^|r^nq|| jv rr| j  |  jd7  _n| jr|| jv rd}|| _n|| jv r|| _	d| _n|| j v r|| _	d| _n|| jv r| js|| _	|| _n| jr|| _	d| _|| jv rt| j	d | _n|| _	| j	s| jr|rАnyq| j| jv r%d}|s| jd	krtd td|| jkr| js|  j	|7  _	d| _nKd| _nE| jr|| jv r| j| jv r| j}|| _n,|  j	|7  _	n#| j| jv ra|s=| jd	kr9td td|| jv rV|| jkrV||krV|  j	| j7  _	|  j	|7  _	|| _n| jdv rH|snd | _n|| j
v r| jd	kr~td d| _| j	s| jr|rnq|| jv r| j  |  jd7  _| jrd| _| j	s| jr|rnqn| jr|| jv r|| _n| jr|| jv rd}|| _nu| jdkr|| j v r|  j	|7  _	na|| j
vr| j| d| _nR|| jv s|| jv s| jr|  j	|7  _	|| jv rt| j	d | _n+| j r(| j| n| j| | jd	kr8td d| _| j	sF| jrG|rGnqq| j	}d| _	| jr]|s]|dkr]d }| jdkrs|rotdt|  ntd | jdkr|d | _|S )NFr   Tr   
   z&shlex: in state %r I see character: %rr      z+shlex: I see whitespace in whitespace stateacz 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    r1   r   r!   r   r   r   readliner   r   r   r   r+   lenr*   
ValueErrorr   appendr   r3   r2   )r,   quotedescapedstatenextcharresultr.   r.   r/   r=      s  
















"
"
   zshlex.read_tokenc                 C   sV   |d dkr|dd }t | jtr$tj|s$t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,   r7   r.   r.   r/   r>     s
   zshlex.sourcehookc                 C   s(   |du r| j }|du 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 rZ   )r?   r   StopIteration)r,   r!   r.   r.   r/   __next__2  s   
zshlex.__next__)NNFFrZ   )NN)__name__
__module____qualname____doc__r0   r5   r8   r<   r?   r=   r>   rY   r[   r]   nextr.   r.   r.   r/   r      s    
3
  

r   )
ra   rS   r   collectionsr   ior   typingr   r   r.   r.   r.   r/   <module>   s   	