aboutsummaryrefslogtreecommitdiff
import enum, typing
from . import _consts_256_color

class IRCColor(object):
    def __init__(self, irc: int, ansi: int, is_256):
        self.irc = irc
        self.ansi = ansi
        self.is_256 = is_256

    def to_irc(self):
        return str(self.irc)
    def to_ansi(self, background=False):
        if not self.is_256:
            code = self.ansi + (10 if background else 0)
            return ANSI_FORMAT % code
        else:
            return ANSI_256_COLOR % (
                48 if background else 38,
                self.ansi
            )

COLOR_NAMES = {}
COLOR_CODES = {}
def _color(name: str, irc: int, ansi: int, color_bold: bool):
    color = IRCColor(irc, ansi, color_bold)
    COLOR_NAMES[name] = color
    COLOR_CODES[irc] = color
    return color

WHITE       = _color("white",       0,  97, False)
BLACK       = _color("black",       1,  30, False)
BLUE        = _color("blue",        2,  34, False)
GREEN       = _color("green",       3,  32, False)
RED         = _color("red",         4,  91, False)
BROWN       = _color("brown",       5,  31, False)
PURPLE      = _color("purple",      6,  35, False)
ORANGE      = _color("orange",      7,  33, False)
YELLOW      = _color("yellow",      8,  93, False)
LIGHTGREEN  = _color("light green", 9,  92, False)
CYAN        = _color("cyan",        10, 36, False)
LIGHTCYAN   = _color("light cyan",  11, 96, False)
LIGHTBLUE   = _color("light blue",  12, 94, False)
PINK        = _color("pink",        13, 95, False)
GREY        = _color("grey",        14, 90, False)
LIGHTGREY   = _color("light grey",  15, 37, False)
TRANSPARENT = _color("transparent", 99, 39, False)

for irc_code, ansi_code in _consts_256_color.COLORS.items():
    _color("256-%d" % irc_code, irc_code, ansi_code, True)

BOLD      = "\x02"
ITALIC    = "\x1D"
UNDERLINE = "\x1F"
INVERT    = "\x16"
COLOR     = "\x03"
RESET     = "\x0F"

ANSI_FORMAT           = "\033[%sm"
ANSI_256_COLOR        = "\033[%d;5;%dm"
ANSI_RESET            = "\033[0m"
ANSI_FOREGROUND_RESET = "\033[39m"
ANSI_BACKGROUND_RESET = "\033[49m"
ANSI_BOLD             = "\033[1m"
ANSI_BOLD_RESET       = "\033[22m"
ANSI_UNDERLINE        = "\033[4m"
ANSI_UNDERLINE_RESET  = "\033[24m"

PERMISSION_HARD_FAIL = 0
PERMISSION_FORCE_SUCCESS = 1
PERMISSION_ERROR = 2

class Exit(enum.Enum):
    WRONGVERSION = 1
    LOCKED = 2
    DISCONNECT = 3
    FATAL = 4

    PANIC = 20