U
    
W[                     @   s   d Z zddlZddlmZ W n$ ek
r@   ddlZddlZY nX ddlZddlm	Z	 da
d\aadZ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W#000000z#c40000z#00c400z#c4c400z#000080z#c400c4z#00c4c4z#c4c4c4z#626262z#ff0000z#00ff00z#ffff00z#0000ffz#ff00ffz#00ffffz#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| f|| 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 )NZCourier
   )ZfamilysizeZ	linespacewidthP   height   callbackr   )bgr   r   r   )Z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>2       z%VT100Frame.__init__.<locals>.<lambda>z<Up>z<Down>z<Left>z<Right>r   greenr   Zoutline)-tkFontZFontttyFontmaxmapZmeasurestringZascii_lettersZdigits	fontWidthintZmetrics
fontHeightgetr   r   r   TkinterFrame__init__ZCanvascanvasZpackZTOPZBOTHZbind
keyPressed	upPresseddownPressedleftPressedrightPressedZfocusr   Z
AnsiParserZ	ColorTextZWHITEZBLACK
ansiParserwriteStringparseCursor
parseEraser#   r   create_rectanglecursor)selfargskwr   hr"   r"   r$   r4   #   s4    




zVT100Frame.__init__c                 C   s\   |t  d }|t d }|t  d }|t d }| j||||}	|	D ]}
| j|
 qFd S )Nr      )r.   r0   r5   find_overlappingdelete)rA   ZsxZsyexZeyZcsxZcsyZcexZceyitemsitemr"   r"   r$   _deleteF   s    zVT100Frame._deletec                    s    j  jkrRd _   jd7  _ j jkrR fdd j D    jd8  _ j t d } jt d } j|||d |d }|r fdd|D  |rʈ jj	|||t d |t d ||d  jj
||tjt||d   j d7  _ d S )	Nr   r   c                    s   g | ]} j |d t qS r   r5   Zmover0   .0r#   rA   r"   r$   
<listcomp>T   s     z%VT100Frame._write.<locals>.<listcomp>   c                    s   g | ]} j |qS r"   )r5   rG   )rO   rJ   rP   r"   r$   rQ   Z   s     r(   )Zanchorfonttextr   )r#   r   r   r   r5   find_allr.   r0   rF   r?   Zcreate_textr2   ZNWr*   )rA   chfgr   canvasXcanvasYrI   r"   rP   r$   _writeO   s    (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(   )r;   ZparseStringr5   rG   r@   r#   r.   r   r0   r?   lower)rA   datarX   rY   r"   r"   r$   write`   s    *zVT100Frame.writec                    s   |j s
d S t|j |jdko&t|j  |jD ]}t|}|dkrL  q.|dkrjjrh jd8  _q.|dkr fddtdD  q.|dkrj	j
d kr҈d	d	jd	 fd
dj D  n j	d7  _	q.|dkrd	_q.d|  krdk r.n q.|  q.d S )Nr         r   	   c                    s   g | ]} d  qS ) )rZ   )rO   indexr   rW   rA   r"   r$   rQ   w   s     z*VT100Frame.writeString.<locals>.<listcomp>r   r   c                    s   g | ]} j |d t qS rL   rM   rN   rP   r"   r$   rQ   {   s               )ZdisplaycolorMaprW   r   rT   ordZbellr#   ranger   r   rK   r   r5   rU   rZ   )rA   irV   r   r"   rc   r$   r<   j   s,    


zVT100Frame.writeStringc                    s@  d|kr:|d  |d d  d} fdd|D  d S d}jj }}t|dkrht|d d }|d dkr|dkr||jj n ddjj d_d_n|d dkr|dkrވ||j| n:|dkr d||| d_nd|j| d_n"|d d	kr<|||| | d S )
N;c                    s   g | ]} |  qS r"   )r>   rN   endrA   r"   r$   rQ      s     z)VT100Frame.parseErase.<locals>.<listcomp>r   r   JKP)splitr#   r   lenr/   rK   r   r   )rA   Zerasepartsstartr#   r   r"   rm   r$   r>      s2    
zVT100Frame.parseErasec                 C   s   d}t |dkr,|d dkr,t|d d }|d dkrH|  j|7  _n|d dkrd|  j|8  _n|d dkr||d | _nr|d dkr|d | _nZ|d dkrt |dkrtt|d d d\}}|d8 }|d8 }nd	\}}|| _|| _d S )
Nr   rl   Hr   Ddr   rk   )r   r   )rs   r/   r#   r   r,   rr   )rA   r@   ru   r   r#   r"   r"   r$   r=      s&    
zVT100Frame.parseCursorc                 C   s   | j r|jr|  |j dS r    )r   charrA   Zeventr"   r"   r$   r6      s    zVT100Frame.keyPressedc                 C   s   |  d d S )NzOAr   rz   r"   r"   r$   r7      s    zVT100Frame.upPressedc                 C   s   |  d d S )NzOBr{   rz   r"   r"   r$   r8      s    zVT100Frame.downPressedc                 C   s   |  d d S )NzOCr{   rz   r"   r"   r$   r:      s    zVT100Frame.rightPressedc                 C   s   |  d d S )NzODr{   rz   r"   r"   r$   r9      s    zVT100Frame.leftPressedN)__name__
__module____qualname__r4   rK   rZ   r]   r<   r>   r=   r6   r7   r8   r:   r9   r"   r"   r"   r$   r   "   s   #	
r   )__doc__Ztkinterr2   Ztkinter.fontrS   r)   ImportErrorr-    r   r*   r.   r0   Z	colorKeysrg   r3   r   r"   r"   r"   r$   <module>   s8               