eaiovnaovbqoebvqoeavibavo 3 .ù]‘/ã@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|jƒdS)Nr)ÚmemoryÚwrite_chÚ input_symbol)Úfsmr©r ú/usr/lib/python3.6/ANSI.pyÚDoEmit$s r cCs|jj|jƒdS)N)rÚappendr)rr r r Ú DoStartNumber)sr cCs$|jjƒ}||j}|jj|ƒdS)N)rÚpoprr )rÚnsr r r Ú DoBuildNumber-s  rcCs|jd}|jƒdS)Nr)rÚ cursor_back)rrr r r Ú DoBackOne3s rcCs&t|jjƒƒ}|jd}|j|ƒdS)Nr)Úintrrr)rÚcountrr r r ÚDoBack8s rcCs|jd}|jƒdS)Nr)rÚ cursor_down)rrr r r Ú DoDownOne>s rcCs&t|jjƒƒ}|jd}|j|ƒdS)Nr)rrrr)rrrr r r ÚDoDownCs rcCs|jd}|jƒdS)Nr)rÚcursor_forward)rrr r r Ú DoForwardOneIs rcCs&t|jjƒƒ}|jd}|j|ƒdS)Nr)rrrr)rrrr r r Ú DoForwardNs rcCs|jd}|jƒdS)Nr)rZcursor_up_reverse)rrr r r Ú DoUpReverseTs rcCs|jd}|jƒdS)Nr)rÚ cursor_up)rrr r r ÚDoUpOneYs rcCs&t|jjƒƒ}|jd}|j|ƒdS)Nr)rrrr)rrrr r r ÚDoUp^s rcCs6t|jjƒƒ}t|jjƒƒ}|jd}|j||ƒdS)Nr)rrrÚ cursor_home)rÚcÚrrr r r ÚDoHomeds r#cCs"d}d}|jd}|j||ƒdS)Nrr)rr )rr!r"rr r r Ú DoHomeOriginks r$cCs|jd}|jƒdS)Nr)rÚ erase_down)rrr r r Ú DoEraseDownrs r&cCsPt|jjƒƒ}|jd}|dkr*|jƒn"|dkr<|jƒn|dkrL|jƒdS)Nrré)rrrr%Zerase_upZ erase_screen)rÚargrr r r ÚDoErasews   r)cCs|jd}|jƒdS)Nr)rÚerase_end_of_line)rrr r r ÚDoEraseEndOfLine‚s r+cCsPt|jjƒƒ}|jd}|dkr*|jƒn"|dkr<|jƒn|dkrL|jƒdS)Nrrr')rrrr*Zerase_start_of_lineÚ erase_line)rr(rr r r Ú DoEraseLine‡s   r-cCs|jd}|jƒdS)Nr)rZ scroll_screen)rrr r r ÚDoEnableScroll’s r.cCs|jd}|jƒdS)Nr)rZcursor_save_attrs)rrr r r Ú DoCursorSave—s r/cCs|jd}|jƒdS)Nr)rZcursor_restore_attrs)rrr r r ÚDoCursorRestoreœs r0cCs6|jd}t|jjƒƒ}t|jjƒƒ}|j||ƒdS)Nr)rrrZscroll_screen_rows)rrZr2Zr1r r r ÚDoScrollRegion¡s r1cCs|jd}|jjƒ}dS)Nr)rr)rrÚmoder r r ÚDoMode¨s r3cCsB|jd}|g|_tddƒ}|j|jd|jdƒ|jƒdS)NrÚlogÚaú,Ú )rÚopenÚwriterZ current_stateÚclose)rrZfoutr r r ÚDoLog®s   r;c@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. ééPcOstjj|||f|ž|ŽdS)N)rÚ__init__)Úselfr"r!ÚargsÚkwargsr r r r?½sz term.__init__N)r=r>)Ú__name__Ú __module__Ú __qualname__Ú__doc__r?r r r r r<¶sr<c@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. r=r>cOsrtj|||f|ž|Žtjd|gƒ|_|jjtdƒ|jjdtdƒ|jjddddƒ|jjdtdƒ|jjddddƒ|jjddddƒ|jj ddddƒ|jj ddddƒ|jjd dt dƒ|jjd dt dƒ|jjd dt dƒ|jjd dt dƒ|jjd dt dƒ|jjddddƒ|jjddddƒ|jjdddƒ|jjddddƒ|jjddt dƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjdd|jdƒ|jjddddƒ|jj tjdtdƒ|jj tjdtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddtdƒ|jjddt dƒ|jjdd|jdƒ|jjd d|j!dƒ|jj tjdtd!ƒ|jj tjd!td!ƒ|jjdd!|j"dƒ|jjd"d!|j"dƒ|jjd#ddd$ƒ|jjd$tdƒ|jj tjd$td%ƒ|jj tjd%td%ƒ|jjd%tdƒ|jjdd%t#dƒ|jjd&d%t#dƒ|jjdd%t$dƒ|jjdd%|jdƒ|jjd d%|j!dƒ|jjd#d%dd'ƒ|jjd'tdƒ|jj tjd'td(ƒ|jj tjd(td(ƒ|jjd(tdƒ|jjdd(|jdƒ|jjd d(|j!dƒ|jjd#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)%r<r?rÚstateZset_default_transitionr;Zadd_transition_anyr Zadd_transitionZadd_transition_listr/r0rr$rrrrr&r+r.Údo_sgrÚstringZdigitsr rrrrrr)r-r3Ú do_decscaÚ do_modecrapr#r1)r@r"r!rArBr r r r?Æs|z ANSI.__init__cCs$t|tƒr|j|ƒ}|jj|ƒdS)z4Process a single character. Called by :meth:`write`.N)Ú isinstanceÚbytesÚ_decoderaÚprocess)r@r!r r r ris  z ANSI.processcCs|j|ƒdS)N)r9)r@r\r r r Ú process_listszANSI.process_listcCs0t|tƒr|j|ƒ}x|D]}|j|ƒqWdS)zaProcess text, writing it to the virtual screen while handling ANSI escape codes. N)rfrgrhri)r@Úsr!r r r r9#s   z ANSI.writecCsdS)Nr )r@r r r Úflush,sz ANSI.flushcCsÒt|tƒr|j|ƒ}|d}|dkr0|jƒdS|dkrD|jƒdS|ttjƒkr^|jƒdS|j |j |j |ƒ|j }|j }|j ƒ||j krÎ|j ƒ||j kr°|j|j dƒn|jƒ|j|j dƒ|jƒ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ú Nr7r)rfrgrhZcrZcrlfÚchrrZBSrZput_absZcur_rZcur_crrr Z scroll_upr,)r@ZchZold_rZold_cr r r r/s.    z ANSI.write_chcCs|jd}|g|_dS)z&Select Graphic Rendition, e.g. color. rN)r)r@rrr r r rbPs z ANSI.do_sgrcCs|jd}|g|_dS)z'Select character protection attribute. rN)r)r@rrr r r rdUs 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. rN)r)r@rrr r r reZs zANSI.do_modecrapN)r=r>) rCrDrErFr?rirjr9rlrrbrdrer r r r rGÁs S !rG)rFÚrrrcr r rrrrrrrrrrr#r$r&r)r+r-r.r/r0r1r3r;r<rGr r r r Ús: