o
     JAfé  ã                   @   sX   	 d dl Z d dlZ dd„ ZG dd„ dƒZedkr*dd„ Ze  e¡Zed	e	eƒƒ dS dS )
é    Nc                 C   s¾   	 |   |d |tj|| d ¡ |  ||d tj|| d ¡ |  ||d tj|| d ¡ |   |d |tj|| d ¡ |  ||tj¡ |  ||tj¡ |  ||tj¡ |  ||tj	¡ d S ©Né   )
ZvlineÚcursesZ	ACS_VLINEZhlineZ	ACS_HLINEÚaddchZACS_ULCORNERZACS_URCORNERZACS_LRCORNERZACS_LLCORNER)ÚwinÚulyÚulxZlryZlrx© r	   ú%/usr/lib/python3.10/curses/textpad.pyÚ	rectangle   s   r   c                   @   sJ   e Zd Z	 ddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zddd„Z	dS )ÚTextboxFc                 C   s.   || _ || _|  ¡  d| _d | _| d¡ d S r   )r   Úinsert_modeÚ_update_max_yxÚstripspacesÚlastcmdZkeypad)Úselfr   r   r	   r	   r
   Ú__init__+   s   zTextbox.__init__c                 C   s&   | j  ¡ \}}|d | _|d | _d S r   )r   ZgetmaxyxÚmaxyÚmaxx)r   r   r   r	   r	   r
   r   3   s   
zTextbox._update_max_yxc                 C   s^   	 |   ¡  | j}	 tj | j ||¡¡tjjkr#t| j|d ƒ}	 |S |dkr*	 |S |d }q	)NTr   r   )r   r   r   Úasciir   ÚinchZSPÚmin)r   ÚyZlastr	   r	   r
   Ú_end_of_line8   s   ýÿúzTextbox._end_of_linec                 C   sÊ   |   ¡  | j ¡ \}}d }|| jk s|| jk rW| jr| j ¡ }z| j |¡ W n
 tj	y1   Y nw | jr;tj
 |¡s<n|}| j ¡ \}}|d u rM||f}|| jk s|| jk s|d urc| jj|Ž  d S d S ©N)r   r   Úgetyxr   r   r   r   r   r   Úerrorr   ÚisprintÚmove)r   Úchr   ÚxZbackyxZoldchr	   r	   r
   Ú_insert_printable_charF   s*   
ÿðÿzTextbox._insert_printable_charc                 C   sR  	 |   ¡  | j ¡ \}}|| _tj |¡r&|| jk s|| jk r$|  	|¡ dS |tjj
kr5| j |d¡ dS |tjjtjtjjtjfv r‚|dkrQ| j ||d ¡ n!|dkrVn| jrh| j |d |  |d ¡¡ n
| j |d | j¡ |tjjtjfv r€| j ¡  dS |tjjkr| j ¡  dS |tjjkr®| jr¤| j ||  |¡¡ dS | j || j¡ dS |tjjtjfv rÚ|| jk rÇ| j ||d ¡ dS || jkrÏ	 dS | j |d d¡ dS |tjjkrâdS |tjjkrÿ| jdkrïdS || jk rý| j |d d¡ dS |tjjkr(|dkr|  |¡dkr| j ¡  dS | j ||¡ | j ¡  dS |tjjkr6| j ¡  dS |tjjtjfv ri|| jk rg| j |d |¡ ||  |d ¡krg| j |d |  |d ¡¡ dS |tjj krw| j !¡  dS |tjj"tj#fv r§|dkr§| j |d |¡ ||  |d ¡kr§| j |d |  |d ¡¡ dS )Nr   r   )$r   r   r   r   r   r   r   r   r   r!   ZSOHr   ZSTXZKEY_LEFTZBSZKEY_BACKSPACEr   r   ZdelchZEOTZENQZACKZ	KEY_RIGHTZBELÚNLZVTZdeletelnZclrtoeolZFFÚrefreshZSOZKEY_DOWNZSIZinsertlnZDLEZKEY_UP)r   r   r   r    r	   r	   r
   Ú
do_command_   s’   
8É6Ë
+Ö
)Ø&Ü$Ý
!
àãä

ë
ð
ò
ôù
û
zTextbox.do_commandc              
   C   s¤   	 d}|   ¡  t| jd ƒD ]A}| j |d¡ |  |¡}|dkr$| jr$qt| jd ƒD ]}| jr6||kr6 n|tt	j
 
| j ||¡¡ƒ }q+| jdkrO|d }q|S )NÚ r   r   Ú
)r   Úranger   r   r   r   r   r   Úchrr   r   r   )r   Úresultr   Ústopr    r	   r	   r
   Úgather    s    
 
€zTextbox.gatherNc                 C   s@   	 	 | j  ¡ }|r||ƒ}|sq|  |¡s	 |  ¡ S | j  ¡  qr   )r   Zgetchr$   r#   r+   )r   Úvalidater   r	   r	   r
   Úedit±   s   


ÿøzTextbox.edit)Fr   )
Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r$   r+   r-   r	   r	   r	   r
   r      s    
Ar   Ú__main__c                 C   sf   d\}}d\}}|   |d |d¡ t ||||¡}t| |d |d || || ƒ |  ¡  t|ƒ ¡ S )N)é	   é   )é   é   é   zUse Ctrl-G to end editing.r   )Zaddstrr   Znewwinr   r#   r   r-   )ZstdscrZncolsZnlinesr   r   r   r	   r	   r
   Útest_editbox¿   s    r7   zContents of text box:)
r   Zcurses.asciir   r   r.   r7   ÚwrapperÚstrÚprintÚreprr	   r	   r	   r
   Ú<module>   s     ,
	õ