B
    't\i+                 @   sx  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZ d dlmZ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(m)Z) d dl*m+Z+ d dl,m-Z- ddddddgZ.G dd deZ/G dd de0Z1G dd de0Z2G dd de0Z3G dd de$Z4G dd de0Z5G dd de0Z6dS )    )unicode_literals)get_app)Buffer)SYSTEM_BUFFER)		Condition	has_focushas_completionshas_validation_error
emacs_modevi_modevi_navigation_modehas_arg	to_filter)fragment_list_lento_formatted_text)KeyBindingsmerge_key_bindingsConditionalKeyBindings)	InputMode)Keys)WindowConditionalContainer)BufferControlSearchBufferControlFormattedTextControl	UIControl	UIContent)	Dimension)BeforeInput)SimpleLexer)SearchDirection
ArgToolbarCompletionsToolbarFormattedTextToolbarSearchToolbarSystemToolbarValidationToolbarc                   s   e Zd Z fddZ  ZS )r#   c                s6   | dd}tt| jt|f||dtddd d S )Nstyle T   )min)r'   Zdont_extend_heightheight)popsuperr#   __init__r   r   )selftextkwr'   )	__class__ >lib/python3.7/site-packages/prompt_toolkit/widgets/toolbars.pyr.      s    

zFormattedTextToolbar.__init__)__name__
__module____qualname__r.   __classcell__r3   r3   )r2   r4   r#      s   c               @   s2   e Zd ZdZdddZdd Zdd	 Zd
d ZdS )r%   z^
    Toolbar for a system prompt.

    :param prompt: Prompt to be displayed to the user.
    Shell command: Tc                s   | _ t| _ttd _   _t jt	ddt
 fddddg jd _t jddd	 _t jt jd
 _d S )N)namezclass:system-toolbar.text)r'   c                  s    j S )N)promptr3   )r/   r3   r4   <lambda>;   s    z(SystemToolbar.__init__.<locals>.<lambda>zclass:system-toolbar)bufferlexerinput_processorsZkey_bindingsr)   )r+   r'   )contentfilter)r;   r   enable_global_bindingsr   r   system_buffer_build_key_bindingsZ	_bindingsr   r   r   Zbuffer_controlr   windowr   r   	container)r/   r;   rB   r3   )r/   r4   r.   /   s     


zSystemToolbar.__init__c             C   s   dd| j jfdgS )N)zclass:system-toolbarzShell command: zclass:system-toolbar.text)r(   
)rC   r0   )r/   r3   r3   r4   _get_display_before_textF   s    
z&SystemToolbar._get_display_before_textc                s  t  j}t }|j}|d|d|d|d|d|d fdd}|d|d fdd}t }|j}|d|d|d|d fd	d}|d|d fd
d}t }|j}|tjd| t@ dd fdd}|d| t@ t@ dd fdd}t	t
|tt
|tt
| jgS )Nescape)rA   zc-gzc-cc                s    j   | jj  dS )z Hide system prompt. N)rC   resetapplayout
focus_last)event)r/   r3   r4   _T   s    
z,SystemToolbar._build_key_bindings.<locals>._Zenterc                s6   | j j jj  d  jjdd | j j  dS )z Run system command. )display_before_textT)append_to_historyN)rK   run_system_commandrC   r0   rH   rJ   rL   rM   )rN   )r/   r3   r4   rO   \   s
    c                s&   t j| jj_ j  | jj  dS )z Hide system prompt. N)	r   
NAVIGATIONrK   vi_state
input_moderC   rJ   rL   rM   )rN   )r/   r3   r4   rO   i   s    
c                sB   t j| jj_| jj jj  d  jj	dd | jj
  dS )z Run system command. )rP   T)rQ   N)r   rS   rK   rT   rU   rR   rC   r0   rH   rJ   rL   rM   )rN   )r/   r3   r4   rO   q   s    !T)rA   Z	is_globalc                s   | j j j dS )z% M-'!' will focus this user control. N)rK   rL   focusrE   )rN   )r/   r3   r4   rO      s    c                s    t j| jj_| jj j dS )z Focus. N)r   ZINSERTrK   rT   rU   rL   rW   rE   )rN   )r/   r3   r4   rO      s    )r   rC   r   addr   ZEscaper
   r   r   r   r   rB   )r/   ZfocusedZemacs_bindingsZhandlerO   Zvi_bindingsZglobal_bindingsr3   )r/   r4   rD   M   s(    




$$z!SystemToolbar._build_key_bindingsc             C   s   | j S )N)rF   )r/   r3   r3   r4   __pt_container__   s    zSystemToolbar.__pt_container__N)r9   T)r5   r6   r7   __doc__r.   rH   rD   rY   r3   r3   r3   r4   r%   )   s
   
Dc               @   s   e Zd Zdd Zdd ZdS )r!   c             C   s.   dd }t t|dd| _t| jtd| _d S )Nc              S   s&   t  jjpd} | dkrd} dd| fgS )Nr(   -z-1)zclass:arg-toolbarzRepeat: zclass:arg-toolbar.text)r   Zkey_processorarg)r\   r3   r3   r4   get_formatted_text   s
    z/ArgToolbar.__init__.<locals>.get_formatted_textr)   )r+   )r@   rA   )r   r   rE   r   r   rF   )r/   r]   r3   r3   r4   r.      s    

zArgToolbar.__init__c             C   s   | j S )N)rF   )r/   r3   r3   r4   rY      s    zArgToolbar.__pt_container__N)r5   r6   r7   r.   rY   r3   r3   r3   r4   r!      s   c               @   s"   e Zd ZdZdddZd	d
 ZdS )r$   zs
    :param vi_mode: Display '/' and '?' instead of I-search.
    :param ignore_case: Search case insensitive.
    NFr(   
I-search: I-search backward: c                s   |d kst |tst|d kr$t }tfdd fdd}|_t|t|ddgtdd|d_t	t
jd	d
dd_d S )Nc                  s    j t jjkS )N)controlr   rL   Zsearch_linksr3   )r/   r3   r4   is_searching   s    z,SearchToolbar.__init__.<locals>.is_searchingc                  s6    s
S j jjtjkr&r"dS  S r.dS S d S )N?/)r`   Zsearcher_search_state	directionr    ZBACKWARDr3   )backward_search_promptforward_search_promptra   r/   text_if_not_searchingr   r3   r4   get_before_input   s
    z0SearchToolbar.__init__.<locals>.get_before_inputzclass:search-toolbar.prompt)r'   zclass:search-toolbar.text)r=   r?   r>   ignore_caser)   zclass:search-toolbar)r+   r'   )r@   rA   )
isinstancer   AssertionErrorr   search_bufferr   r   r   r`   r   r   rF   )r/   rl   r   rg   rf   re   ri   rh   r3   )re   rf   ra   r/   rg   r   r4   r.      s(    
zSearchToolbar.__init__c             C   s   | j S )N)rF   )r/   r3   r3   r4   rY      s    zSearchToolbar.__pt_container__)NFr(   r^   r_   F)r5   r6   r7   rZ   r.   rY   r3   r3   r3   r4   r$      s
     
$c               @   s   e Zd Zdd ZdS )_CompletionsToolbarControlc                s  t  jj}|r|j}|j}|d }d}d}g }	xpt|D ]d\}
}t|	t|j |krr|
|p^dkrlg }	d}nd}P |		t
|j|
|krdndd |	d q8W |	d	d
|t|	  f |	d | }	dd|rdnd
fdg|	 dd|rdnd
fdg  ng   fdd}t|ddS )N   Fr   Tz+class:completion-toolbar.completion.currentz#class:completion-toolbar.completion)r'   )r(    r(   ro   zclass:completion-toolbar.arrow<>c                s    S )Nr3   )i)all_fragmentsr3   r4   get_line  s    z;_CompletionsToolbarControl.create_content.<locals>.get_liner)   )rt   Z
line_count)r   current_buffercomplete_statecompletionsZcomplete_index	enumerater   lenZdisplay_textextendr   appendr   )r/   widthr+   rv   rw   indexZcontent_widthZcut_leftZ	cut_rightZ	fragmentsrr   crt   r3   )rs   r4   create_content   s8    

z)_CompletionsToolbarControl.create_contentN)r5   r6   r7   r   r3   r3   r3   r4   rm      s   rm   c               @   s   e Zd Zdd Zdd ZdS )r"   c             C   s   t tt dddtd| _d S )Nr)   zclass:completion-toolbar)r+   r'   )r@   rA   )r   r   rm   r   rF   )r/   r3   r3   r4   r.     s    zCompletionsToolbar.__init__c             C   s   | j S )N)rF   )r/   r3   r3   r4   rY      s    z#CompletionsToolbar.__pt_container__N)r5   r6   r7   r.   rY   r3   r3   r3   r4   r"     s   c               @   s   e Zd ZdddZdd ZdS )r&   Fc                s2    fdd}t || _tt| jddtd| _d S )Nc                 s\   t  j} | jrT| j| jj\}} rBd| jj|d |d f }n| jj}d|fgS g S d S )Nz%s (line=%s column=%s)r)   zclass:validation-toolbar)r   ru   Zvalidation_errorZdocumentZtranslate_index_to_positionZcursor_positionmessage)Zbuffrowcolumnr0   )show_positionr3   r4   r]   &  s    
z6ValidationToolbar.__init__.<locals>.get_formatted_textr)   )r+   )r@   rA   )r   r`   r   r   r	   rF   )r/   r   r]   r3   )r   r4   r.   %  s
    
zValidationToolbar.__init__c             C   s   | j S )N)rF   )r/   r3   r3   r4   rY   =  s    z"ValidationToolbar.__pt_container__N)F)r5   r6   r7   r.   rY   r3   r3   r3   r4   r&   $  s   
N)7Z
__future__r   Z"prompt_toolkit.application.currentr   Zprompt_toolkit.bufferr   Zprompt_toolkit.enumsr   Zprompt_toolkit.filtersr   r   r   r	   r
   r   r   r   r   Zprompt_toolkit.formatted_textr   r   Z'prompt_toolkit.key_binding.key_bindingsr   r   r   Z#prompt_toolkit.key_binding.vi_stater   Zprompt_toolkit.keysr   Z prompt_toolkit.layout.containersr   r   Zprompt_toolkit.layout.controlsr   r   r   r   r   Zprompt_toolkit.layout.dimensionr   Z prompt_toolkit.layout.processorsr   Zprompt_toolkit.lexersr   Zprompt_toolkit.searchr    __all__r#   objectr%   r!   r$   rm   r"   r&   r3   r3   r3   r4   <module>   s6   ,l/;