summaryrefslogtreecommitdiff
path: root/colors.h
diff options
context:
space:
mode:
Diffstat (limited to 'colors.h')
-rw-r--r--colors.h70
1 files changed, 15 insertions, 55 deletions
diff --git a/colors.h b/colors.h
index f45ed01..92c8858 100644
--- a/colors.h
+++ b/colors.h
@@ -1,4 +1,4 @@
-ENUM_U16 {
+typedef enum {
COLOR_UNKNOWN,
COLOR_TEXT,
@@ -24,6 +24,13 @@ ENUM_U16 {
COLOR_ACTIVE_TAB_HL,
COLOR_SELECTED_TAB_HL,
COLOR_FIND_HL,
+
+ COLOR_AUTOCOMPLETE_BG,
+ COLOR_AUTOCOMPLETE_HL,
+ COLOR_AUTOCOMPLETE_BORDER,
+ COLOR_AUTOCOMPLETE_FUNCTION,
+ COLOR_AUTOCOMPLETE_VARIABLE,
+ COLOR_AUTOCOMPLETE_TYPE,
COLOR_YES,
COLOR_NO,
@@ -43,7 +50,7 @@ ENUM_U16 {
COLOR_COUNT
-} ENUM_U16_END(ColorSetting);
+} ColorSetting;
typedef struct {
ColorSetting setting;
@@ -82,6 +89,12 @@ static ColorName const color_names[] = {
{COLOR_STRING, "string"},
{COLOR_CHARACTER, "character"},
{COLOR_CONSTANT, "constant"},
+ {COLOR_AUTOCOMPLETE_BG, "autocomplete-bg"},
+ {COLOR_AUTOCOMPLETE_HL, "autocomplete-hl"},
+ {COLOR_AUTOCOMPLETE_BORDER, "autocomplete-border"},
+ {COLOR_AUTOCOMPLETE_VARIABLE, "autocomplete-variable"},
+ {COLOR_AUTOCOMPLETE_FUNCTION, "autocomplete-function"},
+ {COLOR_AUTOCOMPLETE_TYPE, "autocomplete-type"},
{COLOR_YES, "yes"},
{COLOR_NO, "no"},
{COLOR_CANCEL, "cancel"},
@@ -91,56 +104,3 @@ static ColorName const color_names[] = {
};
static_assert_if_possible(arr_count(color_names) == COLOR_COUNT)
-
-static ColorSetting color_setting_from_str(char const *str) {
- // @OPTIMIZE: sort color_names, binary search
- for (int i = 0; i < COLOR_COUNT; ++i) {
- ColorName const *n = &color_names[i];
- if (streq(n->name, str))
- return n->setting;
- }
- return COLOR_UNKNOWN;
-}
-
-static char const *color_setting_to_str(ColorSetting s) {
- for (int i = 0; i < COLOR_COUNT; ++i) {
- ColorName const *n = &color_names[i];
- if (n->setting == s)
- return n->name;
- }
- return "???";
-}
-
-// converts #rrggbb/#rrggbbaa to a color. returns false if it's not in the right format.
-static Status color_from_str(char const *str, u32 *color) {
- uint r = 0, g = 0, b = 0, a = 0xff;
- bool success = false;
- switch (strlen(str)) {
- case 4:
- success = sscanf(str, "#%01x%01x%01x", &r, &g, &b) == 3;
- // extend single hex digit to double hex digit
- r |= r << 4;
- g |= g << 4;
- b |= b << 4;
- break;
- case 5:
- success = sscanf(str, "#%01x%01x%01x%01x", &r, &g, &b, &a) == 4;
- r |= r << 4;
- g |= g << 4;
- b |= b << 4;
- a |= a << 4;
- break;
- case 7:
- success = sscanf(str, "#%02x%02x%02x", &r, &g, &b) == 3;
- break;
- case 9:
- success = sscanf(str, "#%02x%02x%02x%02x", &r, &g, &b, &a) == 4;
- break;
- }
- if (!success || r > 0xff || g > 0xff || b > 0xff || a > 0xff)
- return false;
- if (color)
- *color = (u32)r << 24 | (u32)g << 16 | (u32)b << 8 | (u32)a;
- return true;
-}
-