
    Je-                     :   d Z ddlZddlmZ ddlmZ ddl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mZ ej(                  Zej,                  Zej0                  Zej4                  Zej8                  Zd
 Z G d de      Zd Z  G d de!      Z" G d de      Z#y)zConsole base class    N)
dark_color)Signal)QColorQFontQTextCharFormatQTextCursor)QApplication)TextEditBaseWidget)ANSIEscapeCodeHandler)QStylePaletteSpyderPalettec                     	 |j                  t        d            }|dk(  rnA| j                  |d| |       | j                         dkD  r| j	                          ||dz   d }a| j                  ||       y)z4Helper to print text, taking into account backspaces   Nr      )findchr
insertTextpositionInBlockdeletePreviousChar)cursortextfmtindexs       H/usr/lib/python3/dist-packages/spyder/plugins/console/widgets/console.pyinsert_text_tor      sz    
		#a&!B;$v,,!!#a'%%'E!GH~  dC     c                   *    e Zd Zd Zd Zd Zd Zd Zy)QtANSIEscapeCodeHandlerc                 J    t        j                  |        d | _        d | _        y N)r   __init__base_formatcurrent_formatselfs    r   r"   z QtANSIEscapeCodeHandler.__init__)   s     &&t,"r   c                 l    t        |      rd| _        nd| _        t        |      rd| _        yd| _        y)z-Set color scheme (foreground and background).   %   /   (   N)r   default_foreground_colordefault_background_colorr&   foreground_colorbackground_colors      r   set_color_schemez(QtANSIEscapeCodeHandler.set_color_scheme.   s4    &',.D),.D)&',.D),.D)r   c                     || _         y r!   )r#   )r&   r#   s     r   set_base_formatz'QtANSIEscapeCodeHandler.set_base_format:   s
    &r   c                     | j                   S r!   )r$   r%   s    r   
get_formatz"QtANSIEscapeCodeHandler.get_format=   s    """r   c                 ~   | j                   (| j                  J t        | j                        | _         | j                  | j                  j	                         }n4| j
                  | j                  dz
     | j                     }t        |      }| j                   j                  |       | j                  | j                  j                         }n4| j
                  | j                  dz
     | j                     }t        |      }| j                   j                  |       | j                   j                         }| j                  | j                  j                         }n| j                  }|j                  |       | j                   )| j                  j                         j!                         }n| j                   }|j#                  |       | j$                  )| j                  j                         j%                         }n| j$                  }|j'                  |       | j                   j)                  |       y)z
        Set font style with the following attributes:
        'foreground_color', 'background_color', 'italic',
        'bold' and 'underline'
        Nr(   r+   )r$   r#   r   r/   
foregroundANSI_COLORS	intensityr   setForegroundr0   
backgroundsetBackgroundfontitalic
fontItalic	setItalicboldsetBold	underlinesetUnderlinesetFont)r&   qcolorcstrr=   r>   rA   rC   s          r   	set_stylez!QtANSIEscapeCodeHandler.set_style@   s    &##///"1$2B2B"CD  (%%002F##D$9$9"$<=dnnMDD\F))&1  (%%002F##D$9$9"$<=dnnMDD\F))&1""'');;%%002F[[Fv99##((*//1D99DT>>!((--/99;II)$##D)r   N)__name__
__module____qualname__r"   r1   r3   r5   rH    r   r   r   r   (   s    #

/'#+*r   r   c                     | j                  | j                         | j                         d| j                         z
         y )N   )setHsvhue
saturationvalue)colors    r   inverse_colorrT   n   s,    	LLe..0#ekkm2CDr   c                       e Zd Zd Zd Zy)ConsoleFontStylec                 X    || _         || _        || _        || _        || _        d | _        y r!   )foregroundcolorbackgroundcolorrA   r>   rC   format)r&   rX   rY   rA   r>   rC   s         r   r"   zConsoleFontStyle.__init__s   s.    ..	"r   c                 $   t               | _        | j                  j                  |       t        | j                        }| j                  j                  |       t        | j                        }| j                  j                  |       | j                  j                         }|j                  | j                         |j                  | j                         |j                  | j                         | j                  j                  |       y r!   )r   rZ   rE   r   rX   r:   rY   r<   r=   rB   rA   r@   r>   rD   rC   )r&   r=   
is_defaultr7   r;   s        r   apply_stylezConsoleFontStyle.apply_style|   s    %'D!D001
!!*-D001
!!*-{{!TYYt{{#$..)D!r   N)rI   rJ   rK   r"   r]   rL   r   r   rV   rV   r   s    "r   rV   c                       e Zd ZdZdZ ej                  d      Z ee	      Z
 eee      Z ee      ZddZd Zd Zd Zd	 Zdd
Zy)ConsoleBaseWidgetzConsole base widget)soleolz\x01?\x1b\[(.*?)m\x02?Nc                     t        j                   |        j                  d        j                  d       t	                _         j                  d        j                  j                   fd       t        }t        }t        }t        }t        }t        ||ddd       _        t        ||ddd       _        t        ||ddd       _        t        ||ddd       _         j                   j                    j"                   j$                  f _         j)                  ||        j+                  d       y )Nconsolei,  Fc                 :    j                   j                  |      S r!   )completion_widget_activatedemit)user_idr   r&   s     r   <lambda>z,ConsoleBaseWidget.__init__.<locals>.<lambda>   s    $"B"B"G"G"M r   )rX   rY   rA   r>   rC   T)r
   r"   setObjectNamesetMaximumBlockCountr   ansi_handlersetUndoRedoEnableduserListActivatedconnectMAIN_BG_COLORMAIN_DEFAULT_FG_COLORMAIN_ERROR_FG_COLORMAIN_TB_FG_COLORMAIN_PROMPT_FG_COLORrV   default_styleerror_styletraceback_link_styleprompt_stylefont_stylesr1   setMouseTracking)r&   parentr0   r,   error_foreground_colortraceback_foreground_colorprompt_foreground_colors   `      r   r"   zConsoleBaseWidget.__init__   sI   ##D&1 	9%!!#& 45 	&&&M	O )#8 !4%5""6-,D,<!&uG ,,B,<!&uG %5,F,<!%et%E! -,C,<!%euF !..0@0@ 55t7H7HJ 	68HId#r   c                     | j                   j                  ||       t        |      }t        |      }| j                  ||       | j	                          y)z<Set color scheme of the console (foreground and background).)r;   r7   N)rk   r1   r   set_paletteset_pythonshell_fontr.   s      r   r1   z"ConsoleBaseWidget.set_color_scheme   sY    **+;=MN!"23!"23$4$4 	 	6 	!!#r   c                 l    | j                         j                  || j                  j                         y)z%Reimplement TextEditBaseWidget methodN)
textCursorr   rt   rZ   )r&   r   s     r   insert_textzConsoleBaseWidget.insert_text   s'     	$$T4+=+=+D+DEr   c                     | j                         r| j                          | j                  t        j                         j                                y)zReimplement Qt methodN)has_selected_textremove_selected_textr   r	   	clipboardr   r%   s    r   pastezConsoleBaseWidget.paste   s:    !!#%%'//16689r   c                 &   | j                         }|j                  t        j                         d|v r$|j	                  dd      }|j	                  dd      }	 |j                  t        d            }|dk(  rn||dz   d }| j                          9|rd	}d	}|j                  d      D ]  }|j                  d
      re|j                  d      sTd}d	}|j                  d| j                  j                         |j                  |dd | j                  j                         nIt        j                  d|      g k7  sd|v sd|v rd}|j                  || j                   j                         |r| j"                  j%                  t'        ||              n/|r#t)        ||| j*                  j                         n
d}	| j,                  j/                  |      D ]  }
t)        |||	|
j1                          | j                  j                         |
j3                         }		 |
j5                  d      j7                  d      D cg c]  }t9        |       c}D ]  }| j:                  j=                  |        	 | j:                  jA                         | j                  _         t)        |||	d | j                  j                         | jC                  d       | jE                  | j                  j                         yc c}w # t>        $ r Y w xY w)aB  
        Append text to Python shell
        In a way, this method overrides the method 'insert_text' when text is
        inserted at the end of the text widget for a Python shell

        Handles error messages and show blue underlined links
        Handles ANSI color sequences
        Handles ANSI FF sequence
        z

T   r   r   NFz  Filez	  File "<z     z[A-Z].*Warningzwarnings.warnWARNING)r   is_tracebackr   ;eof)#r   movePositionr   Endreplacer   r   clear
splitlines
startswithr   rt   rZ   rv   refindallru   sig_exception_occurredrf   dictr   rw   COLOR_PATTERNfinditerstartendgroupsplitintrk   set_code
ValueErrorr5   set_cursor_positionsetCurrentCharFormat)r&   r   errorpromptr   r   r   
is_warninglinelast_endmatch_ccodes                r   append_text_to_shellz&ConsoleBaseWidget.append_text_to_shell   s    "KOO,4<<<-D<<d+DIIc"g&E{a>DJJL   LJ- OOH- $ <#'L!&J%%dD,>,>,E,EF%%d12h&*&?&?&F&FH 

#3T:b@+t3%-%)
 %%dD,<,<,C,CD "//44$\B+0 64):):)A)AB H++44T: 	KvtHU[[]'C#1188: 99;38;;q>3G3G3L MRR M 9))22489 -1,=,=,H,H,J"")	K 64	?D4F4F4M4MN 	  '!!$"4"4";";<! !N! s$   !"LK?#L?L	LLc                     |
t               }| j                  D ]!  }|j                  ||| j                  u        # | j                  j                  | j                  j                         y)zPython Shell onlyN)r=   r\   )r   rx   r]   rt   rk   r3   rZ   )r&   r=   styles      r   r   z&ConsoleBaseWidget.set_pythonshell_font*  sk    <7D%% 	FE4).$2D2D)D  F	F 	))$*<*<*C*CDr   r!   )rI   rJ   rK   __doc__BRACE_MATCHING_SCOPEr   compiler   r   r   r   r   strrm   re   r"   r1   r   r   r   r   rL   r   r   r_   r_      sb    )BJJ89M
 $D\sC("(++$Z
$F:L=\Er   r_   )$r   r   qtconsole.stylesr   qtpy.QtCorer   
qtpy.QtGuir   r   r   r   qtpy.QtWidgetsr	   "spyder.plugins.editor.widgets.baser
   (spyder.plugins.console.utils.ansihandlerr   spyder.utils.paletter   r   COLOR_BACKGROUND_1ro   COLOR_TEXT_1rp   COLOR_ERROR_1rq   COLOR_ACCENT_3rr   COLOR_SUCCESS_1rs   r   r   rT   objectrV   r_   rL   r   r   <module>r      s     	 '  B B ' A J = 00%22 #11  // $44 
!C*3 C*LE"v "0gE* gEr   