B
    \                  @   s   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	m
Z
 d dl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lmZ d dlmZ G dd deZdddZe dkrd dl!Z!e!jj"Z#ee!_e#e!j_"e!$  dS )    N)Pdb)IPCompleter   )IPythonPTCompleter)suspend_to_bgcursor_in_leading_ws)DEFAULT_BUFFER)	Condition	has_focushas_selectionvi_insert_modeemacs_insert_mode)KeyBindings)!display_completions_like_readline)Token)PromptSession)EditingMode)PygmentsTokensc               @   s&   e Zd Zdd Zdd ZdddZdS )	TerminalPdbc             O   s$   t j| f|| d | _|   d S )N)r   __init___ptcomppt_init)selfargskwargs r   8lib/python3.7/site-packages/IPython/terminal/debugger.pyr      s    zTerminalPdb.__init__c                s   fdd j d kr4tji i jd}t|_ t }tdd }|jd|dt jjdkr|jd	t	t
t @ t@ tt @ B dt t fd
dttjj |jjj djjjjjjjjjjd_d S )Nc                  s   t j jfgS )N)r   ZPromptpromptr   )r   r   r   get_prompt_tokens   s    z.TerminalPdb.pt_init.<locals>.get_prompt_tokens)shell	namespaceglobal_namespaceparentc               S   s
   t tdS )NSIGTSTP)hasattrsignalr   r   r   r   <lambda>(   s    z%TerminalPdb.pt_init.<locals>.<lambda>zc-z)filterZreadlinelikeZtabc                  s
   t   S )N)r   r   )r   r   r   r&   3   s    T)messageediting_modeZkey_bindingshistoryZ	completerZenable_history_searchmouse_supportZcomplete_stylestyle	inputhookcolor_depth)r   r   r   r   r   r	   addr   Zdisplay_completionsr
   r   r   r   r   r   r   r   getattrr   r)   upperZdebugger_historyr+   Zpt_complete_styler,   r-   r.   pt_app)r   ZcomplZkbZsupports_suspendr   )r   r   r   r      s6    



zTerminalPdb.pt_initNc             C   s   | j std|   y|dk	r&|| _| jrB| jt| jd  d}x~|s| jr`| jd}nB| j	| j
j_| jj| j
j_y| j }W n tk
r   d}Y nX | |}| |}| ||}qHW |   W n tk
r    Y nX dS )a  Repeatedly issue a prompt, accept input, parse an initial prefix
        off the received input, and dispatch to action methods, passing them
        the remainder of the line as argument.

        override the same methods from cmd.Cmd to provide prompt toolkit replacement.
        z.Sorry ipdb does not support use_rawinput=FalseN
r   ZEOF)Zuse_rawinput
ValueErrorZpreloopintrostdoutwritestrZcmdqueuepopZcurframe_localsr   Zipy_completerr    Zcurframe	f_globalsr!   r2   r   EOFErrorZprecmdZonecmdZpostcmdZpostloop	Exception)r   r5   stopliner   r   r   cmdloop@   s0    


zTerminalPdb.cmdloop)N)__name__
__module____qualname__r   r   r?   r   r   r   r   r      s   %r   c             C   s   t  | pt j dS )zm
    Start debugging from `frame`.

    If frame is not specified, debugging starts from caller's frame.
    N)r   	set_tracesys	_getframef_back)framer   r   r   rC   d   s    rC   __main__)N)%r%   rD   ZIPython.core.debuggerr   ZIPython.core.completerr   Zptutilsr   Z	shortcutsr   r   Zprompt_toolkit.enumsr   Zprompt_toolkit.filtersr	   r
   r   r   r   Zprompt_toolkit.key_bindingr   Z.prompt_toolkit.key_binding.bindings.completionr   Zpygments.tokenr   Zprompt_toolkit.shortcuts.promptr   r   Zprompt_toolkit.formatted_textr   r   rC   r@   ZpdbZtrace_dispatchZold_trace_dispatchmainr   r   r   r   <module>   s*   O
	