
    d                         d Z ddlZddlZd Z G d d          Zedk    r*d Z ej        e          Z e	d e
e                     dS dS )	z:Simple textbox editing widget with Emacs-like keybindings.    Nc                 f   |                      |dz   |t          j        ||z
  dz
             |                     ||dz   t          j        ||z
  dz
             |                     ||dz   t          j        ||z
  dz
             |                      |dz   |t          j        ||z
  dz
             |                     ||t          j                   |                     ||t          j                   |                     ||t          j                   |                     ||t          j	                   dS )z^Draw a rectangle with corners at the provided upper-left
    and lower-right coordinates.
       N)
vlinecurses	ACS_VLINEhline	ACS_HLINEaddchACS_ULCORNERACS_URCORNERACS_LRCORNERACS_LLCORNER)winulyulxlrylrxs           /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/curses/textpad.py	rectangler      s
    IIc!eS&*C#IM:::IIc3q5&*C#IM:::IIc3q5&*C#IM:::IIc!eS&*C#IM:::IIc3+,,,IIc3+,,,IIc3+,,,IIc3+,,,,,    c                   @    e Zd ZdZddZd Zd Zd Zd Zd Z	dd
Z
d	S )Textboxad  Editing widget using the interior of a window object.
     Supports the following Emacs-like key bindings:

    Ctrl-A      Go to left edge of window.
    Ctrl-B      Cursor left, wrapping to previous line if appropriate.
    Ctrl-D      Delete character under cursor.
    Ctrl-E      Go to right edge (stripspaces off) or end of line (stripspaces on).
    Ctrl-F      Cursor right, wrapping to next line when appropriate.
    Ctrl-G      Terminate, returning the window contents.
    Ctrl-H      Delete character backward.
    Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
    Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
    Ctrl-L      Refresh screen.
    Ctrl-N      Cursor down; move down one line.
    Ctrl-O      Insert a blank line at cursor location.
    Ctrl-P      Cursor up; move up one line.

    Move operations do nothing if the cursor is at an edge where the movement
    is not possible.  The following synonyms are supported where possible:

    KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N
    KEY_BACKSPACE = Ctrl-h
    Fc                     || _         || _        |                                  d| _        d | _        |                    d           d S Nr   )r   insert_mode_update_max_yxstripspaceslastcmdkeypad)selfr   r   s      r   __init__zTextbox.__init__+   sE    &

1r   c                 f    | j                                         \  }}|dz
  | _        |dz
  | _        d S r   )r   getmaxyxmaxymaxx)r    r$   r%   s      r   r   zTextbox._update_max_yx3   s3    X&&((
d1H	1H			r   c                     |                                   | j        }	 t          j                            | j                            ||                    t          j        j        k    rt          | j        |dz             }n|dk    rn|dz
  }q|S )zuGo to the location of the first blank on the given line,
        returning the index of the last non-blank character.Tr   r   )r   r%   r   asciir   inchSPmin)r    ylasts      r   _end_of_linezTextbox._end_of_line8   s     	y	|!!$(--4"8"899V\_LL49d1f--!8D	 r   c                     |                                   | j                                        \  }}d }|| j        k     s|| j        k     r| j        r| j                                        }	 | j                            |           n# t          j	        $ r Y nw xY w| j        rt          j
                            |          sn:|}| j                                        \  }}|||f}|| j        k     || j        k     | | j        j        |  d S d S N)r   r   getyxr$   r%   r   r(   r
   r   errorr'   isprintmove)r    chr+   xbackyxoldchs         r   _insert_printable_charzTextbox._insert_printable_charF   s&   !!A$)mmq49}} (r""""<   # 6<+?+?+F+F BX^^%%FQ~A! $)mmq49}}$ DHM6"""" s   *B BBc                 
   |                                   | j                                        \  }}|| _        t          j                            |          r-|| j        k     s|| j        k     r| 	                    |           n|t          j        j
        k    r| j                            |d           n|t          j        j        t          j        t          j        j        t          j        fv r|dk    r| j                            ||dz
             nf|dk    rn_| j        r5| j                            |dz
  |                     |dz
                       n#| j                            |dz
  | j                   |t          j        j        t          j        fv r| j                                         n|t          j        j        k    r| j                                         nY|t          j        j        k    rY| j        r0| j                            ||                     |                     n| j                            || j                   n|t          j        j        t          j        fv rX|| j        k     r | j                            ||dz              n|| j        k    rn| j                            |dz   d           nt|t          j        j        k    rdS |t          j        j        k    r8| j        dk    rdS || j        k     r| j                            |dz   d           n|t          j        j        k    rp|dk    r4|                     |          dk    r| j                                         n| j                            ||           | j                                         n|t          j        j        k    r| j                                         n[|t          j        j        t          j        fv rz|| j        k     rn| j                            |dz   |           ||                     |dz             k    r4| j                            |dz   |                     |dz                        n|t          j        j         k    r| j        !                                 n|t          j        j"        t          j#        fv rt|dk    rn| j                            |dz
  |           ||                     |dz
            k    r4| j                            |dz
  |                     |dz
                       dS )z!Process a single editing command.r   r   )$r   r   r0   r   r   r'   r2   r$   r%   r8   SOHr3   STXKEY_LEFTBSKEY_BACKSPACEr   r-   delchEOTENQACK	KEY_RIGHTBELNLVTdeletelnclrtoeolFFrefreshSOKEY_DOWNSIinsertlnDLEKEY_UP)r    r4   r+   r5   s       r   
do_commandzTextbox.do_command_   s   !!A<## 9	?49}}DI++B///6<###HMM!QFL$V_flofFZ[[[1uua1%%%%a! .ac4#4#4QqS#9#9::::ac49---flov';<<<   6<###HNN6<### ,a!2!21!5!56666a++++FL$f&677749}}a1%%%%diac1%%%%6<###16<?""yA~~qTYac1%%%6<?""Avv$++A..!33!!#### a###!!####6<?""HFLOV_55549}}ac1%%%t((1----HMM!A#t'8'81'='=>>>6<?""HFL$fm4441uuac1%%%t((1----HMM!A#t'8'81'='=>>>qr   c                    d}|                                   t          | j        dz             D ]}| j                            |d           |                     |          }|dk    r| j        r@t          | j        dz             D ]Y}| j        r||k    r nI|t          t          j
        
                    | j                            ||                              z   }Z| j        dk    r|dz   }|S )z.Collect and return the contents of the window. r   r   
)r   ranger$   r   r3   r-   r   r%   chrr   r'   r(   )r    resultr+   stopr5   s        r   gatherzTextbox.gather   s    ty{## 
	' 
	'AHMM!Q$$Q''DqyyT-y49Q;'' O O# DE#fl&8&8q!9L9L&M&M"N"NNy1}}$r   Nc                     	 | j                                         }|r ||          }|s*|                     |          sn| j                                          Y|                                 S )z2Edit in the widget window and collect the results.)r   getchrQ   rJ   rY   )r    validater4   s      r   editzTextbox.edit   sx    	!!B "Xb\\ ??2&& H	 {{}}r   )Fr/   )__name__
__module____qualname____doc__r!   r   r-   r8   rQ   rY   r]    r   r   r   r      s         .     
  # # #2? ? ?B  "     r   r   __main__c                     d\  }}d\  }}|                      |dz
  |d           t          j        ||||          }t          | |dz
  |dz
  ||z   ||z              |                                  t          |                                          S )N)	      )         zUse Ctrl-G to end editing.r   )addstrr   newwinr   rJ   r   r]   )stdscrncolsnlinesr   r   r   s         r   test_editboxro      s    vSc!eS">???mFE344&#a%QfcEkBBBs||  """r   zContents of text box:)ra   r   curses.asciir   r   r^   ro   wrapperstrprintreprrb   r   r   <module>ru      s    @ @     - - -i i i i i i i iV z# # # &.
&
&C	E
!4499----- r   