File: Color.h

package info (click to toggle)
tmatrix 1.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 244 kB
  • sloc: cpp: 1,214; ansic: 338; csh: 52; sh: 25; makefile: 8
file content (74 lines) | stat: -rw-r--r-- 2,276 bytes parent folder | download
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
/*
 * Copyright (C) 2018-2021 Miloš Stojanović
 *
 * SPDX-License-Identifier: GPL-2.0-only
 */

#ifndef COLOR_H
#define COLOR_H

#include <cstring>
#include <stdexcept>
#include <string_view>

struct Color {
	const char* Foreground;
	const char* Background;
	const char* Shade1;
	const char* Shade2;
	const char* Shade3;
	const char* Shade4;

	static constexpr std::size_t GetPrefixSize(bool isFade)
	{
		return isFade ? sizeof("\033[38;5;234m") : sizeof("\033[100m");
	}

	static constexpr Color GetColor(std::string_view color) {
		if (color == "default") {
			return Color {"\033[39m", "\033[49m",
				      "\033[38;5;10m", "\033[38;5;28m",
				      "\033[38;5;22m", "\033[38;5;234m" };
		} else if (color == "white") {
			return Color {"\033[97m", "\033[107m",
				      "\033[38;5;15m", "\033[38;5;246m",
				      "\033[38;5;240m", "\033[38;5;234m" };
		} else if (color == "gray") {
			return Color {"\033[90m", "\033[100m",
				      "\033[38;5;246m", "\033[38;5;242m",
				      "\033[38;5;238m", "\033[38;5;234m" };
		} else if (color == "black") {
			return Color {"\033[30m", "\033[40m",
				      "\033[38;5;240m", "\033[38;5;238m",
				      "\033[38;5;236m", "\033[38;5;234m" };
		} else if (color == "red") {
			return Color {"\033[31m", "\033[41m",
				      "\033[38;5;196m", "\033[38;5;124m",
				      "\033[38;5;52m", "\033[38;5;234m" };
		} else if (color == "green") {
			return Color {"\033[92m", "\033[42m",
				      "\033[38;5;10m", "\033[38;5;28m",
				      "\033[38;5;22m", "\033[38;5;234m" };
		} else if (color == "yellow") {
			return Color {"\033[33m", "\033[43m",
				      "\033[38;5;226m", "\033[38;5;178m",
				      "\033[38;5;94m", "\033[38;5;234m" };
		} else if (color == "blue") {
			return Color {"\033[34m", "\033[44m",
				      "\033[38;5;33m", "\033[38;5;26m",
				      "\033[38;5;18m", "\033[38;5;234m" };
		} else if (color == "magenta") {
			return Color {"\033[35m", "\033[45m",
				      "\033[38;5;201m", "\033[38;5;127m",
				      "\033[38;5;53m", "\033[38;5;234m" };
		} else if (color == "cyan") {
			return Color {"\033[36m", "\033[46m",
				      "\033[38;5;51m", "\033[38;5;38m",
				      "\033[38;5;24m", "\033[38;5;234m" };
		} else {
			throw std::invalid_argument("Color isn't valid.");
		}
	}
};

#endif