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ÚwidthéP   Ú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rƒdk rŒn 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   ÿþýüûúùø	÷
öõôóòñð