
    G@d-                        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j        Zej        Zej        Zd
 Z G d de          Zd Z  G d de!          Z" G d de          Z#dS )zConsole base class    N)
dark_color)Signal)QColorQFontQTextCharFormatQTextCursor)QApplication)TextEditBaseWidget)ANSIEscapeCodeHandler)QStylePaletteSpyderPalettec                 6   	 |                     t          d                    }|dk    rnX|                     |d|         |           |                                 dk    r|                                  ||dz   d         }|                     ||           dS )z4Helper to print text, taking into account backspacesT   Nr      )findchr
insertTextpositionInBlockdeletePreviousChar)cursortextfmtindexs       Flib/python3.11/site-packages/spyder/plugins/console/widgets/console.pyinsert_text_tor      s    		#a&&!!B;;$vv,,,,!!##a''%%'''E!GHH~ dC         c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )QtANSIEscapeCodeHandlerc                 J    t          j        |            d | _        d | _        d S N)r   __init__base_formatcurrent_formatselfs    r   r"   z QtANSIEscapeCodeHandler.__init__)   s)    &t,,,"r   c                     t          |          rd| _        nd| _        t          |          r	d| _        dS d| _        dS )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.   sS    &'' 	/,.D)),.D)&'' 	/,.D))),.D)))r   c                     || _         d S 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                                        }n/| j        | j        dz
           | j                 }t          |          }| j                             |           | j	        | j        
                                }n/| j        | j	        dz
           | j                 }t          |          }| j                             |           | j                                         }| j        | j                                        }n| j        }|                    |           | j        ,| j                                                                        }n| j        }|                    |           | j        ,| j                                                                        }n| j        }|                    |           | j                             |           dS )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$2B"C"CD (%0022FF#D$9"$<=dnMDD\\F))&111 (%0022FF#D$9"$<=dnMDD\\F))&111"''));%0022FF[Fv9#((**//11DD9DT>!(--//99;;III)$$$##D)))))r   N)__name__
__module____qualname__r"   r1   r3   r5   rH    r   r   r   r   (   s_        # # #

/ 
/ 
/' ' '# # #+* +* +* +* +*r   r   c                     |                      |                                 |                                 d|                                 z
             d S )N   )setHsvhue
saturationvalue)colors    r   inverse_colorrT   n   s?    	LLe..00#ekkmm2CDDDDDr   c                       e Zd Zd Zd ZdS )ConsoleFontStylec                 Z    || _         || _        || _        || _        || _        d | _        d S r!   )foregroundcolorbackgroundcolorrA   r>   rC   format)r&   rX   rY   rA   r>   rC   s         r   r"   zConsoleFontStyle.__init__s   s2    ..	"r   c                    t                      | _        | j                            |           t          | j                  }| j                            |           t          | j                  }| j                            |           | j                                        }|	                    | j
                   |                    | j                   |                    | j                   | j                            |           d S 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11
!!*---D011
!!*---{!!TYt{###$.)))D!!!!!r   N)rI   rJ   rK   r"   r]   rL   r   r   rV   rV   r   s2          " " " " "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dS )ConsoleBaseWidgetzConsole base widget)soleolz\x01?\x1b\[(.*?)m\x02?Nc                     t          j         |                                d                                d           t	                       _                             d            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 _                             ||                                d           d S )Nconsolei,  Fc                 8    j                             |          S r!   )completion_widget_activatedemit)user_idr   r&   s     r   <lambda>z,ConsoleBaseWidget.__init__.<locals>.<lambda>   s    $"B"G"G"M"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__   s   #D&111 	9%%%!!#&&& 455 	&&&&&MMMM	O 	O 	O )#8 !4%5""6-,D,<!&uG G G ,,B,<!&uG G G %5,F,<!%et%E %E %E! -,C,<!%euF F F !.0@ 5t7HJ 	68HIIId#####r   c                     | j                             ||           t          |          }t          |          }|                     ||           |                                  dS )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   sx    **+;=MNNN!"233!"233$4$4 	 	6 	6 	6 	!!#####r   c                 j    |                                                      || j        j                   dS )z%Reimplement TextEditBaseWidget methodN)
textCursorr   rt   rZ   )r&   r   s     r   insert_textzConsoleBaseWidget.insert_text   s0     	$$T4+=+DEEEEEr   c                     |                                  r|                                  |                     t          j                                                               dS )zReimplement Qt methodN)has_selected_textremove_selected_textr   r	   	clipboardr   r%   s    r   pastezConsoleBaseWidget.paste   sW    !!## 	(%%'''/11668899999r   c                 4   |                                  }|                    t          j                   d|v r,|                    dd          }|                    dd          }	 |                    t          d                    }|dk    rn"||dz   d         }|                                  K|rd	}d	}|                    d          D ]}|	                    d
          rb|	                    d          sMd}d	}|
                    d| j        j                   |
                    |dd         | j        j                   nCt          j        d|          g k    sd|v sd|v rd}|
                    || j        j                   |s)| j                            t'          ||                     n.|rt)          ||| j        j                   nd}	| j                            |          D ]}
t)          |||	|
                                         | j        j                   |
                                }		 d |
                    d                              d          D             D ]}| j                            |           n# t<          $ r Y nw xY w| j                                        | j        _        t)          |||	d         | j        j                   |                      d           | !                    | j        j                   dS )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   c                 ,    g | ]}t          |          S rL   )int).0_cs     r   
<listcomp>z:ConsoleBaseWidget.append_text_to_shell.<locals>.<listcomp>  s     M M MRR M M Mr   ;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splitrk   set_code
ValueErrorr5   set_cursor_positionsetCurrentCharFormat)r&   r   errorpromptr   r   r   
is_warninglinelast_endmatchcodes               r   append_text_to_shellz&ConsoleBaseWidget.append_text_to_shell   s^    ""KO,,,4<<<<--D<<d++D	IIc"gg&&E{{a>DJJLLL	  +	O LJ--  OOH-- E $ < <E#'L!&J%%dD,>,EFFF%%d122h&*&?&FH H H H 
#3T::b@@+t33%--%)
 %%dD,<,CDDD " /44$\BBB  +0  	O64):)ABBBB H+44T:: 	K 	KvtHU[[]],B'C#18: : : 99;; M M5;;q>>3G3G3L3L M M M 9 9)22488889!   D,0,=,H,H,J,J"))64		?D4F4MNNN 	  '''!!$"4";<<<<<s   =AJ
JJc                     |t                      }| j        D ] }|                    ||| j        u            !| j                            | j        j                   dS )zPython Shell onlyN)r=   r\   )r   rx   r]   rt   rk   r3   rZ   )r&   r=   styles      r   r   z&ConsoleBaseWidget.set_pythonshell_font*  sz    <77D% 	F 	FE4).$2D)D  F F F F))$*<*CDDDD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_      s        )BJ899M
 $VD\\sC(("(&+++$ +$ +$ +$Z
$ 
$ 
$F F F: : :L= L= L=\E E E E E 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 B B B B B B B B B B ' ' ' ' ' ' A A A A A A J J J J J J = = = = = = = = 0%2 #1  / $4 
! 
! 
!C* C* C* C* C*3 C* C* C*LE E E" " " " "v " " "0gE gE gE gE gE* gE gE gE gE gEr   