U
     T‚g$  ã                   @   sx   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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é
   )ÚfamilyÚsizeZ	linespaceÚwidthéP   Úheighté   Úcallbackr   )Úbgr   r   r   )ZsideÚfillÚexpandz<Key>z<1>c                 S   s   dS ©NÚbreak© )Úxr#   r#   ú</tmp/pip-unpacked-wheel-1_7di8ic/twisted/conch/ui/tkvt100.pyÚ<lambda>N   ó    z%VT100Frame.__init__.<locals>.<lambda>z<Up>z<Down>z<Left>z<Right>r   Úgreen©r   Úoutline)-ÚtkFontZFontÚttyFontÚmaxÚmapZmeasureÚstringÚascii_lettersÚdigitsÚ	fontWidthÚintZmetricsÚ
fontHeightÚgetr   r   r   ÚTkinterÚFrameÚ__init__ZCanvasÚcanvasÚpackZTOPZBOTHÚbindÚ
keyPressedÚ	upPressedÚdownPressedÚleftPressedÚrightPressedZfocusr   Z
AnsiParserZ	ColorTextÚWHITEÚBLACKÚ
ansiParserÚwriteStringÚparseCursorÚ
parseEraser$   r   Úcreate_rectangleÚcursor)ÚselfÚargsÚkwr   Úhr#   r#   r%   r8   ?   sB    




     ÿzVT100Frame.__init__c                 C   s\   |t  d }|t d }|t  d }|t d }| j ||||¡}	|	D ]}
| j |
¡ qFd S )Nr   é   )r2   r4   r9   Úfind_overlappingÚdelete)rI   ZsxZsyÚexZeyZcsxZcsyZcexZceyÚitemsÚitemr#   r#   r%   Ú_deleted   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   ©r9   Úmover4   ©Ú.0r$   ©rI   r#   r%   Ú
<listcomp>r   s     z%VT100Frame._write.<locals>.<listcomp>é   c                    s   g | ]}ˆ j  |¡‘qS r#   )r9   rO   )rX   rR   rY   r#   r%   rZ   x   s     r)   )ÚanchorÚfontÚtextr   )r$   r   r   r   r9   Úfind_allr2   r4   rN   rG   Zcreate_textr6   ZNWr,   )rI   ÚchÚfgr   ÚcanvasXÚcanvasYrQ   r#   rY   r%   Ú_writem   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)   )rC   ÚparseStringr9   rO   rH   r$   r2   r   r4   rG   Úlower)rI   Údatarb   rc   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ròd	ˆ_q.d|  k�rdk r.n q.ˆ |ˆˆ ¡ q.d S )Nr   é   é   r   é	   c                    s   g | ]}ˆ  d ˆˆ ¡‘qS )ú )rd   )rX   Úindex©r   ra   rI   r#   r%   rZ   £   s     z*VT100Frame.writeString.<locals>.<listcomp>r   r   c                    s   g | ]}ˆ j  |d t ¡‘qS rT   rU   rW   rY   r#   r%   rZ   §   s   ÿé   é    é   )ZdisplayÚcolorMapra   r   r^   ÚordZbellr$   Úranger   r   rS   r   r9   r_   rd   )rI   Úir`   r   r#   rn   r%   rD   –   s0    



þ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#   )rF   rW   ©ÚendrI   r#   r%   rZ   ¶   s     z)VT100Frame.parseErase.<locals>.<listcomp>r   r   ÚJÚKÚP)Úsplitr$   r   Úlenr3   rS   r   r   )rI   ZeraseÚpartsÚstartr$   r   r#   rx   r%   rF   ²   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rît |ƒdkrÚtt|d d…  d¡ƒ\}}|d8 }|d8 }nd	\}}|| _|| _d S )
Nr   rw   ÚHr   ÚDÚdr   rv   )r   r   )r~   r3   r$   r   r.   r}   )rI   rH   r€   r   r$   r#   r#   r%   rE   Ï   s&    
zVT100Frame.parseCursorc                 C   s   | j r|jr|   |j¡ dS r!   )r   Úchar©rI   Úeventr#   r#   r%   r<   ê   s    zVT100Frame.keyPressedc                 C   s   |   d¡ d S )NzOA©r   r…   r#   r#   r%   r=   ï   s    zVT100Frame.upPressedc                 C   s   |   d¡ d S )NzOBr‡   r…   r#   r#   r%   r>   ò   s    zVT100Frame.downPressedc                 C   s   |   d¡ d S )NzOCr‡   r…   r#   r#   r%   r@   õ   s    zVT100Frame.rightPressedc                 C   s   |   d¡ d S )NzODr‡   r…   r#   r#   r%   r?   ø   s    zVT100Frame.leftPressedN)Ú__name__Ú
__module__Ú__qualname__r8   rS   rd   rh   rD   rF   rE   r<   r=   r>   r@   r?   r#   r#   r#   r%   r   >   s   %	r   )Ú__doc__r/   Útkinterr6   Ztkinter.fontr]   r+   Ú r   r,   r2   r4   Z	colorKeysrr   r7   r   r#   r#   r#   r%   Ú<module>   s2   ð