o
    b$                     @   s   d Z ddlZddlZddlmZ ddlmZ da	d\a
adZi ddd	d
dddddddddddddddddddddd d!d"d#d$d%d&ZG d'd( d(ejZdS ))zHModule to emulate a VT100 terminal in Tkinter.

Maintainer: Paul Swartz
    N   )ansi)NN)brgylmcwBRGYLMCWr   #000000r   z#c40000r   z#00c400r   z#c4c400r   z#000080r	   z#c400c4r
   z#00c4c4r   z#c4c4c4r   z#626262r   z#ff0000r   z#00ff00r   z#ffff00r   z#0000ffr   z#ff00ffr   z#00ffffr   z#ffffffc                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )
VT100Framec                 O   s  t jdddatttjtjtj a	t
t d a|dd| _|dd| _|d	 | _|d	= t	| j  |d< }t| j  |d< }tjj| g|R i | tjd
||d| _| jjtjtjdd | jd| j | jddd  | jd| j | jd| j | jd| j | jd| j | j  t !t j"j#t j"j$| _%| j&| j%_&| j'| j%_'| j(| j%_(d| _)d| _*| jj+ddt	d td ddd| _,d S )NCourier
   )familysize	linespacewidthP   height   callbackr   )bgr   r   r   )sidefillexpandz<Key>z<1>c                 S   s   dS Nbreak )xr&   r&   :/usr/lib/python3/dist-packages/twisted/conch/ui/tkvt100.py<lambda>N   s    z%VT100Frame.__init__.<locals>.<lambda>z<Up>z<Down>z<Left>z<Right>r   greenr"   outline)-tkFontFontttyFontmaxmapmeasurestringascii_lettersdigits	fontWidthintmetrics
fontHeightgetr   r   r   TkinterFrame__init__CanvascanvaspackTOPBOTHbind
keyPressed	upPresseddownPressedleftPressedrightPressedfocusr   
AnsiParser	ColorTextWHITEBLACK
ansiParserwriteStringparseCursor
parseEraser'   r   create_rectanglecursor)selfargskwr   hr&   r&   r(   r=   ?   s8   




zVT100Frame.__init__c                 C   s\   |t  d }|t d }|t  d }|t d }| j||||}	|	D ]}
| j|
 q#d S )Nr      )r6   r9   r?   find_overlappingdelete)rT   sxsyexeycsxcsycexceyitemsitemr&   r&   r(   _deleted   s   zVT100Frame._deletec                    s    j  jkr)d _   jd7  _ j jkr) fdd j D    jd8  _ j t d } jt d } j|||d |d }|rO fdd|D  |re jj	|||t d |t d ||d  jj
||tjt||d   j d7  _ d S )	Nr   r   c                       g | ]} j |d t qS r   r?   mover9   .0r'   rT   r&   r(   
<listcomp>r   s    z%VT100Frame._write.<locals>.<listcomp>   c                    s   g | ]} j |qS r&   )r?   rZ   )rk   rd   rl   r&   r(   rm   x   s    r+   )anchorfonttextr"   )r'   r   r   r   r?   find_allr6   r9   rY   rR   create_textr;   NWr/   )rT   chfgr    canvasXcanvasYrc   r&   rl   r(   _writem   s0   

zVT100Frame._writec                 C   sr   | j | | j| j | jt d }| jt d }| jj	|||t d |t d ddd| _| j
| j d S )Nr   r*   r+   )rN   parseStringr?   rZ   rS   r'   r6   r   r9   rR   lower)rT   datarw   rx   r&   r&   r(   write   s   

zVT100Frame.writec                    s  |j sd S t|j |jdkot|j  |jD ]u}t|}|dkr&  q|dkr5jr4 jd8  _q|dkrG fddtdD  q|dkrqj	j
d krid	d	jd	 fd
dj D  q j	d7  _	q|dkryd	_qd|  krdk rn q|  qd S )Nr         r   	   c                    s   g | ]	} d  qS ) )ry   )rk   indexr    rv   rT   r&   r(   rm          z*VT100Frame.writeString.<locals>.<listcomp>r   r   c                    rf   rg   rh   rj   rl   r&   r(   rm      s              )displaycolorMaprv   r    rq   ordbellr'   ranger   r   re   r   r?   rr   ry   )rT   iru   r   r&   r   r(   rO      s6   



zVT100Frame.writeStringc                    sH  d|v r|d  |d d  d} fdd|D  d S d}jj}}t|dkr4t|d d }|d dkr\|dkrJ||jj d S ddjj d_d_d S |d dkr|dkrq||j| d S |dkrd||| d_d S d|j| d_d S |d d	kr|||| | d S d S )
N;c                    s   g | ]	} |  qS r&   )rQ   rj   endrT   r&   r(   rm      r   z)VT100Frame.parseErase.<locals>.<listcomp>r   r   JKP)splitr'   r   lenr7   re   r   r   )rT   erasepartsstartr'   r   r&   r   r(   rQ      s4   


zVT100Frame.parseErasec                 C   s   d}t |dkr|d dkrt|d d }|d dkr%|  j|7  _d S |d dkr4|  j|8  _d S |d dkrA|d | _d S |d dkrN|d | _d S |d dkr}t |dkrqtt|d d d\}}|d8 }|d8 }nd	\}}|| _|| _d S d S )
Nr   r   Hr   Ddr   r   )r   r   )r   r7   r'   r   r1   r   )rT   rS   r   r   r'   r&   r&   r(   rP      s(   

zVT100Frame.parseCursorc                 C   s   | j r|jr|  |j dS r$   )r   charrT   eventr&   r&   r(   rD      s   zVT100Frame.keyPressedc                 C      |  d d S )NzOAr   r   r&   r&   r(   rE         zVT100Frame.upPressedc                 C   r   )NzOBr   r   r&   r&   r(   rF      r   zVT100Frame.downPressedc                 C   r   )NzOCr   r   r&   r&   r(   rH      r   zVT100Frame.rightPressedc                 C   r   )NzODr   r   r&   r&   r(   rG      r   zVT100Frame.leftPressedN)__name__
__module____qualname__r=   re   ry   r}   rO   rQ   rP   rD   rE   rF   rH   rG   r&   r&   r&   r(   r   >   s    %	r   )__doc__r3   tkinterr;   tkinter.fontrp   r-    r   r/   r6   r9   	colorKeysr   r<   r   r&   r&   r&   r(   <module>   sT   	
