
    QfLd                    "   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 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l-m.Z. ddl/m0Z0 g dZ1dZ2dZ3dZ4dZ5 G d de0          Z6 G d de6          Z7 G d d          Z8 G d d          Z9e	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IterableIterator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    L/var/www/html/env/lib/python3.11/site-packages/prompt_toolkit/input/win32.py__init__z_Win32InputBase.__init__=   s    *__    r   c                    d S r0    r3   s    r5   handlez_Win32InputBase.handle@   s	     	r7   Nr-   r.   r-   r   )__name__
__module____qualname____doc__r6   propertyr   r:   r9   r7   r5   r,   r,   8   s\         - - - -    ^ X  r7   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 | Noner-   r.   c                n    t                                                       t                      | _        d S r0   )superr6   r%   console_input_reader)r4   rC   	__class__s     r5   r6   zWin32Input.__init__K   s-    $6$8$8!!!r7   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(   )r4   rI   s     r5   attachzWin32Input.attachO   s    
 "$(<===r7   c                     t          |           S )z{
        Return a context manager that makes sure that this input is not active
        in the current event loop.
        )r)   r3   s    r5   detachzWin32Input.detachV   s    
 "$'''r7   list[KeyPress]c                N    t          | j                                                  S r0   )listrG   readr3   s    r5   	read_keyszWin32Input.read_keys]   s    D-2244555r7   c                    d S r0   r9   r3   s    r5   flushzWin32Input.flush`   s    r7   boolc                    dS )NFr9   r3   s    r5   closedzWin32Input.closedc   s    ur7   c                    t                      S r0   )r&   r3   s    r5   r&   zWin32Input.raw_modeg   s    zzr7   c                    t                      S r0   )r'   r3   s    r5   r'   zWin32Input.cooked_modej   s    }}r7   intc                >    t           j                                        S r0   )sysrC   filenor3   s    r5   r_   zWin32Input.filenom   s    
 y!!!r7   strc                    dS )Nzwin32-inputr9   r3   s    r5   typeahead_hashzWin32Input.typeahead_hasht   s    }r7   c                8    | j                                          d S r0   )rG   closer3   s    r5   rd   zWin32Input.closew   s    !'')))))r7   r   c                    | j         j        S r0   )rG   r:   r3   s    r5   r:   zWin32Input.handlez   s    (//r7   r0   )rC   rD   r-   r.   )rI   rJ   r-   rK   )r-   rK   )r-   rP   r;   )r-   rW   )r-   r\   )r-   r`   r<   )r=   r>   r?   r@   r6   rM   rO   rT   rV   rA   rY   r&   r'   r_   rb   rd   r:   __classcell__)rH   s   @r5   r$   r$   F   s@        9 9 9 9 9 9 9> > > >( ( ( (6 6 6 6       X      " " " "   * * * * 0 0 0 X0 0 0 0 0r7   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_pasterW   r-   r.   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   r^   rC   isattyr   r
   kernel32GetStdHandler   r:   osopenO_RDWRO_BINARYmsvcrtget_osfhandle)r4   r   s     r5   r6   zConsoleInputReader.__init__   s    . 	9 	D !=!=>N!O!OPPDKKK'(BI,CDDDK !5dk!B!BCCDKKKr7   c                J    | j         t          j        | j                    dS dS )zClose fdcon.N)r   r   rd   r3   s    r5   rd   zConsoleInputReader.close   s*    ;"HT[!!!!! #"r7   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 r9   )_insert_key_data).0keyr4   s     r5   
<listcomp>z+ConsoleInputReader.read.<locals>.<listcomp>   s'    CCC3D))#..CCCr7    )r   r   r   r:   r
   r   ReadConsoleInputWr   rR   	_get_keys_merge_paired_surrogatesr   	_is_pasteiter
isinstancer   r   ControlJControlMappenddatanextStopIterationr   BracketedPastejoin)	r4   	max_countrS   arrtypeinput_recordsall_keysgenkr   s	   `        r5   rS   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   )r4   r   r   s      r5   r   z#ConsoleInputReader._insert_key_data  sU     > 	imT** 	)-imR@@DDD	t,,,r7   rS   r   r   Array[INPUT_RECORD]Iterator[KeyPress]c              #  ~  K   t          |j                  D ]}||         }|j        t          v rt	          |j        t          |j                           }t          |t                    r#|j        r| 	                    |          E d{V  ut          |t                    r|                     |          E d{V  dS )zR
        Generator that yields `KeyPress` objects from the input records.
        N)rangevalue	EventTyper    getattrEventr   r   KeyDown_event_to_key_pressesr   _handle_mouse)r4   rS   r   iirevs         r5   r   zConsoleInputReader._get_keys+  s       tz"" 	6 	6Aq!B |z))RXz",'?@@ b"233 6
 6#99"==========$677 6#11"555555555!	6 	6r7   key_pressesrP   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          r5   r   z+ConsoleInputReader._merge_paired_surrogatesC  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*.'  *-''				" 	*))))))	* 	*r7   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       r5   r   zConsoleInputReader._is_pasted  sh     
 	# 	#AaeT**  a
u%%"!5jAo5r7   r   r   c                	   t          |t                    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)r4   r   resultcontrol_key_stateu_char
ascii_charmappingmeta_presseds           r5   r   z(ConsoleInputReader._event_to_key_pressesz  s    ".//>BJ>>>"&.%]]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 Ir7   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   r`   MousePositionXYr   r   WindowsMouseEvent)r4   r   event_flagsbutton_state
event_typebuttonr   s          r5   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7r7   N)T)r   rW   r-   r.   r;   )r-   r   )r   r   r-   r   )rS   r   r   r   r-   r   )r   rP   r-   r   )r   rP   r-   rW   )r   r   r-   rP   )r   r   r-   rP   )Mr=   r>   r?   r@   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   r6   rd   rS   r   r   staticmethodr   r   r   r   r9   r7   r5   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 -8r7   r%   c                  *    e Zd ZdZddZdd	ZddZdS )r1   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`.
    r-   r.   c                "    i | _         i | _        d S r0   )_handle_callbacks_remove_eventsr3   s    r5   r6   z_Win32Handles.__init__>  s    @B 24r7   r:   r   callbackrJ   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.r-   r.   c                 l    	                t                     d S # t                     w xY w)Nloopr   )rp  ru  waits   r5   readyz-_Win32Handles.add_win32_handle.<locals>.readyY  sF    >


,T======,T=====s   
  3c                     t          g          } | u r!t          j                                       d S                                d S r0   )r   r
   r   CloseHandlecall_soon_threadsafe)r#  r:   ru  rw  remove_events    r5   rv  z,_Win32Handles.add_win32_handle.<locals>.waitc  sW     &|V&<==F%%++L999))%00000r7   rt  r;   )r   
ValueErrorremove_win32_handler   rn  r   ro  r   )r4   r:   rp  handle_valueru  rw  r{  rv  s    `` @@@@r5   add_win32_handlez_Win32Handles.add_win32_handleE  s     |./// 	  (((!!/7|, *++,8L)	> 	> 	> 	> 	> 	> 	> 	>		1 		1 		1 		1 		1 		1 		1 		1 		1 	%T555555r7   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   ro  popr
   r   SetEventKeyErrorrn  )r4   r:   events      r5   r}  z!_Win32Handles.remove_win32_handlep  s    
 <4	,'++FL99E O$$U++++  	 	 	D	
	)--fl;;; 	 	 	44	s#   A
 

AAA: :
BBNr;   )r:   r   rp  rJ   r-   r.   )r:   r   r-   r  )r=   r>   r?   r@   r6   r  r}  r9   r7   r5   r1   r1   .  s[         4 4 4 4)6 )6 )6 )6V     r7   r1   inputrp  rJ   r-   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.
    Nrr  r2   r:   r   r|  r}  r  )r  rp  r2   r:   previous_callbacks        r5   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)Nrr  r  )r  r2   r:   r  s       r5   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`.
    Nr_   
int | Noner-   r.   c                r    t          t          j                            t                              | _        d S r0   )r   r
   r   r   r   r:   )r4   r_   s     r5   r6   zraw_mode.__init__  s&    V_99:JKKLLr7   c                    t                      }t          j                            | j        t          |                     || _        |                                  d S r0   )r   r
   r   GetConsoleModer:   r   original_mode_patch)r4   r  s     r5   	__enter__zraw_mode.__enter__  sF    &&t{GM4J4JKKK*r7   c                    d}d}d}t           j                            | j        | j        j        ||z  |z   z             d S Nr*   r   r!   r
   r   SetConsoleModer:   r  r   r4   ENABLE_ECHO_INPUTENABLE_LINE_INPUTENABLE_PROCESSED_INPUTs       r5   r  zraw_mode._patch  s^    ""!'&&K$!$558NNOP	
 	
 	
 	
 	
r7   aobjectc                Z    t           j                            | j        | j                   d S r0   )r
   r   r  r:   r  )r4   r  s     r5   __exit__zraw_mode.__exit__  s%    &&t{D4FGGGGGr7   r0   )r_   r  r-   r.   r;   )r  r  r-   r.   )r=   r>   r?   r@   r6   r  r  r  r9   r7   r5   r&   r&     s~         M M M M M   

 

 

 

H H H H H Hr7   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. '''
    r-   r.   c                    d}d}d}t           j                            | j        | j        j        ||z  |z  z             d S r  r  r  s       r5   r  zcooked_mode._patch  s[    ""!'&&K$ #447MMO	
 	
 	
 	
 	
r7   Nr;   )r=   r>   r?   r@   r  r9   r7   r5   r'   r'     s2         

 

 

 

 

 

r7   r'   )r  r,   rp  rJ   r-   r  )r  r,   r-   r  )>
__future__r   r   r^   abcr   asyncior   
contextlibr   utilsr   platformr   ctypesr
   r   r   ctypes.wintypesr   r   typingr   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__r1  r3  r5  r.  r,   r$   r%   r1   r(   r)   r&   r'   r9   r7   r5   <module>r     sb   " " " " " " 				 



       $ $ $ $ $ $ % % % % % % * * * * * *
|w  MMM ! ! ! ! ! ! ! ! ) ) ) ) ) ) ) ) G G G G G G G G G G G G G G A 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
 
 
 
 
( 
 
 
 
 
r7   