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
|
/*
* No copyright is claimed. This code is in the public domain; do with
* it what you wish.
*
* Written by Karel Zak <kzak@redhat.com>
*/
#include "c.h"
#include "color-names.h"
struct ul_color_name {
const char *name;
const char *seq;
};
/*
* qsort/bsearch buddy
*/
static int cmp_color_name(const void *a0, const void *b0)
{
const struct ul_color_name
*a = (const struct ul_color_name *) a0,
*b = (const struct ul_color_name *) b0;
return strcmp(a->name, b->name);
}
/*
* Maintains human readable color names
*/
const char *color_sequence_from_colorname(const char *str)
{
static const struct ul_color_name basic_schemes[] = {
{ "black", UL_COLOR_BLACK },
{ "blink", UL_COLOR_BLINK },
{ "blue", UL_COLOR_BLUE },
{ "bold", UL_COLOR_BOLD },
{ "brown", UL_COLOR_BROWN },
{ "cyan", UL_COLOR_CYAN },
{ "darkgray", UL_COLOR_DARK_GRAY },
{ "gray", UL_COLOR_GRAY },
{ "green", UL_COLOR_GREEN },
{ "halfbright", UL_COLOR_HALFBRIGHT },
{ "lightblue", UL_COLOR_BOLD_BLUE },
{ "lightcyan", UL_COLOR_BOLD_CYAN },
{ "lightgray,", UL_COLOR_GRAY },
{ "lightgreen", UL_COLOR_BOLD_GREEN },
{ "lightmagenta", UL_COLOR_BOLD_MAGENTA },
{ "lightred", UL_COLOR_BOLD_RED },
{ "magenta", UL_COLOR_MAGENTA },
{ "red", UL_COLOR_RED },
{ "reset", UL_COLOR_RESET, },
{ "reverse", UL_COLOR_REVERSE },
{ "yellow", UL_COLOR_BOLD_YELLOW },
{ "white", UL_COLOR_WHITE }
};
struct ul_color_name key = { .name = str }, *res;
if (!str)
return NULL;
res = bsearch(&key, basic_schemes, ARRAY_SIZE(basic_schemes),
sizeof(struct ul_color_name),
cmp_color_name);
return res ? res->seq : NULL;
}
|