| |
| #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) |
| { |
| struct ul_color_name *a = (struct ul_color_name *) a0, |
| *b = (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 }, |
| }; |
| struct ul_color_name key = { .name = (char *) 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; |
| } |