/* * No copyright is claimed. This code is in the public domain; do with * it what you wish. * * Written by Karel Zak */ #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; }