Yf, @sdZddlZddlZddlZddlmZddlmZdddgZGdddZ d d d dZ ej d ej j Zd dZddZedkreejdkree n6ejdZeeZee eeWdQRXdS)z8A lexical analyzer class for simple shell-like syntaxes.N)deque)StringIOshlexsplitquotec@seZdZdZdddddZddZddd Zd d Zd d ZddZ ddZ ddddZ ddZ ddZ dS)rz8A lexical analyzer class for simple shell-like syntaxes.NFcCst|trt|}|dk r<||_||_ntj|_d|_||_|rld|_n d|_d|_ d|_ |jr|j d7_ d|_ d|_ d|_ d|_d |_d |_t|_d |_d |_d|_t|_d|_dS) N#Z?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞz Fz'"\" r) isinstancestrrinstreaminfilesysstdinposixeof commenters wordchars whitespacewhitespace_splitquotesescape escapedquotesstaterpushbacklinenodebugtoken filestacksource)selfrrrr$*/opt/alt/python35/lib64/python3.5/shlex.py__init__s6                       zshlex.__init__cCs7|jdkr#tdt||jj|dS)z:Push a token onto the stack popped by the get_token methodr zshlex: pushing token N)rprintreprr appendleft)r#tokr$r$r% push_token5szshlex.push_tokencCst|trt|}|jj|j|j|jf||_||_d|_|jr|dk rt d|jfnt d|jfdS)z9Push an input source onto the lexer's input source stack.r Nzshlex: pushing to file %szshlex: pushing to stream %s) r rrr!r)rrrrr')r# newstreamnewfiler$r$r% push_source;s "     zshlex.push_sourcecCs^|jj|jj\|_|_|_|jrQtd|j|jfd|_dS)zPop the input source stack.zshlex: popping to %s, line %dr N) rcloser!popleftrrrr'r)r#r$r$r% pop_sourceIs  ! zshlex.pop_sourcecCs2|jr?|jj}|jdkr;tdt||S|j}|jdk rxV||jkr|j|j}|r|\}}|j|||j }q]Wx9||j kr|j s|j S|j |j }qW|jdkr.||j kr$tdt|n td|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) rr0rr'r( read_tokenr" sourcehookr. get_tokenrr!r1)r#r*rawspecr-r,r$r$r%r4Rs.      zshlex.get_tokencCsud}d}x|jjd}|dkr=|jd|_|jdkrntdt|jdt||jdkrd|_Pq|jdkr|sd|_Pq||jkr|jd krtd |js|j r|rPqqq||j kr%|jj |jd|_q|j rO||j krOd }||_q||j krs||_d |_q||jkr|j s||_||_q|jr||_d |_q||_|js|j r|rPqqq|j|jkrd }|s,|jd kr td td||jkrm|j sa|j||_d|_Pqd |_q|j r||j kr|j|jkr|j}||_q|j||_q|j|j krU|s|jd krtdtd||jkr9||jkr9||kr9|j|j|_|j||_||_q|jd kr|swd|_Pq||jkr|jd krtdd|_|js|j r|rPqqq||j kr*|jj |jd|_|j rd|_|js |j r|rPqqq|j rN||jkrN||_q|j rx||j krxd }||_q||j ks||jks|jr|j||_q|jj||jd krtdd|_|js|j r|rPqqqW|j}d|_|j r;| r;|dkr;d}|jdkrq|rgtdt|n td|S)NFr r  zshlex: in statezI see character:rz+shlex: I see whitespace in whitespace stateaTz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped characterz%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)rreadrrr'r(rr rrrreadlinerrrr ValueErrorrrr))r#ZquotedZ escapedstateZnextcharresultr$r$r%r2rs                                       zshlex.read_tokencCs||ddkr |dd}t|jtritjj| ritjjtjj|j|}|t|dfS)z(Hook called on a filename to be sourced.rr r r) r rrospathisabsjoindirnameopen)r#r-r$r$r%r3s %$zshlex.sourcehookcCs8|dkr|j}|dkr*|j}d||fS)zs"