U e5d 4 ã @ sÒ d Z ddlZddlZddlZddlmZ ddlmZ ddddgZG d d„ dƒZ ddd„Z d d„ Ze dej ¡jZdd„ Zdd„ ZedkrÎeejƒdkr¢ee ƒ ƒ n,ejd Zeeƒ�Zee eeƒƒ W 5 Q R X dS )ú8A lexical analyzer class for simple shell-like syntaxes.é N)Údeque)ÚStringIOÚshlexÚsplitÚquoteÚjoinc @ sr e Zd ZdZddd„Zedd„ ƒZdd „ Zdd d„Zdd „ Z dd„ Z dd„ Zdd„ Zddd„Z dd„ Zdd„ ZdS )r r NFc C s t |tƒrt|ƒ}|d k r(|| _|| _ntj| _d | _|| _|rHd | _nd| _d| _ d| _ | jrn| j d7 _ d| _d| _d| _ d| _d | _d | _tƒ | _d| _d| _d| _tƒ | _d | _|sÄd}n|d krÐd}|| _|�rtƒ | _| j d7 _ | 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/lib64/python3.8/shlex.pyÚ__init__ sJ zshlex.__init__c C s | j S ©N)r% ©r+ r. r. r/ r, D s zshlex.punctuation_charsc C s* | j dkrtdt|ƒ ƒ | j |¡ dS )z:Push a token onto the stack popped by the get_token methodr zshlex: pushing token N)r! ÚprintÚreprr Ú appendleft)r+ Útokr. r. r/ Ú push_tokenH s zshlex.push_tokenc C sp t |tƒrt|ƒ}| j | j| j| jf¡ || _|| _d| _| jrl|dk r\t d| jf ƒ nt d| jf ƒ dS )z9Push an input source onto the lexer's input source stack.r Nzshlex: pushing to file %szshlex: pushing to stream %s) r r r r# r5 r r r r! r3 )r+ Ú newstreamÚnewfiler. r. r/ Úpush_sourceN s zshlex.push_sourcec C sD | j ¡ | j ¡ \| _| _ | _| jr:td| j | jf ƒ d| _dS )zPop the input source stack.zshlex: popping to %s, line %dr N) r Úcloser# Úpopleftr r r! r3 r r2 r. r. r/ Ú pop_source\ s ÿzshlex.pop_sourcec C sÔ | j r.| j ¡ }| jdkr*tdt|ƒ ƒ |S | ¡ }| jdk rz|| jkrz| | ¡ ¡}|rp|\}}| ||¡ | ¡ }q@|| j kr¢| js�| j S | ¡ | ¡ }qz| jdkrÐ|| j krÈtdt|ƒ ƒ ntdƒ |S )zBGet a token from the input stream (or from stack if it's nonempty)r zshlex: popping token Nz shlex: token=zshlex: token=EOF) r r<