aboutsummaryrefslogtreecommitdiff
path: root/src/gpt_chat_cli/color.py
blob: ce1b1829a6bec77030bc64784b2690701ae22931 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from typing import Literal

class ColorCode:
    """A superclass to signal that color codes are strings"""

    BLACK: Literal[str]
    RED: Literal[str]
    GREEN: Literal[str]
    YELLOW: Literal[str]
    BLUE: Literal[str]
    MAGENTA: Literal[str]
    CYAN: Literal[str]
    WHITE: Literal[str]
    RESET: Literal[str]

    BLACK_BG: Literal[str]
    RED_BG: Literal[str]
    GREEN_BG: Literal[str]
    YELLOW_BG: Literal[str]
    BLUE_BG: Literal[str]
    MAGENTA_BG: Literal[str]
    CYAN_BG: Literal[str]
    WHITE_BG: Literal[str]

    BOLD: Literal[str]
    UNDERLINE: Literal[str]
    BLINK: Literal[str]


class VT100ColorCode(ColorCode):
    """A class containing VT100 color codes"""

    # Define the color codes
    BLACK = '\033[30m'
    RED = '\033[31m'
    GREEN = '\033[32m'
    YELLOW = '\033[33m'
    BLUE = '\033[34m'
    MAGENTA = '\033[35m'
    CYAN = '\033[36m'
    WHITE = '\033[37m'
    RESET = '\033[0m'

    # Define the background color codes
    BLACK_BG = '\033[40m'
    RED_BG = '\033[41m'
    GREEN_BG = '\033[42m'
    YELLOW_BG = '\033[43m'
    BLUE_BG = '\033[44m'
    MAGENTA_BG = '\033[45m'
    CYAN_BG = '\033[46m'
    WHITE_BG = '\033[47m'

    # Define the bold, underline and blink codes
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    BLINK = '\033[5m'

class NoColorColorCode(ColorCode):
    """A class nullifying color codes to disable color"""

    # Define the color codes
    BLACK = ''
    RED = ''
    GREEN = ''
    YELLOW = ''
    BLUE = ''
    MAGENTA = ''
    CYAN = ''
    WHITE = ''
    RESET = ''

    # Define the background color codes
    BLACK_BG = ''
    RED_BG = ''
    GREEN_BG = ''
    YELLOW_BG = ''
    BLUE_BG = ''
    MAGENTA_BG = ''
    CYAN_BG = ''
    WHITE_BG = ''

    # Define the bold, underline and blink codes
    BOLD = ''
    UNDERLINE = ''
    BLINK = ''

def get_color_codes(no_color=False) -> ColorCode:
    if no_color:
        return NoColorColorCode
    else:
        return VT100ColorCode