o
    Chz                     @  s  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s9d dlZd d	lmZ d d
lmZ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l0m1Z1 ddl2m3Z3 g dZ4dZ5dZ6dZ7dZ8dZ9G dd de1Z:G dd de:Z;G dd dZ<G d d! d!Z=G d"d# d#Z>e	d4d)d*Z?e	d5d+d,Z@G d-d. d.ZAG d/d0 d0eAZBd6d2d3ZCdS )7    )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                   @  s,   e Zd ZdZd
ddZeedddZd	S )_Win32InputBasez;
    Base class for `Win32Input` and `Win32PipeInput`.
    returnNonec                 C  s   t  | _d S N)_Win32Handleswin32_handlesself r4   l/var/www/html/myvaluetrips/my_value_trip_new/venv/lib/python3.10/site-packages/prompt_toolkit/input/win32.py__init__A   s   z_Win32InputBase.__init__r   c                 C  s   d S r/   r4   r2   r4   r4   r5   handleD   s   z_Win32InputBase.handleNr-   r.   r-   r   )__name__
__module____qualname____doc__r6   propertyr   r7   r4   r4   r4   r5   r,   <   s    
r,   c                      s   e Zd ZdZd'd( fddZd)ddZd*ddZd+ddZd+ddZe	d,ddZ
d*ddZd*ddZd-ddZd.d d!Zd/d"d#Ze	d0d%d&Z  ZS )1r%   z<
    `Input` class that reads from the Windows console.
    NstdinTextIO | Noner-   r.   c                   s4   t    t | _|  | jrt | _d S t | _d S r/   )superr6   _is_win_vt100_input_enabled_use_virtual_terminal_inputVt100ConsoleInputReaderconsole_input_readerr&   )r3   r?   	__class__r4   r5   r6   O   s   
zWin32Input.__init__input_ready_callbackCallable[[], None]ContextManager[None]c                 C  s
   t | |S )zj
        Return a context manager that makes this input active in the current
        event loop.
        )r)   )r3   rH   r4   r4   r5   attachZ      
zWin32Input.attachc                 C  s   t | S )z{
        Return a context manager that makes sure that this input is not active
        in the current event loop.
        )r*   r2   r4   r4   r5   detacha   s   zWin32Input.detachlist[KeyPress]c                 C  s   t | j S r/   )listrE   readr2   r4   r4   r5   	read_keysh      zWin32Input.read_keysc                 C  s
   | j  S r/   )rE   
flush_keysr2   r4   r4   r5   rS   k   s   
zWin32Input.flush_keysboolc                 C     dS NFr4   r2   r4   r4   r5   closedn      zWin32Input.closedc                 C  s   t | jdS )N) use_win10_virtual_terminal_input)r'   rC   r2   r4   r4   r5   r'   r   s   zWin32Input.raw_modec                 C  s   t  S r/   )r(   r2   r4   r4   r5   r(   w   s   zWin32Input.cooked_modeintc                 C  s
   t j S r/   )sysr?   filenor2   r4   r4   r5   r\   z   rL   zWin32Input.filenostrc                 C  rU   )Nzwin32-inputr4   r2   r4   r4   r5   typeahead_hash   s   zWin32Input.typeahead_hashc                 C  s   | j   d S r/   )rE   closer2   r4   r4   r5   r_      rR   zWin32Input.closer   c                 C  s   | j jS r/   )rE   r7   r2   r4   r4   r5   r7      s   zWin32Input.handler/   )r?   r@   r-   r.   )rH   rI   r-   rJ   )r-   rJ   r-   rN   r-   rT   )r-   rZ   )r-   r]   r8   r9   )r:   r;   r<   r=   r6   rK   rM   rQ   rS   r>   rW   r'   r(   r\   r^   r_   r7   __classcell__r4   r4   rF   r5   r%   J   s     








r%   c                   @  sH  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j8ej9ej:ej;ej<d4Z=d5Z>d6Z?d7Z@d8ZAd9ZBdbdcd?d@ZCdddAdBZDdedDdEZEdfdGdHZFdgdKdLZGdhdRdSZHeIdidUdVZJeIdjdXdYZKdkd\d]ZLdld_d`ZMdaS )mr&   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_pasterT   r-   r.   c                 C  s\   d | _ || _|  tj rttjt	| _
d S tdtjtjB | _ tt| j | _
d S )NCONIN$)_fdconr   r[   r?   isattyr   r	   kernel32GetStdHandler   r7   osopenO_RDWRO_BINARYmsvcrtget_osfhandle)r3   r   r4   r4   r5   r6      s   
zConsoleInputReader.__init__c                 C     | j durt| j  dS dS zClose fdcon.Nr   r   r_   r2   r4   r4   r5   r_         
zConsoleInputReader.closeIterable[KeyPress]c           	   	   #  sN   d}t d}t| }| }t jgddsdS tj jt||t| t 	||} fdd|D }t 
|} jr |rt|}|D ]Q}g }|rt|jtra|jtjtjhv r||j zt|}W n tyx   d}Y nw |rt|jtra|jtjtjhv sa|rttjd|V  |dur|V  qLdS |E dH  dS )
        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   timeoutNc                   s   g | ]}  |qS r4   )_insert_key_data).0keyr2   r4   r5   
<listcomp>  s    z+ConsoleInputReader.read.<locals>.<listcomp> )r   r   r   r7   r	   r   ReadConsoleInputWr   rO   	_get_keys_merge_paired_surrogatesr   	_is_pasteiter
isinstancer   r   ControlJControlMappenddatanextStopIterationr   BracketedPastejoin)	r3   	max_countrP   arrtypeinput_recordsall_keysgenkr   r4   r2   r5   rP      sL   

zConsoleInputReader.readrN   c                 C  s   g S r/   r4   r2   r4   r4   r5   rS   *  rX   zConsoleInputReader.flush_keys	key_pressr   c                 C  s6   |j r|S t|jtrt|jd}nd}t|j|S )z@
        Insert KeyPress data, for vt100 compatibility.
        r   )r   r   r   r   r"   getr   )r3   r   r   r4   r4   r5   r   .  s   z#ConsoleInputReader._insert_key_datarP   r   r   Array[INPUT_RECORD]Iterator[KeyPress]c                 c  sv    t |jD ]2}|| }|jtv r8t|jt|j }t|tr+|jr+| 	|E dH  qt|t
r8| |E dH  qdS )R
        Generator that yields `KeyPress` objects from the input records.
        N)rangevalue	EventTyper    getattrEventr   r   KeyDown_event_to_key_pressesr   _handle_mouse)r3   rP   r   iirevr4   r4   r5   r   <  s   

zConsoleInputReader._get_keyskey_pressesc                 c  s    d}| D ]K}t |jt }|od|j  kodkn  }|o+d|j  ko)dkn  }|rH|rC|j|j ddd}t||}n|V  d}|rM|}q|V  q|rX|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fullcharr4   r4   r5   r   T  s*   

z+ConsoleInputReader._merge_paired_surrogateskeysc                 C  sJ   d}d}| D ]}t |jts|d7 }|jtjkr|d7 }q|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   r4   r4   r5   r   u  s   zConsoleInputReader._is_paster   r   c                 C  s  t |tr|js
J d}|j}|jj}|dd}|dkr-|j| jv r,t	| j|j d}n|| j
v rE| j
| tjkr<d}t	| j
| |}nt	||}|| j@ sT|| j@ r|| j@ 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@ s|| j@ 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-tj tj.i
}|"|j#|j#|_#|| j@ r	|r	tj/tj0tjtj1tjtj2tjtj3tjtj4tjtj5tjtj6tjtj7tj+tj8tjtj9tj tj:i}|"|j#|j#|_#|| j@ s|| j@ r$|r$|j;dkr$t	tj<d}|| j@ s0|| j@ rB|rB|j#tjkrBt	tj=d|gS |rX|| j>@ }|rUt	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)r3   r   resultcontrol_key_stateu_char
ascii_charmappingmeta_pressedr4   r4   r5   r     s   

	

z(ConsoleInputReader._event_to_key_pressesr   c                 C  s   |j }|j}d}tj}|t@ r|dkrtj}ntj}n|tkr#tj	}n|t
kr*tj}|t@ r1tj}|du r@|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)r3   r   event_flagsbutton_state
event_typebuttonr   r4   r4   r5   r     s4   

z ConsoleInputReader._handle_mouseN)T)r   rT   r-   r.   r8   r-   r   r`   )r   r   r-   r   )rP   r   r   r   r-   r   )r   rN   r-   r   )r   rN   r-   rT   )r   r   r-   rN   )r   r   r-   rN   )Nr:   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   r_   rP   rS   r   r   staticmethodr   r   r   r   r4   r4   r4   r5   r&      s    	
 !%	



>

 
 r&   c                   @  sB   e Zd ZdZdddZdddZdd	d
ZdddZdddZdS )rD   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.)
    r-   r.   c                   sn   d  _ g  _t fdd _  tj r!ttj	
t _d S tdtjtjB  _ tt j  _d S )Nc                   s    j | S r/   )_bufferr   )r   r2   r4   r5   <lambda>Q  s    z2Vt100ConsoleInputReader.__init__.<locals>.<lambda>r   )r   rg  r$   _vt100_parserr[   r?   r   r   r	   r   r   r   r7   r   r   r   r   r   r   r2   r4   r2   r5   r6   L  s   

z Vt100ConsoleInputReader.__init__c                 C  r   r   r   r2   r4   r4   r5   r_   ]  r   zVt100ConsoleInputReader.closer   c                 C  sx   d}t d}t| }| }t| jgddsg S tj| jt||t| | ||D ]}| j	
| q+| j}g | _|S )r   r   r   r   )r   r   r   r7   r	   r   r   r   r   ri  feedrg  )r3   r   rP   r   r   key_datar  r4   r4   r5   rP   b  s   zVt100ConsoleInputReader.readrN   c                 C  s   | j   | j}g | _|S )zc
        Flush pending keys and return them.
        (Used for flushing the 'escape' key.)
        )ri  flushrg  )r3   r  r4   r4   r5   rS     s   
z"Vt100ConsoleInputReader.flush_keysrP   r   r   r   Iterator[str]c                 c  s`    t |jD ]'}|| }|jtv r-t|jt|j }t|tr-|jr-|j	j
}|dkr-|V  qdS )r   r   N)r   r   r   r    r   r   r   r   r   r   r   )r3   rP   r   r   r   r   r   r4   r4   r5   r     s   
z!Vt100ConsoleInputReader._get_keysNr8   r;  r`   )rP   r   r   r   r-   rm  )	r:   r;   r<   r=   r6   r_   rP   rS   r   r4   r4   r4   r5   rD   ?  s    



%rD   c                   @  s.   e Zd ZdZdddZdd
dZdddZdS )r0   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                 C  s   i | _ i | _d S r/   )_handle_callbacks_remove_eventsr2   r4   r4   r5   r6     s   
z_Win32Handles.__init__r7   r   callbackrI   c                   sv   j }|du rtd|  t  | j|< t | j|< d
 fddd
fddtd	 dS )z7
        Add a Win32 handle to the event loop.
        NInvalid handle.r-   r.   c                
     s(   z   W t d d S t d w )Nloopr   r4   )rp  rs  waitr4   r5   ready  s   z-_Win32Handles.add_win32_handle.<locals>.readyc                    s2   t  g} | u rtj d S  d S r/   )r   r	   r   CloseHandlecall_soon_threadsafe)r  )r7   rs  ru  remove_eventr4   r5   rt    s
   z,_Win32Handles.add_win32_handle.<locals>.waitrr  r8   )r   
ValueErrorremove_win32_handler   rn  r   ro  r   )r3   r7   rp  handle_valuer4   )rp  r7   rs  ru  rx  rt  r5   add_win32_handle  s   



z_Win32Handles.add_win32_handleCallable[[], None] | Nonec                 C  sf   |j du rdS z	| j|j }W n	 ty   Y nw tj| z| j|j W S  ty2   Y dS w )zt
        Remove a Win32 handle from the event loop.
        Return either the registered handler or `None`.
        N)r   ro  popKeyErrorr	   r   SetEventrn  )r3   r7   eventr4   r4   r5   rz    s   
z!_Win32Handles.remove_win32_handleNr8   )r7   r   rp  rI   r-   r.   )r7   r   r-   r}  )r:   r;   r<   r=   r6   r|  rz  r4   r4   r4   r5   r0     s
    

+r0   inputrp  rI   r-   Iterator[None]c              
   c  s    | j }| j}|jdu rtd||}||| zdV  W || |r/||| dS dS || |r?||| w 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.
    Nrq  r1   r7   r   ry  rz  r|  )r  rp  r1   r7   previous_callbackr4   r4   r5   r)     s"   




r)   c              
   c  s`    | j }| j}|jd u rtd||}zd V  W |r$||| d S d S |r/||| w w )Nrq  r  )r  r1   r7   r  r4   r4   r5   r*   "  s   

r*   c                   @  s<   e Zd ZdZ	ddd
dZdddZdddZd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`.
    NFr\   
int | NonerY   rT   r-   r.   c                 C  s   t tjt| _|| _d S r/   )r   r	   r   r   r   r7   rY   )r3   r\   rY   r4   r4   r5   r6   >  s   
zraw_mode.__init__c                 C  s,   t  }tj| jt| || _|   d S r/   )r   r	   r   GetConsoleModer7   r   original_mode_patch)r3   r  r4   r4   r5   	__enter__D  s   zraw_mode.__enter__c                 C  sD   d}d}d}| j j||B |B  @ }| jr|tO }tj| j| d S Nr+   r   r!   )r  r   rY   ENABLE_VIRTUAL_TERMINAL_INPUTr	   r   SetConsoleModer7   )r3   ENABLE_ECHO_INPUTENABLE_LINE_INPUTENABLE_PROCESSED_INPUTnew_moder4   r4   r5   r  L  s   
zraw_mode._patchaobjectc                 G  s   t j| j| j d S r/   )r	   r   r  r7   r  )r3   r  r4   r4   r5   __exit__[  s   zraw_mode.__exit__rV   )r\   r  rY   rT   r-   r.   r8   )r  r  r-   r.   )r:   r;   r<   r=   r6   r  r  r  r4   r4   r4   r5   r'   3  s    

r'   c                   @  s   e Zd ZdZdddZdS )r(   zx
    ::

        with cooked_mode(stdin):
            ''' The pseudo-terminal stdin is now used in cooked mode. '''
    r-   r.   c                 C  s0   d}d}d}t j| j| jj||B |B B  d S r  )r	   r   r  r7   r  r   )r3   r  r  r  r4   r4   r5   r  h  s   
zcooked_mode._patchNr8   )r:   r;   r<   r=   r  r4   r4   r4   r5   r(   `  s    r(   rT   c               
   C  sf   t tjt} td}tj| t| ztj| tt	}|dkW tj| | S tj| | w )z_
    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  r  r4   r4   r5   rB   u  s    rB   )r  r,   rp  rI   r-   r  )r  r,   r-   r  ra   )D
__future__r   r   r[   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__r+  r-  r/  r(  r  r,   r%   r&   rD   r0   r)   r*   r'   r(   rB   r4   r4   r4   r5   <module>   sX    B   6nX-