
    RhJ                         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             yy)	z:Simple textbox editing widget with Emacs-like keybindings.    Nc                 d   | j                  |dz   |t        j                  ||z
  dz
         | j                  ||dz   t        j                  ||z
  dz
         | j                  ||dz   t        j                  ||z
  dz
         | j                  |dz   |t        j                  ||z
  dz
         | j                  ||t        j                         | j                  ||t        j                         | j                  ||t        j                         | j                  ||t        j                         y)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        %/usr/lib/python3.12/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
y)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
    c                 ~    || _         || _        | j                          d| _        d | _        |j                  d       y Nr   )r   insert_mode_update_max_yxstripspaceslastcmdkeypad)selfr   r   s      r   __init__zTextbox.__init__+   s7    &

1r   c                 f    | j                   j                         \  }}|dz
  | _        |dz
  | _        y r   )r   getmaxyxmaxymaxx)r    r$   r%   s      r   r   zTextbox._update_max_yx3   s.    XX&&(
d1H	1H	r   c                 8   | j                          | j                  }	 t        j                  j                  | j                  j                  ||            t        j                  j                  k7  rt        | j                  |dz         }	 |S |dk(  r	 |S |dz
  }~)zuGo to the location of the first blank on the given line,
        returning the index of the last non-blank character.r   r   )r   r%   r   asciir   inchSPmin)r    ylasts      r   _end_of_linezTextbox._end_of_line8   s     	yy||!!$((--4"89V\\__L499d1f-   !8D r   c                 n   | j                          | j                  j                         \  }}d }|| j                  k  s|| j                  k  r| j
                  r| j                  j                         }	 | j                  j                  |       | j
                  rt        j                  j                        snE|}| j                  j                         \  }}|||f}|| j                  k  r|| j                  k  r| | j                  j                  |  y y # t        j                  $ r Y w xY w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$))mq499}r" ##6<<+?+?+FBXX^^%FQ~A! $))mq499}$ DHHMM6"  << s   5D D43D4c                    | j                          | j                  j                         \  }}|| _        t        j
                  j                  |      r0|| j                  k  s|| j                  k  r| j                  |       y|t        j
                  j                  k(  r| j                  j                  |d       y|t        j
                  j                  t        j                  t        j
                  j                  t        j                  t        j
                  j                   fv r|dkD  r | j                  j                  ||dz
         nm|dk(  rng| j"                  r2| j                  j                  |dz
  | j%                  |dz
               n)| j                  j                  |dz
  | j                         |t        j
                  j                  t        j                  t        j
                  j                   fv r| j                  j'                          y|t        j
                  j(                  k(  r| j                  j'                          y|t        j
                  j*                  k(  r_| j"                  r,| j                  j                  || j%                  |             y| j                  j                  || j                         y|t        j
                  j,                  t        j.                  fv r`|| j                  k  r | j                  j                  ||dz          y|| j                  k(  r	 y| j                  j                  |dz   d       y|t        j
                  j0                  k(  ry|t        j
                  j2                  k(  r?| j                  dk(  ry|| j                  k  r| j                  j                  |dz   d       y|t        j
                  j4                  k(  rk|dk(  r/| j%                  |      dk(  r| j                  j7                          y| j                  j                  ||       | j                  j9                          y|t        j
                  j:                  k(  r| j                  j=                          y|t        j
                  j>                  t        j@                  fv rw|| j                  k  rg| j                  j                  |dz   |       || j%                  |dz         kD  r1| j                  j                  |dz   | j%                  |dz                y|t        j
                  jB                  k(  r| j                  jE                          y|t        j
                  jF                  t        jH                  fv rl|dkD  rg| j                  j                  |dz
  |       || j%                  |dz
        kD  r1| j                  j                  |dz
  | j%                  |dz
               y)z!Process a single editing command.r   r   )%r   r   r0   r   r   r'   r2   r$   r%   r8   SOHr3   STXKEY_LEFTBSKEY_BACKSPACEDELr   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<<#499}DII++B/v u 6<<###HHMM!Qr q FLL$$V__LLOO((LL$$& & 1ua1%a!!ac4#4#4QqS#9:ac499-flloov';';V\\=M=MNN V U 6<<###HHNNR Q 6<<###a!2!21!56L I a+H G FLL$$f&6&677499}a1%B A dii> ; ac1%: 9 6<<###6<<??"yyA~TYYac1%, + 6<<??"Av$++A.!3!!#& ! a#!!#  6<<??"HH  FLLOOV__55499}ac1%t((1--HHMM!A#t'8'81'=>  6<<??"HH  FLL$$fmm441uac1%t((1--HHMM!A#t'8'81'=>r   c                    d}| j                          t        | j                  dz         D ]  }| j                  j	                  |d       | j                  |      }|dk(  r| j                  rBt        | j                  dz         D ]Z  }| j                  r||kD  r nG|t        t        j                  j                  | j                  j                  ||                  z   }\ | j                  dkD  s|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    tyy{# 
	'AHHMM!Q$$Q'DqyT--499Q;' O##D#fll&8&8q!9L&M"NNO yy1}$
	' r   Nc                     	 | j                   j                         }|r ||      }|s(| j                  |      s	 | j	                         S | j                   j                          d)z2Edit in the widget window and collect the results.)r   getchrR   rK   rZ   )r    validater4   s      r   editzTextbox.edit   sY    !Bb\??2&{{} HH r   )Fr/   )__name__
__module____qualname____doc__r!   r   r-   r8   rR   rZ   r^    r   r   r   r      s,    .
#2BH"r   r   __main__c                     d\  }}d\  }}| j                  |dz
  |d       t        j                  ||||      }t        | |dz
  |dz
  ||z   ||z          | j	                          t        |      j                         S )N)	      )         zUse Ctrl-G to end editing.r   )addstrr   newwinr   rK   r   r^   )stdscrncolsnlinesr   r   r   s         r   test_editboxrp      sz    vSc!eS">?mmFE34&#a%QfcEkBs|  ""r   zContents of text box:)rb   r   curses.asciir   r   r_   rp   wrapperstrprintreprrc   r   r   <module>rv      sU    @  -l l\ z# &..
&C	
!49- r   