
    pF                     L   d Z ddlmZ ddlZddlZddl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Zd	Zd
Z ej"                  d ej$                  d      z   dz         Z ej"                  d ej$                  d      z   dz         Z ej"                  d ej$                  d      z   dz         Z ej"                  d ej$                  d      z   dz         Z G d de      Zi dej2                  dej4                  dej6                  dej8                  dej:                  dej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  d ejL                  d!ejN                  d"ejP                  d#ejR                  i d$ejT                  d%ejV                  d&ejX                  d'ejZ                  d(ej\                  d)ej^                  d*ej`                  d+ejb                  d,ejd                  d-ejf                  d.ejh                  d/ejj                  d0ejl                  d1ejn                  d2ejp                  d3ejr                  d4ejt                  i d5ejv                  d6ejx                  d7ejz                  d8ej|                  d9ej|                  d:ej~                  d;ej~                  d<ej                  d=ej                  d>ej                  d?ej|                  d@ej~                  dAej                  dBej                  dCej|                  dDej~                  dEej                  i dFej                  dGej                  dHej                  dIej                  dJej                  dKej                  dLej                  dMej                  dNej                  dOej                  dPej                  dQej                  dRej                  dSej                  dTej                  dUej                  dVej                  i dWej                  dXej                  dYej                  dZej                  d[ej                  d\ej                  d]ej                  d^ej                  d_ej                  d`ej                  daej                  dbej                  dcej                  ddej                  deej                  dfej                  dgej                  i dhej                  diej                  djej                  dkej                  dlej                  dmej                  dnej                  doej                  dpej                  dqej                  drej                  dsej                  dtej                  duej                  dvej                  dwejt                  dxejv                  ejx                  ejz                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej2                  ejz                  fej2                  ejx                  fej2                  ejt                  fej2                  ejv                  fej                  ej                  dyZi G dz d{ej      Zk ek       Zl G d| d}e      Zm G d~ de      Zn G d den      Zoy)z 
Parser for VT100 input stream.
    )unicode_literalsN)range   )Keys)KeyPress)InputStreamraw_modecooked_modeFzprompt-toolkit-render-input.log^z[z
\d+;\d+R\Zz(<?[\d;]+[mM]|M...)\Zz[\d;]*\Zz(<?[\d;]*|M.{0,2})\Zc                       e Zd ZdZy)_Flushz: Helper object to indicate flush operation to the parser. N)__name__
__module____qualname____doc__     6lib/third_party/prompt_toolkit/terminal/vt100_input.pyr   r   ,   s    Dr   r    	
z[Az[Bz[Cz[Dz[HzOHz[FzOFz[3~z[3;2~z[3;5~z[1~z[4~z[5~z[6~z[7~z[8~z[Zz[2~zOPzOQzORzOSz[[Az[[Bz[[Cz[[Dz[[Ez[11~z[12~z[13~z[14~z[15~z[17~z[18~z[19~z[20~z[21~z[23~z[24~z[25~z[26~z[28~z[29~z[31~z[32~z[33~z[34~z[1;2Pz[1;2Qz[1;2Sz[15;2~z[17;2~z[18;2~z[19;2~z[20;2~z[21;2~z[23;2~z[24;2~z[1;5Az[1;5Bz[1;5Cz[1;5Dz[1;2Az[1;2Bz[1;2Cz[1;2DzOAzOB)zOCzODz[5Az[5Bz[5Cz[5DzOczOdz[200~z[1;3Dz[1;3Cz[1;3Az[1;3Bz[Ez[Gc                       e Zd ZdZd Zy)_IsPrefixOfLongerMatchCachez
    Dictiory that maps input sequences to a boolean indicating whether there is
    any key that start with this characters.
    c                     t         j                        st        j                        rd}n&t        fdt        j                         D              }|| <   |S )NTc              3   X   K   | ]!  \  }}|j                        s|k7  s| # y wN)
startswith).0kvprefixs      r   	<genexpr>z:_IsPrefixOfLongerMatchCache.__missing__.<locals>.<genexpr>   s,     f'=tq!fAUZ[_eZe'=s   ***)_cpr_response_prefix_rematch_mouse_event_prefix_reanyANSI_SEQUENCESitems)selfr?   results    ` r   __missing__z'_IsPrefixOfLongerMatchCache.__missing__   sP     $))&15K5Q5QRX5YF f~';';'=ffFVr   N)r   r   r   r   rI   r   r   r   r7   r7      s    
r   r7   c                   H    e Zd ZdZd ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)r   ah  
    Parser for VT100 input stream.

    Feed the data through the `feed` method and the correct callbacks of the
    `input_processor` will be called.

    ::

        def callback(key):
            pass
        i = InputStream(callback)
        i.feed('data...')

    :attr input_processor: :class:`~prompt_toolkit.key_binding.InputProcessor` instance.
    c                     t        |      sJ || _        | j                          t        rt	        t
        d      | _        y y )Nab)callablefeed_key_callbackreset_DEBUG_RENDERER_INPUTopen_DEBUG_RENDERER_INPUT_FILENAMELOG)rG   rN   s     r   __init__zInputStream.__init__   s9    )***!2

 :DADH !r   c                 2    d| _         | j                          y )NF)_in_bracketed_paste_start_parser)rG   requests     r   rO   zInputStream.reset   s    #( r   c                 d    | j                         | _        | j                  j                  d       y)z-
        Start the parser coroutine.
        N)_input_parser_generator_input_parsersendrG   s    r   rW   zInputStream._start_parser   s)     "99;%r   c                     t         j                  |      rt        j                  S t        j                  |      rt        j
                  S 	 t        |   S # t        $ r Y yw xY w)z:
        Return the key that maps to this prefix.
        N)_cpr_response_rerB   r   CPRResponse_mouse_event_reVt100MouseEventrE   KeyError)rG   r?   s     r   
_get_matchzInputStream._get_match  sZ     !!&)###""6*'''	!&)) 		s   A 	A! A!c              #     K   d}d}d}	 d}|rd}nd}|t         k(  rd}n||z  }|rt        |   }| j                  |      }|s|s|r| j                  ||       d}nw|s|ss|sqd}d}t	        t        |      dd      D ]5  }| j                  |d|       }|s| j                  ||d|        ||d }d}7 |s| j                  |d   |d          |dd }˭w)zA
        Coroutine (state machine) for the input parser.
         FTNr      )r    _IS_PREFIX_OF_LONGER_MATCH_CACHErd   _call_handlerr   len)	rG   r?   retryflushcis_prefix_of_longer_matchrB   foundis	            r   rZ   z#InputStream._input_parser_generator  s     E ; EaKF ,LV,T)/ !:&&uf5F #<e!E E #3v;26#vbqz:  ..ufRajA%+ABZF$(E 7 !**6!9fQi@!'Q s   BC>Cc                     t        |t              r|D ]  }| j                  ||        y|t        j                  k(  rd| _        d| _        y| j                  t        ||             y)z&
        Callback to handler.
        Trf   N)	
isinstancetuplerj   r   BracketedPasterV   _paste_bufferrN   r   )rG   keyinsert_textr=   s       r   rj   zInputStream._call_handlerH  s]     c5!""1k2  d)))+/(%'"&&x['ABr   c                    t        |t        j                        sJ t        rP| j                  j                  t        |      j                  d      dz          | j                  j                          | j                  r| xj                  |z  c_
        d}|| j                  v r| j                  j                  |      }| j                  d| }| j                  t        t        j                  |             d| _	        | j                  |t!        |      z   d }d| _
        | j#                  |       yyt%        |      D ]I  \  }}| j                  r| j#                  ||d         y|dk(  rd}| j&                  j)                  |       K y)	zV
        Feed the input stream.

        :param data: Input string (unicode).
        zutf-8   
z[201~NFrf   r#   r    )rs   six	text_typerP   rS   writereprencoderm   rV   rv   indexrN   r   r   ru   rk   feed	enumerater[   r\   )rG   dataend_mark	end_indexpaste_content	remainingrq   rn   s           r   r   zInputStream.feedV  sV    $... HHNN4:,,W5=>HHNN
 ##$&"H4--- ..44X>	 !% 2 2:I >&&x0C0C]'ST ,1( ..y3x=/H/IJ	%'"		)$ .  "$1++ IId12h' Dy &&++A.+ (r   c                 B    | j                   j                  t               y)a<  
        Flush the buffer of the input stream.

        This will allow us to handle the escape key (or maybe meta) sooner.
        The input received by the escape key is actually the same as the first
        characters of e.g. Arrow-Up, so without knowing what follows the escape
        sequence, we don't know whether escape has been pressed, or whether
        it's something else. This flush function should be called after a
        timeout, and processes everything that's still in the buffer as-is, so
        without assuming any characters will folow.
        N)r[   r\   r   r]   s    r   rm   zInputStream.flush  s     	'r   c                 F    | j                  |       | j                          y)z8
        Wrapper around ``feed`` and ``flush``.
        N)r   rm   )rG   r   s     r   feed_and_flushzInputStream.feed_and_flush  s     			$

r   N)F)r   r   r   r   rT   rO   rW   rd   rZ   rj   r   rm   r   r   r   r   r   r      s8    $B&&0,dC8/t(r   r   c                   B    e Zd ZdZd Zd Zed        Zed        Zd Z	y)r	   z
    ::

        with raw_mode(stdin):
            ''' the pseudo-terminal stdin is now used in raw mode '''

    We ignore errors when executing `tcgetattr` fails.
    c                     || _         	 t        j                  |      | _        y # t        j                  $ r
 d | _        Y y w xY wr:   )filenotermios	tcgetattrattrs_beforeerror)rG   r   s     r   rT   zraw_mode.__init__  s<    	% ' 1 1& 9D}} 	% $D	%s   $ A Ac                    	 t        j                  | j                        }| j                  |t        j
                           |t        j
                  <   | j                  |t        j                           |t        j                  <   t        j                  | j                  t         j                  |       t        j                  | j                  d       y # t         j                  $ r Y y w xY w)Ns   [?1l)r   r   r   _patch_lflagttyLFLAG_patch_iflagIFLAG	tcsetattrTCSANOWosr}   r   )rG   newattrs     r   	__enter__zraw_mode.__enter__  s    
	/''4G "&!2!273993E!FGCII!%!2!273993E!FGCIIdkk7??GD HHT[[+. }} 		s   C C-,C-c                     |t         j                  t         j                  z  t         j                  z  t         j                  z   z  S r:   r   ECHOICANONIEXTENISIGclsattrss     r   r   zraw_mode._patch_lflag  s/    6G',,VWWWr   c                     |t         j                  t         j                  z  t         j                  z  t         j                  z  t         j
                  z   z  S r:   )r   IXONIXOFFICRNLINLCRIGNCRr   s     r   r   zraw_mode._patch_iflag  sP     LL7==( MM $MM* -4MM:	
 
 	
r   c                     | j                   ;	 t        j                  | j                  t        j                  | j                          y y # t        j
                  $ r Y y w xY wr:   )r   r   r   r   r   r   )rG   akws      r   __exit__zraw_mode.__exit__  sP    (!!$++w@Q@QR ) == s   9A	 	AAN)
r   r   r   r   rT   r   classmethodr   r   r   r   r   r   r	   r	     s@    ,%/ X X 	
 	
r   r	   c                   0    e Zd ZdZed        Zed        Zy)r
   a  
    The opposide of ``raw_mode``, used when we need cooked mode inside a
    `raw_mode` block.  Used in `CommandLineInterface.run_in_terminal`.::

        with cooked_mode(stdin):
            ''' the pseudo-terminal stdin is now used in cooked mode. '''
    c                     |t         j                  t         j                  z  t         j                  z  t         j                  z  z  S r:   r   r   s     r   r   zcooked_mode._patch_lflag  s,    w~~5FUVVr   c                 (    |t         j                  z  S r:   )r   r   r   s     r   r   zcooked_mode._patch_iflag  s     w}}$$r   N)r   r   r   r   r   r   r   r   r   r   r
   r
     s1     W W % %r   r
   )pr   
__future__r   r   rer{   r   r   	six.movesr   keysr   key_binding.input_processorr   __all__rP   rR   compileescaper_   ra   rA   rC   objectr   EscapeControlSpaceControlAControlBControlCControlDControlEControlFControlGControlHControlIControlJControlKControlLControlMControlNControlOControlPControlQControlRControlSControlTControlUControlVControlWControlXControlYControlZControlBackslashControlSquareCloseControlCircumflexControlUnderscore	BackspaceUpDownRightLeftHomeEndDeleteShiftDeleteControlDeletePageUpPageDownBackTabInsertF1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20F21F22F23F24	ControlUpControlDownControlRightControlLeftShiftUp	ShiftDown
ShiftRight	ShiftLeftru   IgnorerE   dictr7   ri   r   r	   r
   r   r   r   <module>r     sB	   ( 	 	 
  
   2  !B  2::cIBIIg$66FG  "**S9299W#558PPQ
 %"**S9299W+=%=%KL #C)"))G*<$<?V$VW 	V 	R
DKKR DR DMM	R
 DMMR DMMR DMMR DMMR DMMR DMMR DMMR DMMR DMMR DMMR DMMR  DMM!R" DMM#R$ DMM%R& DMM'R( DMM)R* DMM+R, DMM-R. DMM/R0 DMM1R2 DMM3R4 DMM5R6 DMM7R8 DMM9R: DMM;R> D!!?R@ D##ARB D""CRD D""ERF DNNGRH dggIRJ diiKRL djjMRN diiORP diiQRR diiSRT dhhURV dhhWRX t{{YRZ !![R\ ##]R^ tyy_R` txxaRb t{{cRd t}}eRf tyygRh txxiRj dllkRl t{{mRp dggqRr dggsRt dgguRv dggwRx twwyRz tww{R| tww}R~ twwR@ twwARB CRD ERF GRH IRJ KRL MRN ORP QRR SRT URV WRX YRZ [R\ ]R^ _R` aRb cRd eRf gRh iRn oRp qRt uRv $((wRx $((yRz $(({R| $((}R~ $((R@ $((ARB $((CRD $((ERH IRJ !!KRL ""MRN !!ORR SRT URV WRX YRb dggcRd diieRf jjii~~  $$ ++tyy)++tzz*++tww'++tyy) kkkkcRj$ $ $?#@  G& GTBv BP%( %r   