# -*- coding: utf-8 -*- # # Copyright © Spyder Project Contributors # Licensed under the terms of the MIT License # (see spyder/__init__.py for details) """Terminal emulation tools""" import os class ANSIEscapeCodeHandler(object): """ANSI Escape sequences handler""" if os.name == 'nt': # Windows terminal colors: ANSI_COLORS = ( # Normal, Bright/Light ('#000000', '#808080'), # 0: black ('#800000', '#ff0000'), # 1: red ('#008000', '#00ff00'), # 2: green ('#808000', '#ffff00'), # 3: yellow ('#000080', '#0000ff'), # 4: blue ('#800080', '#ff00ff'), # 5: magenta ('#008080', '#00ffff'), # 6: cyan ('#c0c0c0', '#ffffff'), # 7: white ) elif os.name == 'mac': # Terminal.app colors: ANSI_COLORS = ( # Normal, Bright/Light ('#000000', '#818383'), # 0: black ('#C23621', '#FC391F'), # 1: red ('#25BC24', '#25BC24'), # 2: green ('#ADAD27', '#EAEC23'), # 3: yellow ('#492EE1', '#5833FF'), # 4: blue ('#D338D3', '#F935F8'), # 5: magenta ('#33BBC8', '#14F0F0'), # 6: cyan ('#CBCCCD', '#E9EBEB'), # 7: white ) else: # xterm colors: ANSI_COLORS = ( # Normal, Bright/Light ('#000000', '#7F7F7F'), # 0: black ('#CD0000', '#ff0000'), # 1: red ('#00CD00', '#00ff00'), # 2: green ('#CDCD00', '#ffff00'), # 3: yellow ('#0000EE', '#5C5CFF'), # 4: blue ('#CD00CD', '#ff00ff'), # 5: magenta ('#00CDCD', '#00ffff'), # 6: cyan ('#E5E5E5', '#ffffff'), # 7: white ) def __init__(self): self.intensity = 0 self.italic = None self.bold = None self.underline = None self.foreground_color = None self.background_color = None self.default_foreground_color = 30 self.default_background_color = 47 def set_code(self, code): assert isinstance(code, int) if code == 0: # Reset all settings self.reset() elif code == 1: # Text color intensity self.intensity = 1 # The following line is commented because most terminals won't # change the font weight, against ANSI standard recommendation: # self.bold = True elif code == 3: # Italic on self.italic = True elif code == 4: # Underline simple self.underline = True elif code == 22: # Normal text color intensity self.intensity = 0 self.bold = False elif code == 23: # No italic self.italic = False elif code == 24: # No underline self.underline = False elif code >= 30 and code <= 37: # Text color self.foreground_color = code elif code == 39: # Default text color self.foreground_color = self.default_foreground_color elif code >= 40 and code <= 47: # Background color self.background_color = code elif code == 49: # Default background color self.background_color = self.default_background_color self.set_style() def set_style(self): """ Set font style with the following attributes: 'foreground_color', 'background_color', 'italic', 'bold' and 'underline' """ raise NotImplementedError def reset(self): self.current_format = None self.intensity = 0 self.italic = False self.bold = False self.underline = False self.foreground_color = None self.background_color = None