o
    !hF                     @   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   ]/var/www/html/pro-man-master/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    