Source code for mridc.utils.formaters.colors

# encoding: utf-8
__author__ = "Dimitrios Karkalousos"

# Taken and adapted from: https://github.com/NVIDIA/NeMo/blob/main/nemo/utils/formatters/colors.py

CSI = "\033["
OSC = "\033]"
BEL = "\007"


[docs]def code_to_chars(code): """ Convert ANSI color code to string of characters. Parameters ---------- code: ANSI color code. int Returns ------- String of characters. str """ return CSI + str(code) + "m"
[docs]def set_title(title): """ Set terminal title. Parameters ---------- title: Title. str Returns ------- String of characters. str """ return f"{OSC}2;{title}{BEL}"
[docs]def clear_screen(mode=2): """ Clear terminal screen. Parameters ---------- mode: Mode. int Returns ------- String of characters. str """ return CSI + str(mode) + "J"
[docs]def clear_line(mode=2): """ Clear terminal line. Parameters ---------- mode: Mode. int Returns ------- String of characters. str """ return CSI + str(mode) + "K"
[docs]class AnsiCodes: """ANSI color codes.""" def __init__(self): # the subclasses declare class attributes which are numbers. # Upon instantiation we define instance attributes, which are the same # as the class attributes but wrapped with the ANSI escape sequence for name in dir(self): if not name.startswith("_"): value = getattr(self, name) setattr(self, name, code_to_chars(value))
[docs]class AnsiCursor: """ANSI cursor codes."""
[docs] @staticmethod def UP(n=1): """ Move the cursor up n lines. Parameters ---------- n: Number of lines. int Returns ------- String of characters. str """ return CSI + str(n) + "A"
[docs] @staticmethod def DOWN(n=1): """ Move the cursor down n lines. Parameters ---------- n: Number of lines. int Returns ------- String of characters. str """ return CSI + str(n) + "B"
[docs] @staticmethod def FORWARD(n=1): """ Move the cursor forward n lines. Parameters ---------- n: Number of lines. int Returns ------- String of characters. str """ return CSI + str(n) + "C"
[docs] @staticmethod def BACK(n=1): """ Move the cursor back n lines. Parameters ---------- n: Number of lines. int Returns ------- String of characters. str """ return CSI + str(n) + "D"
[docs] @staticmethod def POS(x=1, y=1): """ Move the cursor to the specified position. Parameters ---------- x: X position. int y: Y position. int Returns ------- String of characters. str """ return CSI + str(y) + ";" + str(x) + "H"
[docs]class AnsiFore(AnsiCodes): """ANSI color codes for foreground text.""" BLACK = 30 RED = 31 GREEN = 32 YELLOW = 33 BLUE = 34 MAGENTA = 35 CYAN = 36 WHITE = 37 RESET = 39 # These are fairly well supported, but not part of the standard. LIGHTBLACK_EX = 90 LIGHTRED_EX = 91 LIGHTGREEN_EX = 92 LIGHTYELLOW_EX = 93 LIGHTBLUE_EX = 94 LIGHTMAGENTA_EX = 95 LIGHTCYAN_EX = 96 LIGHTWHITE_EX = 97
[docs]class AnsiBack(AnsiCodes): """ANSI color codes for background text.""" BLACK = 40 RED = 41 GREEN = 42 YELLOW = 43 BLUE = 44 MAGENTA = 45 CYAN = 46 WHITE = 47 RESET = 49 # These are fairly well supported, but not part of the standard. LIGHTBLACK_EX = 100 LIGHTRED_EX = 101 LIGHTGREEN_EX = 102 LIGHTYELLOW_EX = 103 LIGHTBLUE_EX = 104 LIGHTMAGENTA_EX = 105 LIGHTCYAN_EX = 106 LIGHTWHITE_EX = 107
[docs]class AnsiStyle(AnsiCodes): """ANSI color codes for text styles.""" BRIGHT = 1 DIM = 2 NORMAL = 22 RESET_ALL = 0
Fore = AnsiFore() Back = AnsiBack() Style = AnsiStyle() Cursor = AnsiCursor()