from typing import Any, Optional class Color: BLACK = 0 RED = 1 GREEN = 2 YELLOW = 3 BLUE = 4 MAGENTA = 5 CYAN = 6 WHITE = 7 BRIGHT_BLACK = 8 BRIGHT_RED = 9 BRIGHT_GREEN = 10 BRIGHT_YELLOW = 11 BRIGHT_BLUE = 12 BRIGHT_MAGENTA = 13 BRIGHT_CYAN = 14 BRIGHT_WHITE = 15 def __init__( self, foreground: Optional[int], background: Optional[int] = None ) -> None: self.foreground = foreground self.background = background def print(self, *args: Any, end: str = "\n") -> None: print(self.format(*args), end=end) def format(self, *args: Any) -> str: # Create the color string. colors = [] if self.foreground is not None: colors.append(f"38;5;{self.foreground}") if self.background is not None: colors.append(f"48;5;{self.background}") color_str = ";".join(colors) text = " ".join(str(a) for a in args) if not text: return "" # Reset the color as necessary. reset = [] if self.foreground is not None: reset.append("39") if self.background is not None: reset.append("49") reset_str = ";".join(reset) return f"\033[{color_str}m{text}\033[{reset_str}m"