o
    Þ­jF  ã                   @   s&   d Z ddlZddlZG dd„ dƒZdS )z(Unified input handler for all platforms.é    Nc                   @   s  e Zd ZdZejdkr"dZdZdZdZ	dZ
dZd	Zd
ZdZdZdZndZdZdZdZ	dZdZ
d	ZdZdZdZdZdd„ Zedefdd„ƒZededefdd„ƒZdedefdd„Zd-d d!„Zd-d"d#„Zdeddfd$d%„Zd-d&d'„Zd-d(d)„Zd*eddfd+d,„ZdS ).ÚTextInputHandlerz6Input handler with platform-specific key code support.Úwin32u   Ã Pu   Ã Hu   Ã Ku   Ã Mu   Ã Súú	z úúz Sz[Bz[Az[Dz[Cz[3~z[ZNc                 C   s   d| _ d| _d S )NÚ r   ©ÚtextÚ_cursor_index©Úself© r   úX/var/www/html/CropPilot/venv/lib/python3.10/site-packages/rich_toolkit/_input_handler.pyÚ__init__*   s   
zTextInputHandler.__init__Úreturnc                 C   s   |   | jd| j… ¡S )z*Visual cursor position in display columns.N)Ú_get_text_widthr
   r   r   r   r   r   Úcursor_left.   s   zTextInputHandler.cursor_leftÚcharc                 C   s"   | sdS t  | ¡}|dv rdS dS )zIGet the display width of a character (1 for normal, 2 for CJK/fullwidth).r   )ÚFÚWé   é   )ÚunicodedataÚeast_asian_width)r   r   r   r   r   Ú_get_char_width3   s   
z TextInputHandler._get_char_widthr
   c                    s   t ‡ fdd„|D ƒƒS )z-Get the total display width of a text string.c                 3   s   � | ]}ˆ   |¡V  qd S )N)r   )Ú.0r   r   r   r   Ú	<genexpr>D   s   € z3TextInputHandler._get_text_width.<locals>.<genexpr>)Úsum)r   r
   r   r   r   r   B   s   z TextInputHandler._get_text_widthc                 C   s   t d| jd ƒ| _d S )Nr   r   )Úmaxr   r   r   r   r   Ú_move_cursor_leftF   s   z"TextInputHandler._move_cursor_leftc                 C   s   t t| jƒ| jd ƒ| _d S ©Nr   )ÚminÚlenr
   r   r   r   r   r   Ú_move_cursor_rightI   s   z#TextInputHandler._move_cursor_rightc                 C   s8   | j d | j… | | j | jd …  | _ |  jd7  _d S r!   r	   )r   r   r   r   r   Ú_insert_charL   s   "ÿzTextInputHandler._insert_charc                 C   sF   | j dkrdS | jd| j d … | j| j d…  | _|  j d8  _ dS )z+Delete character before cursor (backspace).r   Nr   )r   r
   r   r   r   r   Ú_delete_charR   s
   
"ÿzTextInputHandler._delete_charc                 C   s>   | j t| jƒkr
dS | jd| j … | j| j d d…  | _dS )z(Delete character at cursor (delete key).Nr   )r   r#   r
   r   r   r   r   Ú_delete_forward\   s   "ÿz TextInputHandler._delete_forwardÚkeyc                 C   sÎ   || j ks| jr|| jkr|  ¡  d S || jks | jr&|| jkr&|  ¡  d S || jkr1|  ¡  d S || jkr<|  	¡  d S || j
| j| j| j| jfv rLd S tjdkr[|r[|d dv r[d S |D ]}|  |¡ q]d S )Nr   r   )ú õ   Ã )ÚBACKSPACE_KEYÚALT_BACKSPACEr&   Ú
DELETE_KEYÚ
ALT_DELETEr'   ÚLEFT_KEYr    Ú	RIGHT_KEYr$   ÚUP_KEYÚDOWN_KEYÚ	ENTER_KEYÚSHIFT_TAB_KEYÚTAB_KEYÚsysÚplatformr%   )r   r(   r   r   r   r   Ú
handle_keye   s0   
ÿ


ûÿzTextInputHandler.handle_key)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   r7   r2   r1   r/   r0   r-   r+   r5   r4   r3   r,   r.   r   ÚpropertyÚintr   ÚstaticmethodÚstrr   r   r    r$   r%   r&   r'   r8   r   r   r   r   r      sJ    





	r   )r<   r6   r   r   r   r   r   r   Ú<module>   s    