
    ^hz                    F   S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  SSK
Jr  \R                  S:X  d   e\(       d
  S SKrS S	KJr  S S
KJrJrJr  S SKJrJr  S SKJrJrJrJrJr  S SKJr  S SKJrJ r   S SK!J"r"  S SK#J$r$  S SK%J&r&J'r'  S SK(J)r)J*r*J+r+J,r,J-r-  SSK.J/r/  SSK0J1r1  SSK2J3r3  / SQr4Sr5Sr6Sr7Sr8Sr9 " S S\15      r: " S S\:5      r; " S S5      r< " S  S!5      r= " S" S#5      r>\	      S+S$ j5       r?\	S,S% j5       r@ " S& S'5      rA " S( S)\A5      rBS-S* jrCg).    )annotationsN)abstractmethod)get_running_loop)contextmanager   )SPHINX_AUTODOC_RUNNINGwin32)windll)Arraybyref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)Vt100Parser)
Win32InputConsoleInputReaderraw_modecooked_modeattach_win32_inputdetach_win32_input   i   c                  @    \ rS rSrSrSS jr\\SS j5       5       rSr	g)	_Win32InputBase<   z3
Base class for `Win32Input` and `Win32PipeInput`.
c                "    [        5       U l        g N)_Win32Handleswin32_handlesselfs    T/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/input/win32.py__init___Win32InputBase.__init__A   s    *_    c                    g r1    r4   s    r6   handle_Win32InputBase.handleD   s     	r9   )r3   NreturnNoner?   r   )
__name__
__module____qualname____firstlineno____doc__r7   propertyr   r<   __static_attributes__r;   r9   r6   r.   r.   <   s(    -   r9   r.   c                     ^  \ rS rSrSrSSU 4S jjjrSS jrSS jrSS jrSS jr	\
SS j5       rSS	 jrSS
 jrSS jrSS jrSS jr\
SS j5       rSrU =r$ )r&   J   z4
`Input` class that reads from the Windows console.
c                   > [         TU ]  5         [        5       U l        U   U R                  (       a  [	        5       U l        g [        5       U l        g r1   )superr7   _is_win_vt100_input_enabled_use_virtual_terminal_inputVt100ConsoleInputReaderconsole_input_readerr'   )r5   stdin	__class__s     r6   r7   Win32Input.__init__O   s;    +F+H(++(?(AD%(:(<D%r9   c                    [        X5      $ )zR
Return a context manager that makes this input active in the current
event loop.
)r*   )r5   input_ready_callbacks     r6   attachWin32Input.attachZ   s    
 "$==r9   c                    [        U 5      $ )zc
Return a context manager that makes sure that this input is not active
in the current event loop.
)r+   r4   s    r6   detachWin32Input.detacha   s    
 "$''r9   c                H    [        U R                  R                  5       5      $ r1   )listrP   readr4   s    r6   	read_keysWin32Input.read_keysh   s    D--22455r9   c                6    U R                   R                  5       $ r1   )rP   
flush_keysr4   s    r6   ra   Win32Input.flush_keysk   s    ((3355r9   c                    gNFr;   r4   s    r6   closedWin32Input.closedn   s    r9   c                (    [        U R                  S9$ )N) use_win10_virtual_terminal_input)r(   rN   r4   s    r6   r(   Win32Input.raw_moder   s    -1-M-M
 	
r9   c                    [        5       $ r1   )r)   r4   s    r6   r)   Win32Input.cooked_modew   s
    }r9   c                >    [         R                  R                  5       $ r1   )sysrQ   filenor4   s    r6   rn   Win32Input.filenoz   s    
 yy!!r9   c                    g)Nzwin32-inputr;   r4   s    r6   typeahead_hashWin32Input.typeahead_hash   s    r9   c                8    U R                   R                  5         g r1   )rP   closer4   s    r6   rt   Win32Input.close   s    !!'')r9   c                .    U R                   R                  $ r1   )rP   r<   r4   s    r6   r<   Win32Input.handle   s    ((///r9   )rN   rP   r1   )rQ   zTextIO | Noner?   r@   )rU   Callable[[], None]r?   ContextManager[None])r?   ry   r?   list[KeyPress]r?   bool)r?   int)r?   strr>   rA   )rB   rC   rD   rE   rF   r7   rV   rY   r^   ra   rG   re   r(   r)   rn   rq   rt   r<   rH   __classcell__)rR   s   @r6   r&   r&   J   sg    	= 	=>(66  

"* 0 0r9   r&   c                  H   \ rS rSrSr0 S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S	\R                  _S
\R                  _S\R                  _S\R                  _S\R                   _S\R"                  _S\R$                  _S\R&                  _S\R(                  _S\R*                  _S\R,                  _0 S\R.                  _S\R0                  _S\R2                  _S\R4                  _S\R6                  _S\R8                  _S\R:                  _S\R<                  _S\R>                  _S\R@                  _S\RB                  _S\RD                  _S \RF                  _S!\RH                  _S"\RJ                  _S#\RL                  _Er'0 S$\RP                  _S%\RR                  _S&\RT                  _S'\RV                  _S(\RX                  _S)\RZ                  _S*\R\                  _S+\R^                  _S,\R`                  _S-\Rb                  _S.\Rd                  _S/\Rf                  _S0\Rh                  _S1\Rj                  _S2\Rl                  _S3\Rn                  _S4\Rp                  _\Rr                  \Rt                  \Rv                  \Rx                  \Rz                  S5.Er>S6r?S7r@S8rAS9rBS:rCSGSHS; jjrDSIS< jrESJS= jrFSKS> jrGSLS? jrH      SMS@ jrI\JSNSA j5       rK\JSOSB j5       rLSPSC jrMSQSD jrNSErOgF)Rr'      zp
: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,   c                   S U l         Xl        U   [        R                  R	                  5       (       a2  [        [        R                  R                  [        5      5      U l
        g [        R                  " S[        R                  [        R                  -  5      U l         [        [        R                   " U R                   5      5      U l
        g )NCONIN$)_fdconrecognize_pasterm   rQ   isattyr   r
   kernel32GetStdHandler    r<   osopenO_RDWRO_BINARYmsvcrtget_osfhandle)r5   r   s     r6   r7   ConsoleInputReader.__init__   s}    . 	99 !=!=>N!OPDK''(BII,CDDK !5!5dkk!BCDKr9   c                `    U R                   b!  [        R                  " U R                   5        ggzClose fdcon.Nr   r   rt   r4   s    r6   rt   ConsoleInputReader.close   !    ;;"HHT[[! #r9   c              #    #    Sn[        S5      n[        U-  nU" 5       n[        U R                  /SS9(       d  g[        R
                  R                  U R                  [        U5      U[        U5      5        [        U R                  X$5      5      nU Vs/ s H  o`R                  U5      PM     nn[        U R                  U5      5      nU R                  (       Ga?  U R                  U5      (       Ga(  [        U5      nU GH  n/ n	U(       a  [        UR                   ["        5      (       a.  UR                   ["        R$                  ["        R&                  1;   a  U	R)                  UR*                  5         [-        U5      nU(       aQ  [        UR                   ["        5      (       d  MO  UR                   ["        R$                  ["        R&                  1;   a  M  U	(       a+  [1        ["        R2                  SR5                  U	5      5      v   Uc  GM  Uv   GM     gU Sh  vN   gs  snf ! [.         a    Sn Nf = f N7f)
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
   r   timeoutN )r   r   r   r<   r
   r   ReadConsoleInputWr   r\   	_get_keys_insert_key_data_merge_paired_surrogatesr   	_is_pasteiter
isinstancekeyr   ControlJControlMappenddatanextStopIterationr   BracketedPastejoin)
r5   	max_countr]   arrtypeinput_recordsall_keysr   genkr   s
             r6   r]   ConsoleInputReader.read   s     	Qx*	  q9 	))KK/GDM	
 t;< ;CC(3))#.(C 55h?@DNN8$<$<x.C  "155$//uu >>KK'! I "155$//uu >> "4#6#6FF=G# &  9 D( ) ! !  sU   BIH)1CI9H.&I,.I3II#I $
I.H=:I<H==Ic                    / $ r1   r;   r4   s    r6   ra   ConsoleInputReader.flush_keys*  s    	r9   c                    UR                   (       a  U$ [        UR                  [        5      (       a"  [        R
                  " UR                  S5      nOSn[        UR                  U5      $ )z0
Insert KeyPress data, for vt100 compatibility.
r   )r   r   r   r   r#   getr   )r5   	key_pressr   s      r6   r   #ConsoleInputReader._insert_key_data.  sN     >>immT**)--immR@DD	t,,r9   c              #    #    [        UR                  5       H  nX#   nUR                  [        ;   d  M  [	        UR
                  [        UR                     5      n[        U[        5      (       a,  UR                  (       a  U R                  U5       Sh  vN   M  [        U[        5      (       d  M  U R                  U5       Sh  vN   M     g N; N7f)B
Generator that yields `KeyPress` objects from the input records.
N)rangevalue	EventTyper!   getattrEventr   r   KeyDown_event_to_key_pressesr   _handle_mouse)r5   r]   r   iirevs         r6   r   ConsoleInputReader._get_keys<  s      tzz"A!B ||z)RXXz",,'?@ b"233

#99"===$677#11"555! # > 6s/   /CA!CCC4CC	
CCc              #    #    SnU  H  n[        UR                  [        5      (       + nU=(       a    SUR                  s=:*  =(       a    S:*  Os  nU=(       a    SUR                  s=:*  =(       a    S:*  Os  nU(       aQ  U(       aD  UR                  UR                  -   R                  SS5      R	                  S5      n[        Xf5      nOUv   SnU(       a  UnM  Uv   M     U(       a  Uv   gg7f)zU
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   )key_pressesbuffered_high_surrogater   is_textis_high_surrogateis_low_surrogatefullchars          r6   r   +ConsoleInputReader._merge_paired_surrogatesT  s      #'C$SWWd33G ' KH,K,K8,K&J8sww+J+J(+J&# 144sww>_=, 
 #86C11*.' *-'	+ . #)) #s   C/C1c                    SnSnU  HL  n[        UR                  [        5      (       d  US-  nUR                  [        R                  :X  d  MG  US-  nMN     US:  =(       a    U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   )keys
text_countnewline_countr   s       r6   r   ConsoleInputReader._is_pasteu  sb     
AaeeT**a
uu%"	  !5jAo5r9   c                   [        U[        5      (       a  UR                  (       d   eSnUR                  nUR                  R
                  nUR                  SS5      nUS:X  a>  UR                  U R                  ;   a#  [        U R                  UR                     S5      nOWXPR                  ;   a=  U R                  U   [        R                  :X  a  Sn[        U R                  U   U5      nO[        XD5      nX0R                  -  (       d  X0R                  -  (       GaW  X0R                  -  (       GaC  U(       Ga;  [        R                   [        R"                  [        R$                  [        R&                  [        R(                  [        R*                  [        R,                  [        R.                  [        R0                  [        R2                  [        R4                  [        R6                  [        R8                  [        R:                  [        R<                  [        R>                  [        R@                  [        RB                  0	nURE                  URF                  URF                  5      Ul#        X0R                  -  (       d  X0R                  -  (       Gaa  U(       GaY  [        R                   [        RH                  [        R$                  [        RJ                  [        R(                  [        RL                  [        R,                  [        RN                  [        R0                  [        RP                  [        R4                  [        RR                  [        R8                  [        RT                  [        RV                  [        RX                  [        R<                  [        RZ                  [        R@                  [        R\                  0
nURE                  URF                  URF                  5      Ul#        X0R                  -  (       Ga  U(       Gaw  [        R^                  [        R`                  [        R                   [        Rb                  [        R$                  [        Rd                  [        R(                  [        Rf                  [        R,                  [        Rh                  [        R0                  [        Rj                  [        R4                  [        Rl                  [        R8                  [        Rn                  [        RV                  [        Rp                  [        R<                  [        Rr                  [        R@                  [        Rt                  0nURE                  URF                  URF                  5      Ul#        X0R                  -  (       d  X0R                  -  (       a1  U(       a*  URv                  S:X  a  [        [        Rx                  S5      nX0R                  -  (       d  X0R                  -  (       aA  U(       a:  URF                  [        R                  :X  a  [        [        Rz                  S5      U/$ U(       a4  X0R|                  -  nU(       a  [        [        Rz                  S5      U/$ U/$ / $ )zE
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)r5   r   resultcontrol_key_stateu_char
ascii_charmappingmeta_presseds           r6   r   (ConsoleInputReader._event_to_key_presses  s    ".//BJJ>>"&..%%]]7O<
 V  DMM1!$--0A0A"BBG]]*==,=  "$--
";VD!&1
 "$:$::$'>'>>>!$6$666 		400

D22,,		400		400$..T44T44t88
'G !VZZ<FJ  6 66 #:#:::		4++

D--		4++		4++$//T//T//T//t33G !VZZ<FJ 1111f$,,		4>>

DOO		4>>		4>>$--T--T--T--t11G !VZZ<FJ
 "$:$::$'>'>>s"d//5F "$:$::$'>'>>

dmm+T[["-v66 ,/D/DDL b16::x Ir9   c                   UR                   nUR                  nSn[        R                  nU[        -  (       a(  US:  a  [
        R                  nOF[
        R                  nO5U[        :X  a  [        R                  nOU[        :X  a  [        R                  nU[        -  (       a  [
        R                  nUc'  US:  a  [
        R                  nO[
        R                  nSR!                  UR"                  UR"                  [%        UR&                  R(                  5      [%        UR&                  R*                  5      /5      n[-        [.        R0                  U5      /$ )z;
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)r5   r   event_flagsbutton_state
event_typebuttonr   s          r6   r    ConsoleInputReader._handle_mouse  s    mm~~,0
).. &a+55
+77
 ;;$))!99$** $'22J a+66
 ,44
xx  B$$&&'B$$&&'	
 //677r9   )r   r<   r   N)T)r   r}   r?   r@   r>   r?   zIterable[KeyPress]rz   )r   r   r?   r   )r]   r   r   Array[INPUT_RECORD]r?   Iterator[KeyPress])r  r{   r?   rk  )r  r{   r?   r}   )r   r   r?   r{   )r   r   r?   r{   )PrB   rC   rD   rE   rF   r   rG  rF  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)  r6  F1F2F3F4F5F6F7F8F9F10F11F12r  rH  RIGHT_ALT_PRESSEDr  r  r  r7   rt   r]   ra   r   r   staticmethodr   r   r   r   rH   r;   r9   r6   r'   r'      s   """"" 	" 		"
 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  	!"" 	#"$ 	%"& 	'"( 	)"* 	+", 	-". 	/"0 	1"2 	3"4 	5"6 	7"8 	9": 	&&;"< 	((="> 	''?"@ 	''A"B 	C"HJ
DKK 	DMM 	DHH	
 	DII 	DII 	DGG 	DJJ 	DII 	DKK 	DKK 	TWW 	TWW  	TWW!" 	TWW#$ 	TWW%& 	TWW'( 	TWW)* WWWWXXXXXX3H8 MD"
< |-66*=6	60 * *@ 6 6*BH-8r9   r'   c                  V    \ rS rSrSrS
S jrS
S jrSS jrSS jr      SS jr	Sr
g	)rO   i?  a  
Similar to `ConsoleInputReader`, but for usage when
`ENABLE_VIRTUAL_TERMINAL_INPUT` is enabled. This assumes that Windows sends
us the right vt100 escape sequences and we parse those with our vt100
parser.

(Using this instead of `ConsoleInputReader` results in the "data" attribute
from the `KeyPress` instances to be more correct in edge cases, because
this responds to for instance the terminal being in application cursor keys
mode.)
c                  ^  S T l         / T l        [        U 4S j5      T l        T   [        R
                  R                  5       (       a2  [        [        R                  R                  [        5      5      T l        g [        R                  " S[        R                  [        R                   -  5      T l         [        ["        R$                  " T R                   5      5      T l        g )Nc                :   > TR                   R                  U 5      $ r1   )_bufferr   )r   r5   s    r6   <lambda>2Vt100ConsoleInputReader.__init__.<locals>.<lambda>Q  s    dll11)<r9   r   )r   r  r%   _vt100_parserrm   rQ   r   r   r
   r   r   r    r<   r   r   r   r   r   r   r4   s   `r6   r7    Vt100ConsoleInputReader.__init__L  s    ')(<
 	99 !=!=>N!OPDK''(BII,CDDK !5!5dkk!BCDKr9   c                `    U R                   b!  [        R                  " U R                   5        ggr   r   r4   s    r6   rt   Vt100ConsoleInputReader.close]  r   r9   c                   Sn[        S5      n[        U-  nU" 5       n[        U R                  /SS9(       d  / $ [        R
                  R                  U R                  [        U5      U[        U5      5        U R                  X$5       H  nU R                  R                  U5        M      U R                  n/ U l        U$ )r   r   r   r   )r   r   r   r<   r
   r   r   r   r   r  feedr  )r5   r   r]   r   r   key_datarI  s          r6   r]   Vt100ConsoleInputReader.readb  s     	Qx*	  q9I 	))KK/GDM	
 t;H##H- < r9   c                `    U R                   R                  5         U R                  n/ U l        U$ )zK
Flush pending keys and return them.
(Used for flushing the 'escape' key.)
)r  flushr  )r5   rI  s     r6   ra   "Vt100ConsoleInputReader.flush_keys  s-     	  " r9   c              #  ^  #    [        UR                  5       H  nX#   nUR                  [        ;   d  M  [	        UR
                  [        UR                     5      n[        U[        5      (       d  M[  UR                  (       d  Mn  UR                  R                  nUS:w  d  M  Uv   M     g7f)r   r  N)r   r   r   r!   r   r   r   r   r   r  r  )r5   r]   r   r   r   r   rK  s          r6   r   !Vt100ConsoleInputReader._get_keys  s}      tzz"A!B ||z)RXXz",,'?@ b"233


XX11F'$ #s   /B-:B-3B-B-$	B-)r  r   r  r<   Nr>   ri  rz   )r]   r   r   rj  r?   zIterator[str])rB   rC   rD   rE   rF   r7   rt   r]   ra   r   rH   r;   r9   r6   rO   rO   ?  s:    
D""
#J%%*=%	%r9   rO   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)r2   i  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`.
c                     0 U l         0 U l        g r1   _handle_callbacks_remove_eventsr4   s    r6   r7   _Win32Handles.__init__  s    @B 24r9   c                  ^^^^^^ TR                   nUc  [        S5      eU R                  T5        [        5       mTU R                  U'   [        5       mTU R                  U'   SUUU4S jjmSUUUU4S jjm[        TTS9  g)z'
Add a Win32 handle to the event loop.
NInvalid handle.c                 H   >  T " 5         [        TTS9  g ! [        TTS9  f = f)Nloopr   )callbackr  waits   r6   ready-_Win32Handles.add_win32_handle.<locals>.ready  s#    >
,T=,T=s    !c                    > [        TT/5      n U TL a   [        R                  R                  T5        g TR	                  T5        g r1   )r   r
   r   CloseHandlecall_soon_threadsafe)rI  r<   r  r  remove_events    r6   r  ,_Win32Handles.add_win32_handle.<locals>.wait  s?     &|V&<=F%++L9))%0r9   r  r>   )r   
ValueErrorremove_win32_handler   r  r   r  r   )r5   r<   r  handle_valuer  r  r  r  s    `` @@@@r6   add_win32_handle_Win32Handles.add_win32_handle  s     ||.// 	  (!/7|, *+,8L)	> 	>		1 		1 	%T5r9   c                4   UR                   c  g U R                  R                  UR                   5      n[        R                  R                  U5         U R                  R                  UR                   5      $ ! [         a     N2f = f! [         a     gf = f)z\
Remove a Win32 handle from the event loop.
Return either the registered handler or `None`.
N)r   r  popr
   r   SetEventKeyErrorr  )r5   r<   events      r6   r  !_Win32Handles.remove_win32_handle  s    
 <<	,''++FLL9E OO$$U+	))--fll;;  		  		s#   %A: $B
 :
BB

BBr  Nr>   )r<   r   r  rx   r?   r@   )r<   r   r?   zCallable[[], None] | None)	rB   rC   rD   rE   rF   r7   r  r  rH   r;   r9   r6   r2   r2     s    4)6Vr9   r2   c              #  l  #    U R                   nU R                  nUR                  c  [        S5      eUR	                  U5      nUR                  X15         Sv   UR	                  U5        U(       a  UR                  X45        gg! UR	                  U5        U(       a  UR                  X45        f f = f7f)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.
Nr  r3   r<   r   r  r  r  )inputr  r3   r<   previous_callbacks        r6   r*   r*     s      ''M\\F||*++ &99&A""64F))&1**6E  	))&1**6E s   AB4B +B4,B11B4c              #    #    U R                   nU R                  nUR                  c  [        S5      eUR	                  U5      n S v   U(       a  UR                  X#5        g g ! U(       a  UR                  X#5        f f = f7f)Nr  r  )r  r3   r<   r  s       r6   r+   r+   "  sv     ''M\\F||*++%99&AF**6E **6E s   ABA# 	B#A>>Bc                  P    \ rS rSrSr S	     S
S jjrSS jrSS jrSS jrSr	g)r(   i3  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`.
Nc                r    [        [        R                  R                  [        5      5      U l        X l        g r1   )r   r
   r   r   r    r<   rh   )r5   rn   rh   s      r6   r7   raw_mode.__init__>  s&     V__99:JKL0P-r9   c                    [        5       n[        R                  R                  U R                  [        U5      5        Xl        U R                  5         g r1   )r   r
   r   GetConsoleModer<   r   original_mode_patch)r5   r  s     r6   	__enter__raw_mode.__enter__D  s5    &&t{{GM4JK*r9   c                    SnSnSnU R                   R                  X-  U-  ) -  nU R                  (       a	  U[        -  n[        R
                  R                  U R                  U5        g Nr,   r   r"   )r  r   rh   ENABLE_VIRTUAL_TERMINAL_INPUTr
   r   SetConsoleModer<   )r5   ENABLE_ECHO_INPUTENABLE_LINE_INPUTENABLE_PROCESSED_INPUTnew_modes        r6   r  raw_mode._patchL  si    ""!'%%++14JJ/
 
 0055H&&t{{H=r9   c                l    [         R                  R                  U R                  U R                  5        g r1   )r
   r   r  r<   r  )r5   as     r6   __exit__raw_mode.__exit__[  s     &&t{{D4F4FGr9   )r<   r  rh   rd   )rn   z
int | Nonerh   r}   r?   r@   r>   )r  objectr?   r@   )
rB   rC   rD   rE   rF   r7   r  r  r  rH   r;   r9   r6   r(   r(   3  s?     SXQ QKOQ	Q>Hr9   r(   c                  "    \ rS rSrSrSS jrSrg)r)   i`  zh
::

    with cooked_mode(stdin):
        ''' The pseudo-terminal stdin is now used in cooked mode. '''
c                    SnSnSn[         R                  R                  U R                  U R                  R
                  X-  U-  -  5        g r  )r
   r   r  r<   r  r   )r5   r  r  r  s       r6   r  cooked_mode._patchh  sN    ""!'&&KK$$ 47MMO	
r9   r;   Nr>   )rB   rC   rD   rE   rF   r  rH   r;   r9   r6   r)   r)   `  s    

r9   r)   c                    [        [        R                  R                  [        5      5      n [        S5      n[        R                  R                  U [        U5      5         [        R                  R                  U [        [        5      5      nUS:H  [        R                  R                  X5        $ ! [        R                  R                  X5        f = f)zS
Returns True when we're running Windows and VT100 escape sequences are
supported.
r   r"   )
r   r
   r   r   r    r   r  r   r  r  )hconsoler  rI  s      r6   rM   rM   u  s    
 foo223CDEH !HM
OO""8U=-AB@oo44e9:
 {&&x?&&x?s   "1B3 3!C)r  r.   r  rx   r?   Iterator[None])r  r.   r?   r  r|   )D
__future__r   r   rm   abcr   asyncior   
contextlibr   utilsr   platformr   ctypesr
   r   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$   vt100_parserr%   __all__rX  rZ  r\  rU  r  r.   r&   r'   rO   r2   r*   r+   r(   r)   rM   r;   r9   r6   <module>r     s7   " 	 
  $ % *
||w   ( ( ) G G A O = $ C  :  %  #   !' e ?0 ?0Dp8 p8fk% k%\U Up FF&8FF F8 F F *H *HZ
( 
*@r9   