\d4dZddlZddlZddlZddlmZddlmZgdZGddZ dd Z d Z ej d ej jZd ZdZedkrqeejdkree dSejdZee5Zee eeddddS#1swxYwYdSdS)8A lexical analyzer class for simple shell-like syntaxes.N)deque)StringIO)shlexsplitquotejoincneZdZdZ ddZedZdZddZdZ d Z d Z d Z dd Z d ZdZdS)rrNFct|trt|}|||_||_nt j|_d|_||_|rd|_nd|_d|_ d|_ |jr|xj dz c_ d|_ d|_ d|_ d|_d |_d |_t#|_d |_d |_d|_t#|_d|_|sd}n|d urd}||_|rvt#|_|xj dz c_ |j t6|}|j ||_ dSdS)N#?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞz Fz'"\" rTz();<>|&z~-./*?=) isinstancestrrinstreaminfilesysstdinposixeof commenters wordchars whitespacewhitespace_splitquotesescape escapedquotesstaterpushbacklinenodebugtoken filestacksource_punctuation_chars_pushback_chars maketransdictfromkeys translate)selfrrrpunctuation_charsts ..\python\lib\shlex.py__init__zshlex.__init__s h $ $ *))H  $DM DKKIDMDK  DHHDHB : _ NN ^ _NN# %           * "   $ & & ) "3  9#(77D NNi 'NN((7H)I)IJJA!^55a88DNNN 9 9c|jSN)r)r/s r2r0zshlex.punctuation_charsDs &&r4c|jdkrtdt|z|j|dS)z:Push a token onto the stack popped by the get_token methodrzshlex: pushing token N)r%printreprr# appendleft)r/toks r2 push_tokenzshlex.push_tokenHsC :?? )DII5 6 6 6   %%%%%r4cFt|trt|}|j|j|j|jf||_||_d|_|jr4|td|jdStd|jdSdS)z9Push an input source onto the lexer's input source stack.rNzshlex: pushing to file zshlex: pushing to stream ) rrrr'r;rrr$r%r9)r/ newstreamnewfiles r2 push_sourcezshlex.push_sourceNs i % % , ++I !!4; t{"KLLL !  : H"T[[BCCCCCt}}FGGGGG  H Hr4c|j|j\|_|_|_|jrtd|j|jfzd|_dS)zPop the input source stack.zshlex: popping to %s, line %drN) rcloser'popleftrr$r%r9r"r7s r2 pop_sourcezshlex.pop_source\sq 48N4J4J4L4L1dmT[ : 2 1]DK01 2 2 2 r4c|jrE|j}|jdkrtdt |z|S|}|jn||jkrc||}|r|\}}|||| }||jkc||j krA|j s|j S| | }||j kA|jdkr:||j kr tdt |zntd|S)zBGet a token from the input stream (or from stack if it's nonempty)rzshlex: popping token Nz shlex: token=zshlex: token=EOF) r#rDr%r9r: read_tokenr( sourcehookrA get_tokenrr'rE)r/r<rawspecr@r?s r2rIzshlex.get_tokenes` = -''))CzQ-S 9:::Joo ; "$$t'8'8999+/(Wi$$Y888nn&& $$TXoo> 'x!!!nn&& TXoo :??dhoS 12222())) r4c" d}d} |jr!|jr|j}n|jd}|dkr|xjdz c_|jdkrtd|jd||j d |_ n!|jdkr|s d|_n ||j vr-|jd krtd |j s |j r|rnՌ||j vr+|j |xjdz c_n|j r||jvr d }||_n||jvr||_ d |_nj||jvr||_ d |_nQ||jvr|j s||_ ||_n1|jr||_ d |_n||_ |j s |j r|rn|j|jvrd}|s)|jd krtdt%d||jkr)|j s|xj |z c_ d|_nd |_n|j r'||jvr|j|jvr|j}||_nb|xj |z c_ nP|j|jvrs|s)|jd krtdt%d||jvr&||jkr||kr|xj |jz c_ |xj |z c_ ||_n|jdvr|s d|_n||j vr5|jd krtdd|_|j s |j r|rn1||j vrM|j |xjdz c_|j rd|_|j s |j r|rn,n&|jd krF||jvr|xj |z c_ n||j vr|j|d|_n|j r||jvr||_n|j r||jvr d }||_n||jvs||jvs|jr||jvr|xj |z c_ np|jr|j|n|j||jd krtdd|_|j s |j r|rn|j }d |_ |j r |s|d krd}|jdkr1|r tdt/|zntd|S)NFrTr zshlex: in state z I see character: r z+shlex: I see whitespace in whitespace stateacz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped character)rPrQz%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)r0r*poprreadr$r%r9r"r&rrrreadliner rrr ValueErrorr!appendr#r;r:)r/quoted escapedstatenextcharresults r2rGzshlex.read_tokens" C !% 1$*> 1/3355=--a004 q zQ$***BJ(LMMMz! s"""!!%DJ00zQKLLLz!dj!V! 00M**,,,KK1$KKKZ!H $;$;#&L!)DJJ//!)DJ!$DJJ!777!)DJ!$DJJ,,:.%- !)DJJ*!!)DJ!$DJJ!)DJz!dj!V! t{**=zQ@AAA$%;<<<tz)):) h. %( %( j+X%<%<+B,B,#':L!)DJJJJ(*JJJt{**=zQ@AAA$%;<<<!DK// DJ..8|3K3KJJ$*,JJ h& ) z))0!!%DJ00zQEFFF!$DJz!dj!V! 00M**,,,KK1$KKz%%( :%$*%%!$ % Z3&&4#999 h. #4?:: 077AAA%( Z!H $;$;!)DJJZ!H $;$;#&L!)DJJ$.00H 4K4K/5L"$*@@@JJ(*JJJ-;,33H==== 00:::zQFGGG!$DJz!dj!V! GC !H : f 2F :>> .)DLL89999,--- r4cH|ddkr |dd}t|jtratj|sBtjtj|j|}|t|dfS)z(Hook called on a filename to be sourced.rrrr) rrrospathisabsr dirnameopen)r/r@s r2rHzshlex.sourcehooks 1:  admG dk3 ' ' J g0F0F Jgll27??4;#?#?IIGgs++,,r4c4||j}||j}d||fzS)z[F >[F"ff%555r4c|Sr6r7s r2__iter__zshlex.__iter__(s r4cR|}||jkrt|Sr6)rIr StopIteration)r/r&s r2__next__zshlex.__next__+s)   DH    r4)NNFFr6)NN)__name__ __module__ __qualname____doc__r3propertyr0r=rArErIrGrHrdrgrjrfr4r2rrs>>9>#(-9-9-9-9^''X'&&& H H H H@PPPd---6666r4rFTc|!ddl}|dtdt||}d|_|sd|_t |S) z-Split the string *s* using shell-like syntax.Nrz4Passing None for 's' to shlex.split() is deprecated.rO) stacklevel)rTr )warningswarnDeprecationWarningrrrlist)scommentsrrrlexs r2rr1shy L(Q  8 8 8    CC  99r4c@dd|DS)z3Return a shell-escaped string from *split_command*.rc34K|]}t|VdSr6)r).0args r2 zjoin..@s(883E#JJ888888r4)r ) split_commands r2r r >s# 8888-888 8 88r4z[^\w@%+=:,./-]cd|sdSt||Sd|ddzdzS)z1Return a shell-escaped version of the string *s*.z''N'z'"'"') _find_unsafereplace)rvs r2rrEs@ tA 3 ** *S 00r4ct |}|sdStdt|z8)NrzToken: )rIr9r:)lexertts r2 _print_tokensrQsA$ __    E i$r(("### $r4__main__r)FT)rnr^rer collectionsrior__all__rrr compileASCIIsearchrrrrklenargvfnrbfrfr4r2rs>>  - - -\\\\\\\\|    999 rz+RX66=  1 1 1$$$ z s38}} eegg Xa[ T"XX ( M%%2,, ' ' ' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( sB>>CC