ó
ì„eGc           @   sA  d  Z  d d l Z d d l Z d d l Z d d l Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   sq   This implements an ANSI terminal emulator as a subclass of screen.

$Id: ANSI.py 491 2007-12-16 20:04:57Z noah $
iÿÿÿÿNc         C   s!   |  j  d } | j |  j ƒ d  S(   Ni    (   t   memoryt   write_cht   input_symbol(   t   fsmt   screen(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   Emit   s    c         C   s   |  j  j |  j ƒ d  S(   N(   R    t   appendR   (   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   StartNumber   s    c         C   s0   |  j  j ƒ  } | |  j } |  j  j | ƒ d  S(   N(   R    t   popR   R   (   R   t   ns(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   BuildNumber   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_back(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt	   DoBackOne   s    c         C   s3   t  |  j j ƒ  ƒ } |  j d } | j | ƒ d  S(   Ni    (   t   intR    R   R   (   R   t   countR   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoBack$   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_down(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt	   DoDownOne*   s    c         C   s3   t  |  j j ƒ  ƒ } |  j d } | j | ƒ d  S(   Ni    (   R   R    R   R   (   R   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoDown/   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_forward(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoForwardOne5   s    c         C   s3   t  |  j j ƒ  ƒ } |  j d } | j | ƒ d  S(   Ni    (   R   R    R   R   (   R   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt	   DoForward:   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_up_reverse(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoUpReverse@   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t	   cursor_up(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoUpOneE   s    c         C   s3   t  |  j j ƒ  ƒ } |  j d } | j | ƒ d  S(   Ni    (   R   R    R   R   (   R   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoUpJ   s    c         C   sK   t  |  j j ƒ  ƒ } t  |  j j ƒ  ƒ } |  j d } | j | | ƒ d  S(   Ni    (   R   R    R   t   cursor_home(   R   t   ct   rR   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoHomeP   s    c         C   s-   d } d } |  j  d } | j | | ƒ d  S(   Ni   i    (   R    R   (   R   R   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoHomeOriginW   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t
   erase_down(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoEraseDown^   s    c         C   sq   t  |  j j ƒ  ƒ } |  j d } | d k r; | j ƒ  n2 | d k rT | j ƒ  n | d k rm | j ƒ  n  d  S(   Ni    i   i   (   R   R    R   R    t   erase_upt   erase_screen(   R   t   argR   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoErasec   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   erase_end_of_line(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoEraseEndOfLinen   s    c         C   s\   |  j  d } t d k r& | j ƒ  n2 t d k r? | j ƒ  n t d k rX | j ƒ  n  d  S(   Ni    i   i   (   R    R$   t   end_of_linet   start_of_linet
   erase_line(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoEraseLines   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   scroll_screen(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoEnableScroll}   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_save_attrs(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoCursorSave‚   s    c         C   s   |  j  d } | j ƒ  d  S(   Ni    (   R    t   cursor_restore_attrs(   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoCursorRestore‡   s    c         C   sK   |  j  d } t |  j  j ƒ  ƒ } t |  j  j ƒ  ƒ } | j | | ƒ d  S(   Ni    (   R    R   R   t   scroll_screen_rows(   R   R   t   r2t   r1(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoScrollRegionŒ   s    c         C   s    |  j  d } |  j  j ƒ  } d  S(   Ni    (   R    R   (   R   R   t   mode(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   DoMode“   s    c         C   sU   |  j  d } | g |  _  t d d ƒ } | j |  j d |  j d ƒ | j ƒ  d  S(   Ni    t   logt   at   ,s   
(   R    t   opent   writeR   t   current_statet   close(   R   R   t   fout(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   Log™   s
    t   termc           B   s   e  Z d  Z d d d „ Z RS(   sT   This is a placeholder. 
    In theory I might want to add other terminal types.
    i   iP   c         C   s   t  j  j |  | | ƒ d  S(   N(   R   t   __init__(   t   selfR   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyRB   ¥   s    (   t   __name__t
   __module__t   __doc__RB   (    (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyRA   ¡   s   t   ANSIc           B   sJ   e  Z d  Z d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(	   sp   This class encapsulates a generic terminal. It filters a stream and
    maintains the state of a screen object. i   iP   c         C   s@  t  j |  | | ƒ t j d |  g ƒ |  _ |  j j t d ƒ |  j j d t d ƒ |  j j d d d  d ƒ |  j j d t d ƒ |  j j d d d  d ƒ |  j j d d d  d ƒ |  j j
 d d d  d ƒ |  j j
 d d d  d ƒ |  j j d	 d t d ƒ |  j j d
 d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d d  d ƒ |  j j d d d  d ƒ |  j j d d  d ƒ |  j j d d d  d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d d  d ƒ |  j j d d d  d ƒ |  j j
 t j d t d ƒ |  j j
 t j d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t d ƒ |  j j d d t  d ƒ |  j j d d d  d ƒ |  j j d  d d  d ƒ |  j j
 t j d t d! ƒ |  j j
 t j d! t d! ƒ |  j j d d! d  d ƒ |  j j d" d! d  d ƒ |  j j d# d d  d$ ƒ |  j j d$ t d ƒ |  j j
 t j d$ t d% ƒ |  j j
 t j d% t d% ƒ |  j j d% t d ƒ |  j j d d% t! d ƒ |  j j d& d% t! d ƒ |  j j d d% t" d ƒ |  j j d d% d  d ƒ |  j j d  d% d  d ƒ d  S('   Nt   INITs   t   ESCt   (t   G0SCSt   )t   G1SCSt   AB012t   7t   8t   Mt   >t   <t   =t   #t   GRAPHICS_POUNDt   [t   ELBt   Ht   Dt   Bt   Ct   At   Jt   KR   t   mt   ?t   MODECRAPt   NUMBER_1t   lt   qt   MODECRAP_NUMt   ht   ;t	   SEMICOLONt   NUMBER_2t   f(#   RA   RB   t   FSMt   statet   set_default_transitionR@   t   add_transition_anyR   t   add_transitiont   Nonet   add_transition_listR/   R1   R   R   R   R   R   R   R!   R'   R-   t   stringt   digitsR   R
   R   R   R   R   R%   R+   R7   R   R5   (   RC   R   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyRB   ­   sl    c         C   s   |  j  j | ƒ d  S(   N(   Rm   t   process(   RC   R   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyRu   ö   s    c         C   s   |  j  | ƒ d  S(   N(   R<   (   RC   Rd   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   process_listú   s    c         C   s"   x | D] } |  j  | ƒ q Wd  S(   N(   Ru   (   RC   t   sR   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyR<   þ   s    c         C   s   d  S(   N(    (   RC   (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   flush  s    c         C   s^  | d } | d k r d S| d k r4 |  j  ƒ  d S| t t j ƒ k rp |  j ƒ  |  j |  j |  j d ƒ d S| t j	 k r½ t
 d d ƒ } | j d t t | ƒ ƒ d ƒ | j ƒ  d S|  j |  j |  j | ƒ |  j } |  j } |  j ƒ  | |  j k rZ|  j ƒ  | |  j k r0|  j |  j d	 ƒ qZ|  j ƒ  |  j |  j d	 ƒ |  j ƒ  n  d S(
   sË   This puts a character at the current cursor position. cursor
        position if moved forward with wrap-around, but no scrolling is done if
        the cursor hits the lower-right corner of the screen. i    s   Ns   
t    R8   R9   s
   Nonprint: i   (   t   crlft   chrR   t   BSR   t   put_abst   cur_rt   cur_cRs   t	   printableR;   R<   t   strt   ordR>   R   R   R   t	   scroll_upR*   (   RC   t   chR?   t   old_rt   old_c(    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyR     s4    


!
		


(	   RD   RE   RF   RB   Ru   Rv   R<   Rx   R   (    (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyRG   ¨   s   I				(   RF   R   Rl   t   copyRs   R   R   R
   R   R   R   R   R   R   R   R   R   R   R   R!   R%   R'   R+   R-   R/   R1   R5   R7   R@   RA   RG   (    (    (    s(   /usr/lib/python2.7/dist-packages/ANSI.pyt   <module>   s<   																		
						