o ÿé!^‘/ã@s dZddlmZddlmZddlZdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„ZGd6d7„d7ejƒZGd8d9„d9eƒZdS):aïThis 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)ÚFSMéNcCs|jd}| |j¡dS©Nr)ÚmemoryÚwrite_chÚ input_symbol©Úfsmr©r ú./usr/lib/python3/dist-packages/pexpect/ANSI.pyÚDoEmit$s r cCs|j |j¡dS©N)rÚappendr)r r r r Ú DoStartNumber)srcCs$|j ¡}||j}|j |¡dSr)rÚpoprr)r Únsr r r Ú DoBuildNumber-ó  rcCó|jd}| ¡dSr)rÚ cursor_backr r r r Ú DoBackOne3ó  rcCó&t|j ¡ƒ}|jd}| |¡dSr)Úintrrr©r Úcountrr r r ÚDoBack8ó rcCrr)rÚ cursor_downr r r r Ú DoDownOne>rr cCrr)rrrrrr r r ÚDoDownCrr!cCrr)rÚcursor_forwardr r r r Ú DoForwardOneIrr#cCrr)rrrr"rr r r Ú DoForwardNrr$cCrr)rÚcursor_up_reverser r r r Ú DoUpReverseTrr&cCrr)rÚ cursor_upr r r r ÚDoUpOneYrr(cCrr)rrrr'rr r r ÚDoUp^rr)cCs6t|j ¡ƒ}t|j ¡ƒ}|jd}| ||¡dSr)rrrÚ cursor_home©r ÚcÚrrr r r ÚDoHomeds r.cCs"d}d}|jd}| ||¡dS)Nrr)rr*r+r r r Ú DoHomeOriginks r/cCrr)rÚ erase_downr r r r Ú DoEraseDownrrr1cCóXt|j ¡ƒ}|jd}|dkr| ¡dS|dkr | ¡dS|dkr*| ¡dSdS©Nrré)rrrr0Úerase_upÚ erase_screen©r Úargrr r r ÚDoErasewó    ÿr9cCrr)rÚerase_end_of_liner r r r ÚDoEraseEndOfLine‚rr<cCr2r3)rrrr;Úerase_start_of_lineÚ erase_liner7r r r Ú DoEraseLine‡r:r?cCrr)rÚ scroll_screenr r r r ÚDoEnableScroll’rrAcCrr)rÚcursor_save_attrsr r r r Ú DoCursorSave—rrCcCrr)rÚcursor_restore_attrsr r r r ÚDoCursorRestoreœrrEcCs6|jd}t|j ¡ƒ}t|j ¡ƒ}| ||¡dSr)rrrÚscroll_screen_rows)r rÚr2Úr1r r r ÚDoScrollRegion¡s rIcCs|jd}|j ¡}dSr)rr)r rÚmoder r r ÚDoMode¨s rKcCsB|jd}|g|_tddƒ}| |jd|jd¡| ¡dS)NrÚlogÚaú,Ú )rÚopenÚwriterÚ current_stateÚclose)r rÚfoutr r r ÚDoLog®s   rUc@seZdZdZddd„ZdS)Útermz²This 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. ééPcOs"tjj|||g|¢Ri|¤ŽdSr)rÚ__init__©Úselfr-r,ÚargsÚkwargsr r r rY½s"z term.__init__N©rWrX)Ú__name__Ú __module__Ú __qualname__Ú__doc__rYr r r r rV¶srVc@sZeZdZdZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dS)ÚANSIz©This 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. rWrXcOsxtj|||g|¢Ri|¤Žt d|g¡|_|j td¡|j dtd¡|j dddd¡|j dtd¡|j dddd¡|j dddd¡|j  dddd¡|j  dddd¡|j d dt d¡|j d dt d¡|j d dt d¡|j d dt d¡|j d dt d¡|j dddd¡|j dddd¡|j ddd¡|j dddd¡|j ddt d¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j dd|jd¡|j dddd¡|j  tjdtd¡|j  tjdtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddtd¡|j ddt d¡|j dd|jd¡|j d d|j!d¡|j  tjdtd!¡|j  tjd!td!¡|j dd!|j"d¡|j d"d!|j"d¡|j d#ddd$¡|j d$td¡|j  tjd$td%¡|j  tjd%td%¡|j d%td¡|j dd%t#d¡|j d&d%t#d¡|j dd%t$d¡|j dd%|jd¡|j d d%|j!d¡|j d#d%dd'¡|j d'td¡|j  tjd'td(¡|j  tjd(td(¡|j d(td¡|j dd(|jd¡|j d d(|j!d¡|j d#d(dd'¡dS))NÚINITúÚESCú(ÚG0SCSú)ÚG1SCSÚAB012Ú7Ú8ÚMú>ú<ú=ú#ÚGRAPHICS_POUNDú[ÚELBÚHÚDÚBÚCÚAÚJÚKr-Úmú?ÚMODECRAPÚNUMBER_1ÚlÚqÚ MODECRAP_NUMÚhú;Ú SEMICOLONÚNUMBER_2ÚfÚ SEMICOLON_XÚNUMBER_X)%rVrYrÚstateÚset_default_transitionrUÚadd_transition_anyr Úadd_transitionÚadd_transition_listrCrEr&r/rr r#r(r1r<rAÚdo_sgrÚstringÚdigitsrrrr!r$r)r9r?rKÚ do_decscaÚ do_modecrapr.rIrZr r r rYÆs|z ANSI.__init__cCs$t|tƒr | |¡}|j |¡dS)z4Process a single character. Called by :meth:`write`.N)Ú isinstanceÚbytesÚ_decoder‹Úprocess)r[r,r r r r˜rz ANSI.processcCs| |¡dSr)rQ)r[rr r r Ú process_listszANSI.process_listcCs,t|tƒr | |¡}|D]}| |¡q dS)zaProcess text, writing it to the virtual screen while handling ANSI escape codes. N)r•r–r—r˜)r[Úsr,r r r rQ#s   ÿz ANSI.writecCsdSrr )r[r r r Úflush,sz ANSI.flushcCsØt|tƒr | |¡}|d}|dkr| ¡dS|dkr"| ¡dS|ttjƒkr/| ¡dS|  |j |j |¡|j }|j }|  ¡||j krj|  ¡||j krY| |j d¡dS| ¡| |j d¡| ¡dSdS)zÏThis 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ú NrOr)r•r–r—ÚcrÚcrlfÚchrrÚBSrÚput_absÚcur_rÚcur_cr"rr*Ú scroll_upr>)r[ÚchÚold_rÚold_cr r r r/s0     ùz ANSI.write_chcCó|jd}|g|_dS)z&Select Graphic Rendition, e.g. color. rN©r©r[r rr r r rPrz ANSI.do_sgrcCr¨)z'Select character protection attribute. rNr©rªr r r r“UrzANSI.do_decscacCr¨)z¿Handler 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. rNr©rªr r r r”Zs  zANSI.do_modecrapNr^) r_r`rarbrYr˜r™rQr›rrr“r”r r r r rcÁs S ! rc)rbÚrrr‘r rrrrr r!r#r$r&r(r)r.r/r1r9r<r?rArCrErIrKrUrVrcr r r r Ús<