B
    v9aé  ã               @   sR   d dl Z d dlZ dd„ ZG dd„ dƒZedkrNdd„ Ze  e¡Zed	e	eƒƒ 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.7/textpad.pyÚ	rectangle   s    r
   c               @   sH   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 )Nr   )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 )Nr   )r   ZgetmaxyxÚmaxyÚmaxx)r   r   r   r   r   r	   r   3   s    
zTextbox._update_max_yxc             C   s\   |   ¡  | j}xHtj | j ||¡¡tjjkrBt| j|d ƒ}P n
|dkrLP |d }qW |S )Nr   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 }x†|| jk s0|| jk r | jr@| j ¡ }y| j |¡ W n tj	k
rf   Y nX | jrztj
 |¡s|P |}| j ¡ \}}|d kr||f}qW |d k	r¶| jj|Ž  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   sV  |   ¡  | j ¡ \}}|| _tj |¡rJ|| jk s<|| jk rF|  	|¡ n|tjj
krh| j |d¡ nê|tjjtjtjjtjfkr|dkr¢| j ||d ¡ nB|dkr¬n8| jrÐ| j |d |  |d ¡¡ n| j |d | j¡ |tjjtjfkrR| j ¡  nL|tjjkr"| j ¡  n0|tjjkrb| jrN| j ||  |¡¡ n| j || j¡ nð|tjjtjfkrº|| jk r–| j ||d ¡ n || jkr¤n| j |d d¡ n˜|tjjkrÌdS |tjjkr| jdkrêdS || jk rR| j |d d¡ nF|tjjkrZ|dkr@|  |¡dkr@| j ¡  n| j ||¡ | j ¡  nø|tjjkrt| j ¡  nÞ|tjjtjfkrØ|| jk rR| j |d |¡ ||  |d ¡krR| j |d |  |d ¡¡ nz|tjj krò| j !¡  n`|tjj"tj#fkrR|dkrR| j |d |¡ ||  |d ¡krR| 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_   sr    
zTextbox.do_commandc          
   C   s¨   d}|   ¡  x–t| jd ƒD ]„}| j |d¡ |  |¡}|dkrH| jrHqxDt| jd ƒD ]2}| jrl||krlP |tt	j
 
| j ||¡¡ƒ }qXW | jdkr|d }qW |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@   x6| j  ¡ }|r||ƒ}|sq|  |¡s*P | j  ¡  qW |  ¡ S )N)r   Zgetchr"   r!   r)   )r   Zvalidater   r   r   r	   Úedit±   s    

zTextbox.edit)F)N)
Ú__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     r4   zContents of text box:)
r   Zcurses.asciir
   r   r+   r4   ÚwrapperÚstrÚprintÚreprr   r   r   r	   Ú<module>   s    ,	
