a ÿé!^‘/ã@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 ú0/usr/lib/python3.9/site-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-s  rcCs|jd}| ¡dSr)rÚ cursor_backr r r r Ú DoBackOne3s rcCs&t|j ¡ƒ}|jd}| |¡dSr)Úintrrr©r Úcountrr r r ÚDoBack8s rcCs|jd}| ¡dSr)rÚ cursor_downr r r r Ú DoDownOne>s rcCs&t|j ¡ƒ}|jd}| |¡dSr)rrrrrr r r ÚDoDownCs rcCs|jd}| ¡dSr)rÚcursor_forwardr r r r Ú DoForwardOneIs rcCs&t|j ¡ƒ}|jd}| |¡dSr)rrrrrr r r Ú DoForwardNs rcCs|jd}| ¡dSr)rZcursor_up_reverser r r r Ú DoUpReverseTs r cCs|jd}| ¡dSr)rÚ cursor_upr r r r ÚDoUpOneYs r"cCs&t|j ¡ƒ}|jd}| |¡dSr)rrrr!rr r r ÚDoUp^s r#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)cCs|jd}| ¡dSr)rÚ erase_downr r r r Ú DoEraseDownrs r+cCsPt|j ¡ƒ}|jd}|dkr*| ¡n"|dkr<| ¡n|dkrL| ¡dS©Nrré)rrrr*Zerase_upZ erase_screen©r Úargrr r r ÚDoErasews   r0cCs|jd}| ¡dSr)rÚerase_end_of_liner r r r ÚDoEraseEndOfLine‚s r2cCsPt|j ¡ƒ}|jd}|dkr*| ¡n"|dkr<| ¡n|dkrL| ¡dSr,)rrrr1Zerase_start_of_lineÚ erase_liner.r r r Ú DoEraseLine‡s   r4cCs|jd}| ¡dSr)rZ scroll_screenr r r r ÚDoEnableScroll’s r5cCs|jd}| ¡dSr)rZcursor_save_attrsr r r r Ú DoCursorSave—s r6cCs|jd}| ¡dSr)rZcursor_restore_attrsr r r r ÚDoCursorRestoreœs r7cCs6|jd}t|j ¡ƒ}t|j ¡ƒ}| ||¡dSr)rrrZscroll_screen_rows)r rZr2Zr1r r r ÚDoScrollRegion¡s r8cCs|jd}|j ¡}dSr)rr)r rÚmoder r r ÚDoMode¨s r:cCsB|jd}|g|_tddƒ}| |jd|jd¡| ¡dS)NrÚlogÚaú,Ú )rÚopenÚwriterZ current_stateÚclose)r rZfoutr r r ÚDoLog®s   rBc@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 rF½sz term.__init__N)rDrE)Ú__name__Ú __module__Ú __qualname__Ú__doc__rFr r r r rC¶srCc@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. rDrEcOsxtj|||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))NZINITúZESCú(ZG0SCSú)ZG1SCSZAB012Ú7Ú8ÚMú>ú<ú=ú#ZGRAPHICS_POUNDú[ZELBÚHÚDÚBÚCÚAÚJÚKr'Úmú?ZMODECRAPZNUMBER_1ÚlÚqZ MODECRAP_NUMÚhú;Z SEMICOLONZNUMBER_2ÚfZ SEMICOLON_XZNUMBER_X)%rCrFrÚstateZset_default_transitionrBZadd_transition_anyr Zadd_transitionZadd_transition_listr6r7r r)rrrr"r+r2r5Údo_sgrÚstringÚdigitsrrrrrr#r0r4r:Ú do_decscaÚ do_modecrapr(r8rGr r r rFÆs|z ANSI.__init__cCs$t|tƒr| |¡}|j |¡dS)z4Process a single character. Called by :meth:`write`.N)Ú isinstanceÚbytesÚ_decoderiÚprocess)rHr&r r r rrs  z ANSI.processcCs| |¡dSr)r@)rHrdr r r Ú process_listszANSI.process_listcCs,t|tƒr| |¡}|D]}| |¡qdS)zaProcess text, writing it to the virtual screen while handling ANSI escape codes. N)rorprqrr)rHÚsr&r r r r@#s  z ANSI.writecCsdSrr )rHr r r Úflush,sz ANSI.flushcCsÒt|tƒr| |¡}|d}|dkr0| ¡dS|dkrD| ¡dS|ttjƒkr^| ¡dS|  |j |j |¡|j }|j }|  ¡||j krÎ|  ¡||j kr°| |j d¡n| ¡| |j d¡| ¡dS)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ú Nr>r)rorprqZcrZcrlfÚchrrZBSrZput_absZcur_rZcur_crrr$Z scroll_upr3)rHZchZold_rZold_cr r r r/s.    z ANSI.write_chcCs|jd}|g|_dS)z&Select Graphic Rendition, e.g. color. rN©r©rHr rr r r rjPs z ANSI.do_sgrcCs|jd}|g|_dS)z'Select character protection attribute. rNrxryr r r rmUs zANSI.do_decscacCs|jd}|g|_dS)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. rNrxryr r r rnZs zANSI.do_modecrapN)rDrE) rKrLrMrNrFrrrsr@rurrjrmrnr r r r rOÁs S !rO)rNÚrrrkr rrrrrrrrr r"r#r(r)r+r0r2r4r5r6r7r8r:rBrCrOr r r r Ús: