o
    Òó·i$  ã                   @   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 )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#   ú^C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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)-Ú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%   r7   ?   s8   




ÿzVT100Frame.__init__c                 C   s\   |t  d }|t d }|t  d }|t d }| j ||||¡}	|	D ]}
| j |
¡ q#d S )Nr   é   )r1   r3   r8   Úfind_overlappingÚdelete)rH   ZsxZsyÚexZeyZcsxZcsyZcexZ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   ©r8   Úmover3   ©Ú.0r$   ©rH   r#   r%   Ú
<listcomp>r   s    z%VT100Frame._write.<locals>.<listcomp>é   c                    s   g | ]}ˆ j  |¡‘qS r#   )r8   rN   )rX   rQ   rY   r#   r%   rZ   x   s    r(   )ÚanchorÚfontÚtextr   )r$   r   r   r   r8   Úfind_allr1   r3   rM   rF   Zcreate_textr5   ZNWr+   )rH   ÚchÚfgr   ÚcanvasXÚcanvasYrP   r#   rY   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(   )rB   ÚparseStringr8   rN   rG   r$   r1   r   r3   rF   Úlower)rH   Ú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 ]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 )ú )rd   )rX   Úindex©r   ra   rH   r#   r%   rZ   £   ó    z*VT100Frame.writeString.<locals>.<listcomp>r   r   c                    rS   rT   rU   rW   rY   r#   r%   rZ   §   s    ÿÿé   é    é   )ZdisplayÚcolorMapra   r   r^   ÚordZbellr$   Úranger   r   rR   r   r8   r_   rd   )rH   Úir`   r   r#   rn   r%   rC   –   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#   )rE   rW   ©ÚendrH   r#   r%   rZ   ¶   ro   z)VT100Frame.parseErase.<locals>.<listcomp>r   r   ÚJÚKÚP)Úsplitr$   r   Úlenr2   rR   r   r   )rH   ZeraseÚpartsÚstartr$   r   r#   ry   r%   rE   ²   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   rx   ÚHr   ÚDÚdr   rw   )r   r   )r   r2   r$   r   r-   r~   )rH   rG   r�   r   r$   r#   r#   r%   rD   Ï   s(   

øzVT100Frame.parseCursorc                 C   s   | j r|jr|   |j¡ dS r!   )r   Úchar©rH   Úeventr#   r#   r%   r;   ê   s   zVT100Frame.keyPressedc                 C   ó   |   d¡ d S )NzOA©r   r†   r#   r#   r%   r<   ï   ó   zVT100Frame.upPressedc                 C   rˆ   )NzOBr‰   r†   r#   r#   r%   r=   ò   rŠ   zVT100Frame.downPressedc                 C   rˆ   )NzOCr‰   r†   r#   r#   r%   r?   õ   rŠ   zVT100Frame.rightPressedc                 C   rˆ   )NzODr‰   r†   r#   r#   r%   r>   ø   rŠ   zVT100Frame.leftPressedN)Ú__name__Ú
__module__Ú__qualname__r7   rR   rd   rh   rC   rE   rD   r;   r<   r=   r?   r>   r#   r#   r#   r%   r   >   s    %	r   )Ú__doc__r.   Útkinterr5   Ztkinter.fontr]   r*   Ú r   r+   r1   r3   Z	colorKeysrs   r6   r   r#   r#   r#   r%   Ú<module>   sT   ÿþýüûúùø	÷
öõôóòñð