
     h{d                    .   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 ddl
mZ ej        dk    sJ es
d dlZd d	lmZ d d
lmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 g dZ4dZ5dZ6dZ7dZ8 G d de3          Z9 G d de9          Z: G d d          Z; G d d          Z<e	d+d%            Z=e	d,d&            Z> G d' d(          Z? G d) d*e?          Z@dS )-    )annotationsN)abstractmethod)get_running_loop)contextmanager   )SPHINX_AUTODOC_RUNNINGwin32)windll)Arraypointer)DWORDHANDLE)CallableContextManagerDictIterableIteratorListOptionalTextIOrun_in_executor_with_context)create_win32_eventwait_for_handles)KeyPress)Keys)MouseButtonMouseEventType)INPUT_RECORDKEY_EVENT_RECORDMOUSE_EVENT_RECORDSTD_INPUT_HANDLE
EventTypes   )REVERSE_ANSI_SEQUENCES)Input)
Win32InputConsoleInputReaderraw_modecooked_modeattach_win32_inputdetach_win32_input   c                  B    e Zd ZdZddZeed	d                        ZdS )
_Win32InputBasez;
    Base class for `Win32Input` and `Win32PipeInput`.
    returnNonec                ,    t                      | _        d S N)_Win32Handleswin32_handlesselfs    V/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/prompt_toolkit/input/win32.py__init__z_Win32InputBase.__init__F   s    *__    r   c                    d S r3    r6   s    r8   handlez_Win32InputBase.handleI   s	     	r:   Nr0   r1   r0   r   )__name__
__module____qualname____doc__r9   propertyr   r=   r<   r:   r8   r/   r/   A   s\         - - - -    ^ X  r:   r/   c                       e Zd ZdZdd fdZddZddZddZd dZe	d!d            Z
ddZddZd"dZd#dZd dZe	d$d            Z xZS )%r'   z<
    `Input` class that reads from the Windows console.
    NstdinTextIO | Noner0   r1   c                n    t                                                       t                      | _        d S r3   )superr9   r(   console_input_reader)r7   rF   	__class__s     r8   r9   zWin32Input.__init__T   s-    $6$8$8!!!r:   input_ready_callbackCallable[[], None]ContextManager[None]c                "    t          | |          S )zj
        Return a context manager that makes this input active in the current
        event loop.
        )r+   )r7   rL   s     r8   attachzWin32Input.attachX   s    
 "$(<===r:   c                     t          |           S )z{
        Return a context manager that makes sure that this input is not active
        in the current event loop.
        )r,   r6   s    r8   detachzWin32Input.detach_   s    
 "$'''r:   list[KeyPress]c                N    t          | j                                                  S r3   )listrJ   readr6   s    r8   	read_keyszWin32Input.read_keysf   s    D-2244555r:   c                    d S r3   r<   r6   s    r8   flushzWin32Input.flushi   s    r:   boolc                    dS )NFr<   r6   s    r8   closedzWin32Input.closedl   s    ur:   c                    t                      S r3   )r)   r6   s    r8   r)   zWin32Input.raw_modep   s    zzr:   c                    t                      S r3   )r*   r6   s    r8   r*   zWin32Input.cooked_modes   s    }}r:   intc                >    t           j                                        S r3   )sysrF   filenor6   s    r8   rb   zWin32Input.filenov   s    
 y!!!r:   strc                    dS )Nzwin32-inputr<   r6   s    r8   typeahead_hashzWin32Input.typeahead_hash}   s    }r:   c                8    | j                                          d S r3   )rJ   closer6   s    r8   rg   zWin32Input.close   s    !'')))))r:   r   c                    | j         j        S r3   )rJ   r=   r6   s    r8   r=   zWin32Input.handle   s    (//r:   r3   )rF   rG   r0   r1   )rL   rM   r0   rN   )r0   rN   )r0   rS   r>   )r0   rZ   )r0   r_   )r0   rc   r?   )r@   rA   rB   rC   r9   rP   rR   rW   rY   rD   r\   r)   r*   rb   re   rg   r=   __classcell__)rK   s   @r8   r'   r'   O   s@        9 9 9 9 9 9 9> > > >( ( ( (6 6 6 6       X      " " " "   * * * * 0 0 0 X0 0 0 0 0r:   r'   c                     e Zd ZdZi dej        dej        dej        dej        dej	        dej
        dej        d	ej        d
ej        dej        dej        dej        dej        dej        dej        dej        dej        i dej        dej        dej        dej        dej        dej        dej        dej        dej        dej        dej         dej!        dej"        d ej#        d!ej$        d"ej%        Z&i d#ej'        d$ej(        d%ej)        d&ej*        d'ej+        d(ej,        d)ej-        d*ej.        d+ej/        d,ej0        d-ej1        d.ej2        d/ej3        d0ej4        d1ej5        d2ej6        d3ej7        ej8        ej9        ej:        ej;        ej<        d4Z=d5Z>d6Z?d7Z@d8ZAd9ZBdWdXd?ZCdYd@ZDdZdBZEd[dEZFd\dKZGeHd]dN            ZIeHd^dP            ZJd_dSZKd`dUZLdVS )ar(   z|
    :param recognize_paste: When True, try to discover paste actions and turn
        the event into a BracketedPaste.
                                      	   
                                                               !   "   #   $   %   &   '   (   -   .   p   q   r   s   t   u   v   )w   x   y   z   {   r   r$         r-   Trecognize_pasterZ   r0   r1   c                   d | _         || _        |  t          j                                        r8t          t          j                            t                              | _
        d S t          j        dt          j        t          j        z            | _         t          t          j        | j                             | _
        d S )NzCONIN$)_fdconr   ra   rF   isattyr   r
   kernel32GetStdHandler"   r=   osopenO_RDWRO_BINARYmsvcrtget_osfhandle)r7   r   s     r8   r9   zConsoleInputReader.__init__   s    . 	9 	D !=!=>N!O!OPPDKKK'(BI,CDDDK !5dk!B!BCCDKKKr:   c                J    | j         t          j        | j                    dS dS )zClose fdcon.N)r   r   rg   r6   s    r8   rg   zConsoleInputReader.close   s*    ;"HT[!!!!! #"r:   Iterable[KeyPress]c              #      K   d}t          d          }t          |z  } |            }t           j        gd          sdS t          j                             j        t          |          |t          |                     t           	                    ||                    } fd|D             }t           
                    |                    } j        r                     |          rt          |          }|D ]}g }|rt          |j        t                     r|j        t           j        t           j        hv rx|                    |j                   	 t+          |          }n# t,          $ r d}Y nw xY w|r9t          |j        t                     Y|j        t           j        t           j        hv x|r/t/          t           j        d                    |                    V  ||V  dS |E d{V  dS )z
        Return a list of `KeyPress` instances. It won't return anything when
        there was nothing to read.  (This function doesn't block.)

        http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961(v=vs.85).aspx
        i   r   )timeoutNc                :    g | ]}                     |          S r<   )_insert_key_data).0keyr7   s     r8   
<listcomp>z+ConsoleInputReader.read.<locals>.<listcomp>  s'    CCC3D))#..CCCr:    )r   r   r   r=   r
   r   ReadConsoleInputWr   rU   	_get_keys_merge_paired_surrogatesr   	_is_pasteiter
isinstancer   r   ControlJControlMappenddatanextStopIterationr   BracketedPastejoin)	r7   	max_countrV   arrtypeinput_recordsall_keysgenkr   s	   `        r8   rV   zConsoleInputReader.read   s1      	Qxx*		  q999 	F 	))K//GDMM	
 	
 	
 t];;<< DCCC(CCC 55h??@@ 	 DNN8$<$< 	 x..C     !"15$//!u >>>KK'''! II( ! ! ! !  !"15$//!u >>>  G"4#6FFFFF=GGG# &  s   E//E>=E>	key_pressr   c                    |j         r|S t          |j        t                    rt	          j        |j        d          }nd}t          |j        |          S )z@
        Insert KeyPress data, for vt100 compatibility.
        r   )r   r   r   r   r%   getr   )r7   r   r   s      r8   r   z#ConsoleInputReader._insert_key_data&  sU     > 	imT** 	)-imR@@DDD	t,,,r:   rV   r   r   Array[INPUT_RECORD]Iterator[KeyPress]c              #    K   t          |j                  D ]}||         }|j        t          v rt	          |j        t          |j                           }t          |          t          k    r#|j        r| 	                    |          E d{V  xt          |          t          k    r|                     |          E d{V  dS )zR
        Generator that yields `KeyPress` objects from the input records.
        N)rangevalue	EventTyper#   getattrEventtyper    KeyDown_event_to_key_pressesr!   _handle_mouse)r7   rV   r   iirevs         r8   r   zConsoleInputReader._get_keys4  s       tz"" 	6 	6Aq!B |z))RXz",'?@@ 88///BJ/#99"=========="XX!333#11"555555555!	6 	6r:   key_pressesrS   c              #  n  K   d}| D ]}t          |j        t                     }|od|j        cxk    odk    nc }|od|j        cxk    odk    nc }|rO|rG|j        |j        z                       dd                              d          }t          ||          }n|V  d}|r|}|V  |r|V  dS dS )zm
        Combines consecutive KeyPresses with high and low surrogates into
        single characters
        Nu   u   u   u   z	utf-16-lesurrogatepass)r   r   r   encodedecoder   )r   buffered_high_surrogater   is_textis_high_surrogateis_low_surrogatefullchars          r8   r   z+ConsoleInputReader._merge_paired_surrogatesL  s(      #' 	 	C$SWd333G ' KH,K,K,K,K8,K,K,K,K&J8sw+J+J+J+J(+J+J+J+J& /# 	2 14sw>_==,, 
 #8X66CC1111*.'  *-''				" 	*))))))	* 	*r:   keysc                    d}d}| D ];}t          |j        t                    s|dz  }|j        t          j        k    r|dz  }<|dk    o|dk    S )a<  
        Return `True` when we should consider this list of keys as a paste
        event. Pasted text on windows will be turned into a
        `Keys.BracketedPaste` event. (It's not 100% correct, but it is probably
        the best possible way to detect pasting of text and handle that
        correctly.)
        r   r$   )r   r   r   r   )r   
text_countnewline_countr   s       r8   r   zConsoleInputReader._is_pastem  sh     
 	# 	#AaeT**  a
u%%"!5jAo5r:   r   r    c                	   t          |          t          k    r|j        sJ d}|j        }|j        j        }|                    dd          }|dk    r/|j        | j        v r t          | j        |j                 d          }nR|| j
        v r9| j
        |         t          j        k    rd}t          | j
        |         |          }nt          ||          }|| j        z  s
|| j        z  r|| j        z  r|rt          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j         t          j!        i	}|"                    |j#        |j#                  |_#        || j        z  s|| j        z  r|rt          j        t          j$        t          j        t          j%        t          j        t          j&        t          j        t          j'        t          j        t          j(        t          j        t          j)        t          j        t          j*        t          j+        t          j,        t          j        t          j-        t          j         t          j.        i
}|"                    |j#        |j#                  |_#        || j        z  r|rt          j/        t          j0        t          j        t          j1        t          j        t          j2        t          j        t          j3        t          j        t          j4        t          j        t          j5        t          j        t          j6        t          j        t          j7        t          j+        t          j8        t          j        t          j9        t          j         t          j:        i}|"                    |j#        |j#                  |_#        || j        z  s
|| j        z  r'|r%|j;        dk    rt          t          j<        d          }|| j        z  s
|| j        z  r3|r1|j#        t          j        k    rt          t          j=        d          |gS |r+|| j>        z  }|rt          t          j=        d          |gS |gS g S )zU
        For this `KEY_EVENT_RECORD`, return a list of `KeyPress` instances.
        Nzutf-8r    r   
 )?r   r    r   ControlKeyStateuCharUnicodeCharr   VirtualKeyCodekeycodesr   mappingsr   r   LEFT_CTRL_PRESSEDRIGHT_CTRL_PRESSEDSHIFT_PRESSEDLeftControlShiftLeftRightControlShiftRightUpControlShiftUpDownControlShiftDownHomeControlShiftHomeEndControlShiftEndInsertControlShiftInsertPageUpControlShiftPageUpPageDownControlShiftPageDownr   r   ControlLeftControlRight	ControlUpControlDownControlHome
ControlEndControlInsertDeleteControlDeleteControlPageUpControlPageDownTabBackTab	ShiftLeft
ShiftRightShiftUp	ShiftDown	ShiftHomeShiftEndShiftInsertShiftDeleteShiftPageUpShiftPageDownr   ControlSpaceEscapeLEFT_ALT_PRESSED)r7   r   resultcontrol_key_stateu_char
ascii_charmappingmeta_presseds           r8   r   z(ConsoleInputReader._event_to_key_presses  s    Bxx+++
++:"&.%]]7O<<
 V DM11!$-0A"BBGGT]**=,==  "$-
";VDD!&&11
 "D$::	= %t'>>	=
 "D$66	= 	= 	40
D2,	40	40$.T4T4t8
'G !VZ<<FJ  66	= 4#::	= 	=
 	4+
D-	4+	4+$/T/T/T/t3G !VZ<<FJ t11 	=f 	=$,	4>
DO	4>	4>$-T-T-T-t1G !VZ<<FJ
 "D$::	6 %t'>>	6
 	6 s""d/55F "D$::	7 %t'>>	7
 	7 
dm++T["--v66  		,t/DDL   b116::x Ir:   r!   c                2   |j         }|j        }d}t          j        }|t          z  r |dk    rt
          j        }n<t
          j        }n/|t          k    rt          j	        }n|t          k    rt          j        }|t          z  rt
          j        }||dk    rt
          j        }nt
          j        }d                    |j        |j        t%          |j        j                  t%          |j        j                  g          }t-          t.          j        |          gS )zK
        Handle mouse events. Return a list of KeyPress instances.
        Nr   ;)
EventFlagsButtonStater   NONEMOUSE_WHEELEDr   	SCROLL_UPSCROLL_DOWNFROM_LEFT_1ST_BUTTON_PRESSEDLEFTRIGHTMOST_BUTTON_PRESSEDRIGHTMOUSE_MOVED
MOUSE_MOVE
MOUSE_DOWNMOUSE_UPr   r   rc   MousePositionXYr   r   WindowsMouseEvent)r7   r   event_flagsbutton_state
event_typebuttonr   s          r8   r   z ConsoleInputReader._handle_mouse  s    m~,0
). & 	+a+5

+7

 ;;;$)!999$* $ 	3'2J a+6

 ,4
xx B$&''B$&''	
 
 /6677r:   N)T)r   rZ   r0   r1   r>   )r0   r   )r   r   r0   r   )rV   r   r   r   r0   r   )r   rS   r0   r   )r   rS   r0   rZ   )r   r    r0   rS   )r   r!   r0   rS   )Mr@   rA   rB   rC   r   r%  r$  ControlAControlBControlCControlDControlEControlFControlGControlHControlIr   ControlKControlLr   ControlNControlOControlPControlQControlRControlSControlTControlUControlVControlWControlXControlYControlZControlBackslashControlSquareCloseControlCircumflexControlUnderscore	Backspacer   r	  r  r  r  r   r   r   r  r  r  F1F2F3F4F5F6F7F8F9F10F11F12r   r&  RIGHT_ALT_PRESSEDr   r   r   r9   rg   rV   r   r   staticmethodr   r   r   r   r<   r:   r8   r(   r(      s        """" 	" 		"
 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  	!"" 	#" "$ 	%"& 	'"( 	)"* 	+", 	-". 	/"0 	1"2 	3"4 	5"6 	7"8 	9": 	&;"< 	(="> 	'?"@ 	'A"B 	C" "HJ
DK 	DM 	DH	
 	DI 	DI 	DG 	DJ 	DI 	DK 	DK 	TW 	TW  	TW!" 	TW#$ 	TW%& 	TW'( 	TW)* WWXXX3  H8 MD D D D D" " " "
<  <  <  < |- - - -6 6 6 60 * * * \*@ 6 6 6 \6*B B B BH-8 -8 -8 -8 -8 -8r:   r(   c                  *    e Zd ZdZddZdd	ZddZdS )r4   a  
    Utility to keep track of which handles are connectod to which callbacks.

    `add_win32_handle` starts a tiny event loop in another thread which waits
    for the Win32 handle to become ready. When this happens, the callback will
    be called in the current asyncio event loop using `call_soon_threadsafe`.

    `remove_win32_handle` will stop this tiny event loop.

    NOTE: We use this technique, so that we don't have to use the
          `ProactorEventLoop` on Windows and we can wait for things like stdin
          in a `SelectorEventLoop`. This is important, because our inputhook
          mechanism (used by IPython), only works with the `SelectorEventLoop`.
    r0   r1   c                "    i | _         i | _        d S r3   )_handle_callbacks_remove_eventsr6   s    r8   r9   z_Win32Handles.__init__G  s    @B 24r:   r=   r   callbackrM   c                   j         }|t          d          |                                t                      | j        |<   t                      | j        |<   dfddfdt                     dS )	z7
        Add a Win32 handle to the event loop.
        NInvalid handle.r0   r1   c                 l    	                t                     d S # t                     w xY w)Nloopr   )rt  ry  waits   r8   readyz-_Win32Handles.add_win32_handle.<locals>.readyb  sF    >


,T======,T=====s   
  3c                     t          g          } | u r!t          j                                       d S                                d S r3   )r   r
   r   CloseHandlecall_soon_threadsafe)r'  r=   ry  r{  remove_events    r8   rz  z,_Win32Handles.add_win32_handle.<locals>.waitl  sW     &|V&<==F%%++L999))%00000r:   rx  r>   )r   
ValueErrorremove_win32_handler   rr  r   rs  r   )r7   r=   rt  handle_valuery  r{  r  rz  s    `` @@@@r8   add_win32_handlez_Win32Handles.add_win32_handleN  s     |./// 	  (((!!/7|, *++,8L)	> 	> 	> 	> 	> 	> 	> 	>		1 		1 		1 		1 		1 		1 		1 		1 		1 	%T555555r:   Callable[[], None] | Nonec                   |j         dS 	 | j                            |j                   }t          j                            |           n# t          $ r Y nw xY w	 | j                            |j                   S # t          $ r Y dS w xY w)zt
        Remove a Win32 handle from the event loop.
        Return either the registered handler or `None`.
        N)r   rs  popr
   r   SetEventKeyErrorrr  )r7   r=   events      r8   r  z!_Win32Handles.remove_win32_handley  s    
 <4	,'++FL99E O$$U++++  	 	 	D	
	)--fl;;; 	 	 	44	s#   A
 

AAA: :
BBNr>   )r=   r   rt  rM   r0   r1   )r=   r   r0   r  )r@   rA   rB   rC   r9   r  r  r<   r:   r8   r4   r4   7  s[         4 4 4 4)6 )6 )6 )6V     r:   r4   inputrt  rM   r0   Iterator[None]c              #  v  K   | j         }| j        }|j        t          d          |                    |          }|                    ||           	 dV  |                    |           |r|                    ||           dS dS # |                    |           |r|                    ||           w w xY w)z
    Context manager that makes this input active in the current event loop.

    :param input: :class:`~prompt_toolkit.input.Input` object.
    :param input_ready_callback: Called when the input is ready to read.
    Nrv  r5   r=   r   r  r  r  )r  rt  r5   r=   previous_callbacks        r8   r+   r+     s       'M\F|*+++ &99&AA""68444F))&111 	F**63DEEEEE	F 	F 	))&111 	F**63DEEEE	Fs   B 0B8c              #     K   | j         }| j        }|j        t          d          |                    |          }	 d V  |r|                    ||           d S d S # |r|                    ||           w w xY w)Nrv  r  )r  r5   r=   r  s       r8   r,   r,     s      'M\F|*+++%99&AAF 	F**63DEEEEE	F 	F 	F**63DEEEE	Fs   A A8c                  4    e Zd ZdZdddZddZdd	ZddZdS )r)   z
    ::

        with raw_mode(stdin):
            ''' the windows terminal is now in 'raw' mode. '''

    The ``fileno`` attribute is ignored. This is to be compatible with the
    `raw_input` method of `.vt100_input`.
    Nrb   
int | Noner0   r1   c                r    t          t          j                            t                              | _        d S r3   )r   r
   r   r   r"   r=   )r7   rb   s     r8   r9   zraw_mode.__init__  s&    V_99:JKKLLr:   c                    t                      }t          j                            | j        t          |                     || _        |                                  d S r3   )r   r
   r   GetConsoleModer=   r   original_mode_patch)r7   r  s     r8   	__enter__zraw_mode.__enter__  sF    &&t{GM4J4JKKK*r:   c                    d}d}d}t           j                            | j        | j        j        ||z  |z   z             d S Nr-   r   r$   r
   r   SetConsoleModer=   r  r   r7   ENABLE_ECHO_INPUTENABLE_LINE_INPUTENABLE_PROCESSED_INPUTs       r8   r  zraw_mode._patch  s^    ""!'&&K$!$558NNOP	
 	
 	
 	
 	
r:   aobjectc                Z    t           j                            | j        | j                   d S r3   )r
   r   r  r=   r  )r7   r  s     r8   __exit__zraw_mode.__exit__  s%    &&t{D4FGGGGGr:   r3   )rb   r  r0   r1   r>   )r  r  r0   r1   )r@   rA   rB   rC   r9   r  r  r  r<   r:   r8   r)   r)     s~         M M M M M   

 

 

 

H H H H H Hr:   r)   c                      e Zd ZdZddZdS )r*   zx
    ::

        with cooked_mode(stdin):
            ''' The pseudo-terminal stdin is now used in cooked mode. '''
    r0   r1   c                    d}d}d}t           j                            | j        | j        j        ||z  |z  z             d S r  r  r  s       r8   r  zcooked_mode._patch  s[    ""!'&&K$ #447MMO	
 	
 	
 	
 	
r:   Nr>   )r@   rA   rB   rC   r  r<   r:   r8   r*   r*     s2         

 

 

 

 

 

r:   r*   )r  r/   rt  rM   r0   r  )r  r/   r0   r  )A
__future__r   r   ra   abcr   asyncior   
contextlibr   utilsr   platformr   ctypesr
   r   r   ctypes.wintypesr   r   typingr   r   r   r   r   r   r   r   prompt_toolkit.eventloopr   prompt_toolkit.eventloop.win32r   r   (prompt_toolkit.key_binding.key_processorr   prompt_toolkit.keysr   prompt_toolkit.mouse_eventsr   r   prompt_toolkit.win32_typesr   r    r!   r"   r#   ansi_escape_sequencesr%   baser&   __all__r5  r7  r9  r2  r/   r'   r(   r4   r+   r,   r)   r*   r<   r:   r8   <module>r     s   " " " " " " 				 



       $ $ $ $ $ $ % % % % % % * * * * * *
|w  MMM ! ! ! ! ! ! ! ! ) ) ) ) ) ) ) )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 B A A A A A O O O O O O O O = = = = = = $ $ $ $ $ $ C C C C C C C C              : 9 9 9 9 9          #      e   60 60 60 60 60 60 60 60rl8 l8 l8 l8 l8 l8 l8 l8^U U U U U U U Up F F F F8 F F F F $H $H $H $H $H $H $H $HN
 
 
 
 
( 
 
 
 
 
r:   