e/dZddlmZddlmZddlZdZdZdZd Zd Z d Z d Z d Z dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZGddejZGd d!eZy)"aThis implements an ANSI (VT100) terminal emulator as a subclass of screen. PEXPECT LICENSE This license is approved by the OSI and FSF as GPL-compatible. http://opensource.org/licenses/isc-license.txt Copyright (c) 2012, Noah Spurrier PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. )screen)FSMNcZ|jd}|j|jyNr)memorywrite_ch input_symbolfsmrs ./usr/lib/python3/dist-packages/pexpect/ANSI.pyDoEmitr$s# ZZ]FFOOC$$%cN|jj|jyN)rappendr )r s r DoStartNumberr)sJJs''(rc|jj}||jz}|jj|yr)rpopr r)r nss r DoBuildNumberr-s4  B c BJJrrcD|jd}|jyr)r cursor_backr s r DoBackOner3 ZZ]FFrct|jj}|jd}|j|yr)intrrrr countrs r DoBackr 84   !E ZZ]FFrcD|jd}|jyr)r cursor_downr s r DoDownOner$>rrct|jj}|jd}|j|yr)rrrr#rs r DoDownr&Cr!rcD|jd}|jyr)rcursor_forwardr s r DoForwardOner)Is ZZ]FFrct|jj}|jd}|j|yr)rrrr(rs r DoForwardr+Ns4   !E ZZ]FF5!rcD|jd}|jyr)rcursor_up_reverser s r DoUpReverser.T ZZ]FFrcD|jd}|jyr)r cursor_upr s r DoUpOner2Ys ZZ]FFrct|jj}|jd}|j|yr)rrrr1rs r DoUpr4^s4   !E ZZ]FFerct|jj}t|jj}|jd}|j||yr)rrr cursor_homer crrs r DoHomer:dsK CJJNN A CJJNN A ZZ]FF!rcPd}d}|jd}|j||y)Nrr)rr6r7s r DoHomeOriginr<ks+ A A ZZ]FF!rcD|jd}|jyr)r erase_downr s r DoEraseDownr?rs ZZ]FFrct|jj}|jd}|dk(r|jy|dk(r|jy|dk(r|j yyNrr)rrrr>erase_up erase_screenr argrs r DoEraserGwsf cjjnn C ZZ]F ax   rcD|jd}|jyr)rerase_end_of_liner s r DoEraseEndOfLinerJr/rct|jj}|jd}|dk(r|jy|dk(r|jy|dk(r|j yyrA)rrrrIerase_start_of_line erase_linerEs r DoEraseLinerNsh cjjnn C ZZ]F ax   " """$  rcD|jd}|jyr)r scroll_screenr s r DoEnableScrollrQs ZZ]FFrcD|jd}|jyr)rcursor_save_attrsr s r DoCursorSaverTr/rcD|jd}|jyr)rcursor_restore_attrsr s r DoCursorRestorerWs ZZ]FF!rc|jd}t|jj}t|jj}|j||yr)rrrscroll_screen_rows)r rr2r1s r DoScrollRegionr\sK ZZ]F SZZ^^  B SZZ^^  BFr"%rcV|jd}|jj}yr)rr)r rmodes r DoModer_s ZZ]F ::>> Drc|jd}|g|_tdd}|j|jdz|jzdz|j y)Nrloga, )ropenwriter current_stateclose)r rfouts r DoLogrjsT ZZ]FCJ  DJJ  3&):)::TABJJLrceZdZdZddZy)termzThis class is an abstract, generic terminal. This does nothing. This is a placeholder that provides a common base class for other terminals such as an ANSI terminal. cNtjj|||g|i|yr)r__init__selfr9r8argskwargss r rnz term.__init__s" tQq8$88rNP)__name__ __module__ __qualname____doc__rnrr rlrls " 9rrlcHeZdZdZd dZdZdZdZdZdZ dZ d Z d Z y ) ANSIzThis class implements an ANSI (VT100) terminal. It is a stream filter that recognizes ANSI terminal escape sequences and maintains the state of a screen object. c4tj|||g|i|tjd|g|_|jj t d|jj dtd|jjdddd|jj dt d|jjdddd|jjdddd|jjdddd|jjdddd|jjd dtd|jjd dtd|jjd dtd|jjd dtd|jjd dtd|jjdddd|jjdddd|jj ddd|jjdddd|jjddtd|jjddtd|jjddtd|jjddt d|jjddt"d|jjddt$d|jjddt&d|jjddt(d|jjdd|j*d|jjdddd|jjt,j.dt0d|jjt,j.dt2d|jjddt4d|jjddt6d|jjddt8d|jjddt:d|jjddt<d|jjddt>d|jjddt@d|jjdd|j*d|jjd d|jBd|jjt,j.dt0d!|jjt,j.d!t2d!|jjdd!|jDd|jjd"d!|jDd|jjd#ddd$|jj d$t d|jjt,j.d$t0d%|jjt,j.d%t2d%|jj d%t d|jjdd%tFd|jjd&d%tFd|jjdd%tHd|jjdd%|j*d|jjd d%|jBd|jjd#d%dd'|jj d't d|jjt,j.d't0d(|jjt,j.d(t2d(|jj d(t d|jjdd(|j*d|jjd d(|jBd|jjd#d(dd'y))NINITESC(G0SCS)G1SCSAB01278M><=#GRAPHICS_POUND[ELBHDBCAJKr9m?MODECRAPNUMBER_1lq MODECRAP_NUMh; SEMICOLONNUMBER_2f SEMICOLON_XNUMBER_X)%rlrnrstateset_default_transitionrjadd_transition_anyradd_transitionadd_transition_listrTrWr.r<rr$r)r2r?rJrQdo_sgrstringdigitsrrr r&r+r4rGrNr_ do_decsca do_modecrapr:r\ros r rnz ANSI.__init__s d1Q..v.WWfdV,  ))5&9 %%vvv> !!664? %%ueV< !!3tW= !!3tW= &&$G &&$G !!3|VD !!3G !!3{FC !!3{FC !!3{FC !!3tV< !!3t5EF %%'7vF !!3tU; !!3|VD !!3y&A !!3y&A !!3|VD !!3w? !!3{FC !!3/?H !!3~vF !!3t{{FC !!3tZ@ && umZX && z=R\] !!3 FFC !!3 FFC !!3 IvF !!3 D&A !!3 GVD !!3 KH !!3 FFC !!3 DKKH !!3 DNNFK && z=R`a && ~}Vde !!38H8H&Q !!38H8H&Q !!3 D+F %%{E6B && {MS]^ && z=R\] %%z5&A !!3 FFC !!3 FFC !!3 NFK !!3 DKKH !!3 DNNFK !!3 D-H %%}eVD && }mU_` && z=R\] %%z5&A !!3 DKKH !!3 DNNFK !!3 D-Hrc|t|tr|j|}|jj |y)z4Process a single character. Called by :meth:`write`.N) isinstancebytes_decoderprocess)rpr8s r rz ANSI.processs+ a  QA 1rc&|j|yr)rf)rprs r process_listzANSI.process_lists  1 rcvt|tr|j|}|D]}|j|y)zaProcess text, writing it to the virtual screen while handling ANSI escape codes. N)rrrr)rpsr8s r rfz ANSI.write#s5 a  QA A LLO rcyrrz)rps r flushz ANSI.flush,s rct|tr|j|}|d}|dk(r|jy|dk(r|j y|t t jk(r|jy|j|j|j||j}|j}|j||jk(ry|j||jk7r|j|jdy|j|j|jd|j!yy)zThis puts a character at the current cursor position. The cursor position is moved forward with wrap-around, but no scrolling is done if the cursor hits the lower-right corner of the screen. r Nrdr)rrrcrcrlfchrrBSrput_abscur_rcur_cr(r#r6 scroll_uprM)rpchold_rold_cs r r z ANSI.write_ch/s b% b!BU ; GGI  ; IIK  VYY       TZZR0    DJJ      "  $**a0!  $**a0! rc2|jd}|g|_y)z&Select Graphic Rendition, e.g. color. rNrrpr rs r rz ANSI.do_sgrPAX rc2|jd}|g|_y)z'Select character protection attribute. rNrrs r rzANSI.do_decscaUrrc2|jd}|g|_y)zHandler for [?h and [?l. If anyone wanted to actually use these, they'd need to add more states to the FSM rather than just improve or override this method. rNrrs r rzANSI.do_modecrapZsAX rNrs) rvrwrxryrnrrrfrr rrrrzrr r|r|s9EQIf  "B  rr|)ryrrrrrrrr r$r&r)r+r.r2r4r:r<r?rGrJrNrQrTrWr\r_rjrlr|rzrr rs8 & )      "        " &  9FMM 9^D^r