B
    Ùîkb   ã               @   s€   d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZdS )z"Terminal input and output prompts.é    )ÚTokenN)ÚDisplayHook)Úfragment_list_widthÚPygmentsTokens)Úprint_formatted_text)ÚEditingModec               @   sF   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	d	S )ÚPromptsc             C   s
   || _ d S )N)Úshell)Úselfr	   © r   ú7lib/python3.7/site-packages/IPython/terminal/prompts.pyÚ__init__   s    zPrompts.__init__c             C   sr   t | jjdd ƒtjkrn| jjrnt| jjjjj	ƒ}| 
d¡rL|dd…  ¡ }n| 
d¡rb|dd… }d| d	 S d
S )NZediting_modez
InputMode.é
   é   zvi-é   é   ú[z] Ú )Úgetattrr	   Úpt_appr   ZVIZprompt_includes_vi_modeÚstrÚappZvi_stateZ
input_modeÚ
startswithÚlower)r
   Úmoder   r   r   Úvi_mode   s    

zPrompts.vi_modec             C   s0   t j|  ¡ ft jdft jt| jjƒft jdfgS )NzIn [z]: )r   ÚPromptr   Z	PromptNumr   r	   Úexecution_count)r
   r   r   r   Úin_prompt_tokens   s    zPrompts.in_prompt_tokensc             C   s   t |  ¡ ƒS )N)r   r   )r
   r   r   r   Ú_width%   s    zPrompts._widthNc             C   s(   |d kr|   ¡ }tjd|d  d fgS )Nú é   z...: )r   r   r   )r
   Úwidthr   r   r   Úcontinuation_prompt_tokens(   s    z"Prompts.continuation_prompt_tokensc             C   s    |   ¡ }tjd|d  d fgS )Nú-é   z> )r   r   r   )r
   r"   r   r   r   Úrewrite_prompt_tokens/   s    zPrompts.rewrite_prompt_tokensc             C   s$   t jdft jt| jjƒft jdfgS )NzOut[z]: )r   Z	OutPromptZOutPromptNumr   r	   r   )r
   r   r   r   Úout_prompt_tokens5   s    zPrompts.out_prompt_tokens)N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r#   r&   r'   r   r   r   r   r      s   
r   c               @   s.   e Zd Zdd„ Zd
dd„Zdd„ Zdd	„ ZdS )ÚClassicPromptsc             C   s   t jdfgS )Nz>>> )r   r   )r
   r   r   r   r   =   s    zClassicPrompts.in_prompt_tokensNc             C   s   t jdfgS )Nz... )r   r   )r
   r"   r   r   r   r#   B   s    z)ClassicPrompts.continuation_prompt_tokensc             C   s   g S )Nr   )r
   r   r   r   r&   G   s    z$ClassicPrompts.rewrite_prompt_tokensc             C   s   g S )Nr   )r
   r   r   r   r'   J   s    z ClassicPrompts.out_prompt_tokens)N)r(   r)   r*   r   r#   r&   r'   r   r   r   r   r+   <   s   
r+   c                   s0   e Zd ZdZdd„ Zdddœ‡ fdd„Z‡  ZS )	ÚRichPromptDisplayHookz3Subclass of base display hook using coloured promptc             C   s„   t j | jj¡ d| _| jr€| jj ¡ }d 	dd„ |D ƒ¡}|rP| 
d¡sPd| _| jjrttt|ƒ| jjjjdd nt j |¡ d S )NTr   c             s   s   | ]\}}|V  qd S )Nr   )Ú.0ÚtÚsr   r   r   ú	<genexpr>W   s    z<RichPromptDisplayHook.write_output_prompt.<locals>.<genexpr>Ú
F)ÚstyleÚend)ÚsysÚstdoutÚwriter	   Zseparate_outZprompt_end_newlineZdo_full_cacheZpromptsr'   ÚjoinÚendswithr   r   r   r   r2   )r
   ÚtokensZ
prompt_txtr   r   r   Úwrite_output_promptO   s    z)RichPromptDisplayHook.write_output_promptN)Úreturnc                sN   | j jr<x2| j j ¡ D ]"\}}||kr||| d ƒ d S qW tƒ  ||¡ d S )N)r	   Zmime_renderersÚitemsÚsuperÚwrite_format_data)r
   Zformat_dictZmd_dictZmimeZhandler)Ú	__class__r   r   r>   c   s    z'RichPromptDisplayHook.write_format_data)N)r(   r)   r*   Ú__doc__r:   r>   Ú__classcell__r   r   )r?   r   r,   M   s   r,   )r@   Zpygments.tokenr   r4   ZIPython.core.displayhookr   Zprompt_toolkit.formatted_textr   r   Zprompt_toolkit.shortcutsr   Zprompt_toolkit.enumsr   Úobjectr   r+   r,   r   r   r   r   Ú<module>   s   /