define a structure for object IDs
[gitweb.git] / color.c
diff --git a/color.c b/color.c
index ae687929233a03d2601d1a2a08a55a8d192f6af1..9027352ad7786746537adea9007bd46f46edbb4e 100644 (file)
--- a/color.c
+++ b/color.c
@@ -112,6 +112,7 @@ static int parse_color(struct color *out, const char *name, int len)
                } else if (val < 8) {
                        out->type = COLOR_ANSI;
                        out->value = val;
+                       return 0;
                } else if (val < 256) {
                        out->type = COLOR_256;
                        out->value = val;
@@ -124,9 +125,11 @@ static int parse_color(struct color *out, const char *name, int len)
 
 static int parse_attr(const char *name, int len)
 {
-       static const int attr_values[] = { 1, 2, 4, 5, 7 };
+       static const int attr_values[] = { 1, 2, 4, 5, 7,
+                                          22, 22, 24, 25, 27 };
        static const char * const attr_names[] = {
-               "bold", "dim", "ul", "blink", "reverse"
+               "bold", "dim", "ul", "blink", "reverse",
+               "nobold", "nodim", "noul", "noblink", "noreverse"
        };
        int i;
        for (i = 0; i < ARRAY_SIZE(attr_names); i++) {
@@ -142,9 +145,6 @@ int color_parse(const char *value, char *dst)
        return color_parse_mem(value, strlen(value), dst);
 }
 
-#define COLOR_FOREGROUND '3'
-#define COLOR_BACKGROUND '4'
-
 /*
  * Write the ANSI color codes for "c" to "out"; the string should
  * already have the ANSI escape code in it. "out" should have enough
@@ -238,17 +238,19 @@ int color_parse_mem(const char *value, int value_len, char *dst)
                        attr &= ~bit;
                        if (sep++)
                                *dst++ = ';';
-                       *dst++ = '0' + i;
+                       dst += sprintf(dst, "%d", i);
                }
                if (!color_empty(&fg)) {
                        if (sep++)
                                *dst++ = ';';
-                       dst = color_output(dst, &fg, COLOR_FOREGROUND);
+                       /* foreground colors are all in the 3x range */
+                       dst = color_output(dst, &fg, '3');
                }
                if (!color_empty(&bg)) {
                        if (sep++)
                                *dst++ = ';';
-                       dst = color_output(dst, &bg, COLOR_BACKGROUND);
+                       /* background colors are all in the 4x range */
+                       dst = color_output(dst, &bg, '4');
                }
                *dst++ = 'm';
        }