]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Support reacher set of HTML colors
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 6 Aug 2016 20:49:07 +0000 (21:49 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 6 Aug 2016 20:49:07 +0000 (21:49 +0100)
src/libserver/html.c
src/libserver/html_colors.h [new file with mode: 0644]

index d904fa9a2fc4a88c89994dd8bab0b0ba06f78072..3fb17d4e66856df8fc895d5f4509f228d07e06e7 100644 (file)
 #include "message.h"
 #include "html.h"
 #include "html_tags.h"
+#include "html_colors.h"
 #include "url.h"
 
 static sig_atomic_t tags_sorted = 0;
+static sig_atomic_t entities_sorted = 0;
 
 struct html_tag_def {
        gint id;
@@ -155,7 +157,6 @@ static struct html_tag_def tag_defs[] = {
        {Tag_WBR, "wbr", (CM_INLINE | CM_EMPTY)},
 };
 
-static sig_atomic_t entities_sorted = 0;
 struct _entity;
 typedef struct _entity entity;
 
@@ -437,6 +438,8 @@ static entity entities_defs[] = {
        {"euro", 8364, "E"},
 };
 
+static GHashTable *html_colors_hash = NULL;
+
 static entity entities_defs_num[ (G_N_ELEMENTS (entities_defs)) ];
 static struct html_tag_def tag_defs_num[ (G_N_ELEMENTS (tag_defs)) ];
 
@@ -509,6 +512,52 @@ entity_cmp_num (const void *m1, const void *m2)
        return p1->code - p2->code;
 }
 
+static void
+rspamd_html_library_init (void)
+{
+       if (!tags_sorted) {
+               qsort (tag_defs, G_N_ELEMENTS (
+                               tag_defs), sizeof (struct html_tag_def), tag_cmp);
+               memcpy (tag_defs_num, tag_defs, sizeof (tag_defs));
+               qsort (tag_defs_num, G_N_ELEMENTS (tag_defs_num),
+                               sizeof (struct html_tag_def), tag_cmp_id);
+               tags_sorted = 1;
+       }
+
+       if (!entities_sorted) {
+               qsort (entities_defs, G_N_ELEMENTS (
+                               entities_defs), sizeof (entity), entity_cmp);
+               memcpy (entities_defs_num, entities_defs, sizeof (entities_defs));
+               qsort (entities_defs_num, G_N_ELEMENTS (
+                               entities_defs), sizeof (entity), entity_cmp_num);
+               entities_sorted = 1;
+       }
+
+       if (html_colors_hash == NULL) {
+               guint i;
+
+               html_colors_hash = g_hash_table_new_full (rspamd_ftok_icase_hash,
+                               rspamd_ftok_icase_equal, g_free, g_free);
+
+               for (i = 0; i < G_N_ELEMENTS (html_colornames); i ++) {
+                       struct html_color *color;
+                       rspamd_ftok_t *key;
+
+                       color = g_malloc0 (sizeof (*color));
+                       color->d.comp.alpha = 255;
+                       color->d.comp.r = html_colornames[i].rgb.r;
+                       color->d.comp.g = html_colornames[i].rgb.g;
+                       color->d.comp.b = html_colornames[i].rgb.b;
+                       color->valid = TRUE;
+                       key = g_malloc0 (sizeof (*key));
+                       key->begin = html_colornames[i].name;
+                       key->len = strlen (html_colornames[i].name);
+
+                       g_hash_table_insert (html_colors_hash, key, color);
+               }
+       }
+}
+
 static gboolean
 rspamd_html_check_balance (GNode * node, GNode ** cur_level)
 {
@@ -1412,49 +1461,13 @@ rspamd_html_process_img_tag (rspamd_mempool_t *pool, struct html_tag *tag,
        tag->extra = img;
 }
 
-/* Keep sorted by name */
-struct html_color_match {
-       const char *name;
-       guint8 r;
-       guint8 g;
-       guint8 b;
-} html_colors[] = {
-       {"black", 0x00, 0x00, 0x00},
-       {"blue", 0x00, 0x00, 0xFF},
-       {"brown", 0xA5, 0x2A, 0x2A},
-       {"cyan", 0x00, 0xFF, 0xFF},
-       {"darkblue", 0x00, 0x0, 0x0A0},
-       {"gray", 0x80, 0x80, 0x80},
-       {"green", 0x00, 0x80, 0x00},
-       {"lightblue", 0xAD, 0xD8, 0xE6},
-       {"lime", 0x00, 0xFF, 0x00},
-       {"magenta", 0xFF, 0x00, 0xFF},
-       {"maroon", 0x80, 0x00, 0x00},
-       {"olive", 0x80, 0x80, 0x00},
-       {"orange", 0xFF, 0xA5, 0x00},
-       {"purple", 0x80, 0x00, 0x80},
-       {"red",0xFF, 0x00, 0x00},
-       {"silver", 0xC0, 0xC0, 0xC0},
-       {"white", 0xFF, 0xFF, 0xFF},
-       {"yellow", 0xFF, 0xFF, 0x00},
-};
-
-static gint
-rspamd_html_color_cmp (const void *key, const void *elt)
-{
-       const rspamd_ftok_t *fk = key;
-       const struct html_color_match *el = elt;
-
-       return g_ascii_strncasecmp (fk->begin, el->name, fk->len);
-}
-
 static void
 rspamd_html_process_color (const gchar *line, guint len, struct html_color *cl)
 {
        const gchar *p = line, *end = line + len;
        char hexbuf[7];
        rspamd_ftok_t search;
-       struct html_color_match *el;
+       struct html_color *el;
 
        memset (cl, 0, sizeof (*cl));
 
@@ -1470,14 +1483,10 @@ rspamd_html_process_color (const gchar *line, guint len, struct html_color *cl)
                search.begin = line;
                search.len = len;
 
-               el = bsearch (&search, html_colors, G_N_ELEMENTS (html_colors),
-                               sizeof (html_colors[0]), rspamd_html_color_cmp);
+               el = g_hash_table_lookup (html_colors_hash, &search);
 
                if (el != NULL) {
-                       cl->d.comp.r = el->r;
-                       cl->d.comp.g = el->g;
-                       cl->d.comp.b = el->b;
-                       cl->valid = TRUE;
+                       memcpy (cl, el, sizeof (*cl));
                }
        }
 }
@@ -1708,23 +1717,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc,
        g_assert (hc != NULL);
        g_assert (pool != NULL);
 
-       if (!tags_sorted) {
-               qsort (tag_defs, G_N_ELEMENTS (
-                               tag_defs), sizeof (struct html_tag_def), tag_cmp);
-               memcpy (tag_defs_num, tag_defs, sizeof (tag_defs));
-               qsort (tag_defs_num, G_N_ELEMENTS (tag_defs_num),
-                               sizeof (struct html_tag_def), tag_cmp_id);
-               tags_sorted = 1;
-       }
-       if (!entities_sorted) {
-               qsort (entities_defs, G_N_ELEMENTS (
-                               entities_defs), sizeof (entity), entity_cmp);
-               memcpy (entities_defs_num, entities_defs, sizeof (entities_defs));
-               qsort (entities_defs_num, G_N_ELEMENTS (
-                               entities_defs), sizeof (entity), entity_cmp_num);
-               entities_sorted = 1;
-       }
-
+       rspamd_html_library_init ();
        hc->tags_seen = rspamd_mempool_alloc0 (pool, NBYTES (G_N_ELEMENTS (tag_defs)));
 
        /* Set white background color by default */
diff --git a/src/libserver/html_colors.h b/src/libserver/html_colors.h
new file mode 100644 (file)
index 0000000..9806ecc
--- /dev/null
@@ -0,0 +1,543 @@
+/*-
+ * Copyright 2016 Vsevolod Stakhov
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SRC_LIBSERVER_HTML_COLORS_H_
+#define SRC_LIBSERVER_HTML_COLORS_H_
+
+struct rspamd_html_colorname {
+       struct {
+               guint8 r;
+               guint8 g;
+               guint8 b;
+       } rgb;
+       const gchar *name;
+};
+
+const static struct rspamd_html_colorname html_colornames[] = {
+               { {240, 248, 255}, "aliceblue"},
+               { {250, 235, 215}, "antiquewhite"},
+               { {255, 239, 219}, "antiquewhite1"},
+               { {238, 223, 204}, "antiquewhite2"},
+               { {205, 192, 176}, "antiquewhite3"},
+               { {139, 131, 120}, "antiquewhite4"},
+               { {127, 255, 212}, "aquamarine"},
+               { {127, 255, 212}, "aquamarine1"},
+               { {118, 238, 198}, "aquamarine2"},
+               { {102, 205, 170}, "aquamarine3"},
+               { {240, 255, 255}, "azure"},
+               { {240, 255, 255}, "azure1"},
+               { {224, 238, 238}, "azure2"},
+               { {193, 205, 205}, "azure3"},
+               { {131, 139, 139}, "azure4"},
+               { {245, 245, 220}, "beige"},
+               { {255, 228, 196}, "bisque"},
+               { {255, 228, 196}, "bisque1"},
+               { {238, 213, 183}, "bisque2"},
+               { {205, 183, 158}, "bisque3"},
+               { {139, 125, 107}, "bisque4"},
+               { {255, 235, 205}, "blanchedalmond"},
+               { {138, 43, 226}, "blueviolet"},
+               { {165, 42, 42}, "brown"},
+               { {255, 64, 64}, "brown1"},
+               { {238, 59, 59}, "brown2"},
+               { {205, 51, 51}, "brown3"},
+               { {139, 35, 35}, "brown4"},
+               { {222, 184, 135}, "burlywood"},
+               { {255, 211, 155}, "burlywood1"},
+               { {238, 197, 145}, "burlywood2"},
+               { {205, 170, 125}, "burlywood3"},
+               { {139, 115, 85}, "burlywood4"},
+               { {152, 245, 255}, "cadetblue1"},
+               { {142, 229, 238}, "cadetblue2"},
+               { {122, 197, 205}, "cadetblue3"},
+               { {127, 255, 0}, "chartreuse"},
+               { {127, 255, 0}, "chartreuse1"},
+               { {118, 238, 0}, "chartreuse2"},
+               { {102, 205, 0}, "chartreuse3"},
+               { {210, 105, 30}, "chocolate"},
+               { {255, 127, 36}, "chocolate1"},
+               { {238, 118, 33}, "chocolate2"},
+               { {205, 102, 29}, "chocolate3"},
+               { {139, 69, 19}, "chocolate4"},
+               { {255, 127, 80}, "coral"},
+               { {255, 114, 86}, "coral1"},
+               { {238, 106, 80}, "coral2"},
+               { {205, 91, 69}, "coral3"},
+               { {139, 62, 47}, "coral4"},
+               { {100, 149, 237}, "cornflowerblue"},
+               { {255, 248, 220}, "cornsilk"},
+               { {255, 248, 220}, "cornsilk1"},
+               { {238, 232, 205}, "cornsilk2"},
+               { {205, 200, 177}, "cornsilk3"},
+               { {139, 136, 120}, "cornsilk4"},
+               { {220, 20, 60}, "crimson"},
+               { {0, 0, 139}, "darkblue"},
+               { {0, 139, 139}, "darkcyan"},
+               { {184, 134, 11}, "darkgoldenrod"},
+               { {255, 185, 15}, "darkgoldenrod1"},
+               { {238, 173, 14}, "darkgoldenrod2"},
+               { {205, 149, 12}, "darkgoldenrod3"},
+               { {139, 101, 8}, "darkgoldenrod4"},
+               { {169, 169, 169}, "darkgray"},
+               { {169, 169, 169}, "darkgrey"},
+               { {189, 183, 107}, "darkkhaki"},
+               { {139, 0, 139}, "darkmagenta"},
+               { {202, 255, 112}, "darkolivegreen1"},
+               { {188, 238, 104}, "darkolivegreen2"},
+               { {162, 205, 90}, "darkolivegreen3"},
+               { {110, 139, 61}, "darkolivegreen4"},
+               { {255, 140, 0}, "darkorange"},
+               { {255, 127, 0}, "darkorange1"},
+               { {238, 118, 0}, "darkorange2"},
+               { {205, 102, 0}, "darkorange3"},
+               { {139, 69, 0}, "darkorange4"},
+               { {153, 50, 204}, "darkorchid"},
+               { {191, 62, 255}, "darkorchid1"},
+               { {178, 58, 238}, "darkorchid2"},
+               { {154, 50, 205}, "darkorchid3"},
+               { {104, 34, 139}, "darkorchid4"},
+               { {139, 0, 0}, "darkred"},
+               { {233, 150, 122}, "darksalmon"},
+               { {143, 188, 143}, "darkseagreen"},
+               { {193, 255, 193}, "darkseagreen1"},
+               { {180, 238, 180}, "darkseagreen2"},
+               { {155, 205, 155}, "darkseagreen3"},
+               { {105, 139, 105}, "darkseagreen4"},
+               { {151, 255, 255}, "darkslategray1"},
+               { {141, 238, 238}, "darkslategray2"},
+               { {121, 205, 205}, "darkslategray3"},
+               { {148, 0, 211}, "darkviolet"},
+               { {255, 20, 147}, "deeppink"},
+               { {255, 20, 147}, "deeppink1"},
+               { {238, 18, 137}, "deeppink2"},
+               { {205, 16, 118}, "deeppink3"},
+               { {139, 10, 80}, "deeppink4"},
+               { {105, 105, 105}, "dimgray"},
+               { {105, 105, 105}, "dimgrey"},
+               { {178, 34, 34}, "firebrick"},
+               { {255, 48, 48}, "firebrick1"},
+               { {238, 44, 44}, "firebrick2"},
+               { {205, 38, 38}, "firebrick3"},
+               { {139, 26, 26}, "firebrick4"},
+               { {255, 250, 240}, "floralwhite"},
+               { {255, 0, 255}, "fuchsia"},
+               { {220, 220, 220}, "gainsboro"},
+               { {248, 248, 255}, "ghostwhite"},
+               { {255, 215, 0}, "gold"},
+               { {255, 215, 0}, "gold1"},
+               { {238, 201, 0}, "gold2"},
+               { {205, 173, 0}, "gold3"},
+               { {139, 117, 0}, "gold4"},
+               { {218, 165, 32}, "goldenrod"},
+               { {255, 193, 37}, "goldenrod1"},
+               { {238, 180, 34}, "goldenrod2"},
+               { {205, 155, 29}, "goldenrod3"},
+               { {139, 105, 20}, "goldenrod4"},
+               { {190, 190, 190}, "gray"},
+               { {255, 255, 255}, "gray100"},
+               { {102, 102, 102}, "gray40"},
+               { {105, 105, 105}, "gray41"},
+               { {107, 107, 107}, "gray42"},
+               { {110, 110, 110}, "gray43"},
+               { {112, 112, 112}, "gray44"},
+               { {115, 115, 115}, "gray45"},
+               { {117, 117, 117}, "gray46"},
+               { {120, 120, 120}, "gray47"},
+               { {122, 122, 122}, "gray48"},
+               { {125, 125, 125}, "gray49"},
+               { {127, 127, 127}, "gray50"},
+               { {130, 130, 130}, "gray51"},
+               { {133, 133, 133}, "gray52"},
+               { {135, 135, 135}, "gray53"},
+               { {138, 138, 138}, "gray54"},
+               { {140, 140, 140}, "gray55"},
+               { {143, 143, 143}, "gray56"},
+               { {145, 145, 145}, "gray57"},
+               { {148, 148, 148}, "gray58"},
+               { {150, 150, 150}, "gray59"},
+               { {153, 153, 153}, "gray60"},
+               { {156, 156, 156}, "gray61"},
+               { {158, 158, 158}, "gray62"},
+               { {161, 161, 161}, "gray63"},
+               { {163, 163, 163}, "gray64"},
+               { {166, 166, 166}, "gray65"},
+               { {168, 168, 168}, "gray66"},
+               { {171, 171, 171}, "gray67"},
+               { {173, 173, 173}, "gray68"},
+               { {176, 176, 176}, "gray69"},
+               { {179, 179, 179}, "gray70"},
+               { {181, 181, 181}, "gray71"},
+               { {184, 184, 184}, "gray72"},
+               { {186, 186, 186}, "gray73"},
+               { {189, 189, 189}, "gray74"},
+               { {191, 191, 191}, "gray75"},
+               { {194, 194, 194}, "gray76"},
+               { {196, 196, 196}, "gray77"},
+               { {199, 199, 199}, "gray78"},
+               { {201, 201, 201}, "gray79"},
+               { {204, 204, 204}, "gray80"},
+               { {207, 207, 207}, "gray81"},
+               { {209, 209, 209}, "gray82"},
+               { {212, 212, 212}, "gray83"},
+               { {214, 214, 214}, "gray84"},
+               { {217, 217, 217}, "gray85"},
+               { {219, 219, 219}, "gray86"},
+               { {222, 222, 222}, "gray87"},
+               { {224, 224, 224}, "gray88"},
+               { {227, 227, 227}, "gray89"},
+               { {229, 229, 229}, "gray90"},
+               { {232, 232, 232}, "gray91"},
+               { {235, 235, 235}, "gray92"},
+               { {237, 237, 237}, "gray93"},
+               { {240, 240, 240}, "gray94"},
+               { {242, 242, 242}, "gray95"},
+               { {245, 245, 245}, "gray96"},
+               { {247, 247, 247}, "gray97"},
+               { {250, 250, 250}, "gray98"},
+               { {252, 252, 252}, "gray99"},
+               { {173, 255, 47}, "greenyellow"},
+               { {190, 190, 190}, "grey"},
+               { {255, 255, 255}, "grey100"},
+               { {102, 102, 102}, "grey40"},
+               { {105, 105, 105}, "grey41"},
+               { {107, 107, 107}, "grey42"},
+               { {110, 110, 110}, "grey43"},
+               { {112, 112, 112}, "grey44"},
+               { {115, 115, 115}, "grey45"},
+               { {117, 117, 117}, "grey46"},
+               { {120, 120, 120}, "grey47"},
+               { {122, 122, 122}, "grey48"},
+               { {125, 125, 125}, "grey49"},
+               { {127, 127, 127}, "grey50"},
+               { {130, 130, 130}, "grey51"},
+               { {133, 133, 133}, "grey52"},
+               { {135, 135, 135}, "grey53"},
+               { {138, 138, 138}, "grey54"},
+               { {140, 140, 140}, "grey55"},
+               { {143, 143, 143}, "grey56"},
+               { {145, 145, 145}, "grey57"},
+               { {148, 148, 148}, "grey58"},
+               { {150, 150, 150}, "grey59"},
+               { {153, 153, 153}, "grey60"},
+               { {156, 156, 156}, "grey61"},
+               { {158, 158, 158}, "grey62"},
+               { {161, 161, 161}, "grey63"},
+               { {163, 163, 163}, "grey64"},
+               { {166, 166, 166}, "grey65"},
+               { {168, 168, 168}, "grey66"},
+               { {171, 171, 171}, "grey67"},
+               { {173, 173, 173}, "grey68"},
+               { {176, 176, 176}, "grey69"},
+               { {179, 179, 179}, "grey70"},
+               { {181, 181, 181}, "grey71"},
+               { {184, 184, 184}, "grey72"},
+               { {186, 186, 186}, "grey73"},
+               { {189, 189, 189}, "grey74"},
+               { {191, 191, 191}, "grey75"},
+               { {194, 194, 194}, "grey76"},
+               { {196, 196, 196}, "grey77"},
+               { {199, 199, 199}, "grey78"},
+               { {201, 201, 201}, "grey79"},
+               { {204, 204, 204}, "grey80"},
+               { {207, 207, 207}, "grey81"},
+               { {209, 209, 209}, "grey82"},
+               { {212, 212, 212}, "grey83"},
+               { {214, 214, 214}, "grey84"},
+               { {217, 217, 217}, "grey85"},
+               { {219, 219, 219}, "grey86"},
+               { {222, 222, 222}, "grey87"},
+               { {224, 224, 224}, "grey88"},
+               { {227, 227, 227}, "grey89"},
+               { {229, 229, 229}, "grey90"},
+               { {232, 232, 232}, "grey91"},
+               { {235, 235, 235}, "grey92"},
+               { {237, 237, 237}, "grey93"},
+               { {240, 240, 240}, "grey94"},
+               { {242, 242, 242}, "grey95"},
+               { {245, 245, 245}, "grey96"},
+               { {247, 247, 247}, "grey97"},
+               { {250, 250, 250}, "grey98"},
+               { {252, 252, 252}, "grey99"},
+               { {240, 255, 240}, "honeydew"},
+               { {240, 255, 240}, "honeydew1"},
+               { {224, 238, 224}, "honeydew2"},
+               { {193, 205, 193}, "honeydew3"},
+               { {131, 139, 131}, "honeydew4"},
+               { {255, 105, 180}, "hotpink"},
+               { {255, 110, 180}, "hotpink1"},
+               { {238, 106, 167}, "hotpink2"},
+               { {205, 96, 144}, "hotpink3"},
+               { {139, 58, 98}, "hotpink4"},
+               { {205, 92, 92}, "indianred"},
+               { {255, 106, 106}, "indianred1"},
+               { {238, 99, 99}, "indianred2"},
+               { {205, 85, 85}, "indianred3"},
+               { {139, 58, 58}, "indianred4"},
+               { {255, 255, 240}, "ivory"},
+               { {255, 255, 240}, "ivory1"},
+               { {238, 238, 224}, "ivory2"},
+               { {205, 205, 193}, "ivory3"},
+               { {139, 139, 131}, "ivory4"},
+               { {240, 230, 140}, "khaki"},
+               { {255, 246, 143}, "khaki1"},
+               { {238, 230, 133}, "khaki2"},
+               { {205, 198, 115}, "khaki3"},
+               { {139, 134, 78}, "khaki4"},
+               { {230, 230, 250}, "lavender"},
+               { {255, 240, 245}, "lavenderblush"},
+               { {255, 240, 245}, "lavenderblush1"},
+               { {238, 224, 229}, "lavenderblush2"},
+               { {205, 193, 197}, "lavenderblush3"},
+               { {139, 131, 134}, "lavenderblush4"},
+               { {124, 252, 0}, "lawngreen"},
+               { {255, 250, 205}, "lemonchiffon"},
+               { {255, 250, 205}, "lemonchiffon1"},
+               { {238, 233, 191}, "lemonchiffon2"},
+               { {205, 201, 165}, "lemonchiffon3"},
+               { {139, 137, 112}, "lemonchiffon4"},
+               { {173, 216, 230}, "lightblue"},
+               { {191, 239, 255}, "lightblue1"},
+               { {178, 223, 238}, "lightblue2"},
+               { {154, 192, 205}, "lightblue3"},
+               { {104, 131, 139}, "lightblue4"},
+               { {240, 128, 128}, "lightcoral"},
+               { {224, 255, 255}, "lightcyan"},
+               { {224, 255, 255}, "lightcyan1"},
+               { {209, 238, 238}, "lightcyan2"},
+               { {180, 205, 205}, "lightcyan3"},
+               { {122, 139, 139}, "lightcyan4"},
+               { {238, 221, 130}, "lightgoldenrod"},
+               { {255, 236, 139}, "lightgoldenrod1"},
+               { {238, 220, 130}, "lightgoldenrod2"},
+               { {205, 190, 112}, "lightgoldenrod3"},
+               { {139, 129, 76}, "lightgoldenrod4"},
+               { {250, 250, 210}, "lightgoldenrodyellow"},
+               { {211, 211, 211}, "lightgray"},
+               { {144, 238, 144}, "lightgreen"},
+               { {211, 211, 211}, "lightgrey"},
+               { {255, 182, 193}, "lightpink"},
+               { {255, 174, 185}, "lightpink1"},
+               { {238, 162, 173}, "lightpink2"},
+               { {205, 140, 149}, "lightpink3"},
+               { {139, 95, 101}, "lightpink4"},
+               { {255, 160, 122}, "lightsalmon"},
+               { {255, 160, 122}, "lightsalmon1"},
+               { {238, 149, 114}, "lightsalmon2"},
+               { {205, 129, 98}, "lightsalmon3"},
+               { {139, 87, 66}, "lightsalmon4"},
+               { {135, 206, 250}, "lightskyblue"},
+               { {176, 226, 255}, "lightskyblue1"},
+               { {164, 211, 238}, "lightskyblue2"},
+               { {141, 182, 205}, "lightskyblue3"},
+               { {132, 112, 255}, "lightslateblue"},
+               { {119, 136, 153}, "lightslategray"},
+               { {119, 136, 153}, "lightslategrey"},
+               { {176, 196, 222}, "lightsteelblue"},
+               { {202, 225, 255}, "lightsteelblue1"},
+               { {188, 210, 238}, "lightsteelblue2"},
+               { {162, 181, 205}, "lightsteelblue3"},
+               { {110, 123, 139}, "lightsteelblue4"},
+               { {255, 255, 224}, "lightyellow"},
+               { {255, 255, 224}, "lightyellow1"},
+               { {238, 238, 209}, "lightyellow2"},
+               { {205, 205, 180}, "lightyellow3"},
+               { {139, 139, 122}, "lightyellow4"},
+               { {250, 240, 230}, "linen"},
+               { {255, 0, 255}, "magenta"},
+               { {255, 0, 255}, "magenta1"},
+               { {238, 0, 238}, "magenta2"},
+               { {205, 0, 205}, "magenta3"},
+               { {139, 0, 139}, "magenta4"},
+               { {176, 48, 96}, "maroon"},
+               { {255, 52, 179}, "maroon1"},
+               { {238, 48, 167}, "maroon2"},
+               { {205, 41, 144}, "maroon3"},
+               { {139, 28, 98}, "maroon4"},
+               { {102, 205, 170}, "mediumaquamarine"},
+               { {186, 85, 211}, "mediumorchid"},
+               { {224, 102, 255}, "mediumorchid1"},
+               { {209, 95, 238}, "mediumorchid2"},
+               { {180, 82, 205}, "mediumorchid3"},
+               { {122, 55, 139}, "mediumorchid4"},
+               { {147, 112, 219}, "mediumpurple"},
+               { {171, 130, 255}, "mediumpurple1"},
+               { {159, 121, 238}, "mediumpurple2"},
+               { {137, 104, 205}, "mediumpurple3"},
+               { {123, 104, 238}, "mediumslateblue"},
+               { {199, 21, 133}, "mediumvioletred"},
+               { {245, 255, 250}, "mintcream"},
+               { {255, 228, 225}, "mistyrose"},
+               { {255, 228, 225}, "mistyrose1"},
+               { {238, 213, 210}, "mistyrose2"},
+               { {205, 183, 181}, "mistyrose3"},
+               { {139, 125, 123}, "mistyrose4"},
+               { {255, 228, 181}, "moccasin"},
+               { {255, 222, 173}, "navajowhite"},
+               { {255, 222, 173}, "navajowhite1"},
+               { {238, 207, 161}, "navajowhite2"},
+               { {205, 179, 139}, "navajowhite3"},
+               { {139, 121, 94}, "navajowhite4"},
+               { {253, 245, 230}, "oldlace"},
+               { {128, 128, 0}, "olive"},
+               { {107, 142, 35}, "olivedrab"},
+               { {192, 255, 62}, "olivedrab1"},
+               { {179, 238, 58}, "olivedrab2"},
+               { {154, 205, 50}, "olivedrab3"},
+               { {105, 139, 34}, "olivedrab4"},
+               { {255, 165, 0}, "orange"},
+               { {255, 165, 0}, "orange1"},
+               { {238, 154, 0}, "orange2"},
+               { {205, 133, 0}, "orange3"},
+               { {139, 90, 0}, "orange4"},
+               { {255, 69, 0}, "orangered"},
+               { {255, 69, 0}, "orangered1"},
+               { {238, 64, 0}, "orangered2"},
+               { {205, 55, 0}, "orangered3"},
+               { {139, 37, 0}, "orangered4"},
+               { {218, 112, 214}, "orchid"},
+               { {255, 131, 250}, "orchid1"},
+               { {238, 122, 233}, "orchid2"},
+               { {205, 105, 201}, "orchid3"},
+               { {139, 71, 137}, "orchid4"},
+               { {238, 232, 170}, "palegoldenrod"},
+               { {152, 251, 152}, "palegreen"},
+               { {154, 255, 154}, "palegreen1"},
+               { {144, 238, 144}, "palegreen2"},
+               { {124, 205, 124}, "palegreen3"},
+               { {175, 238, 238}, "paleturquoise"},
+               { {187, 255, 255}, "paleturquoise1"},
+               { {174, 238, 238}, "paleturquoise2"},
+               { {150, 205, 205}, "paleturquoise3"},
+               { {102, 139, 139}, "paleturquoise4"},
+               { {219, 112, 147}, "palevioletred"},
+               { {255, 130, 171}, "palevioletred1"},
+               { {238, 121, 159}, "palevioletred2"},
+               { {205, 104, 137}, "palevioletred3"},
+               { {139, 71, 93}, "palevioletred4"},
+               { {255, 239, 213}, "papayawhip"},
+               { {255, 218, 185}, "peachpuff"},
+               { {255, 218, 185}, "peachpuff1"},
+               { {238, 203, 173}, "peachpuff2"},
+               { {205, 175, 149}, "peachpuff3"},
+               { {139, 119, 101}, "peachpuff4"},
+               { {205, 133, 63}, "peru"},
+               { {255, 192, 203}, "pink"},
+               { {255, 181, 197}, "pink1"},
+               { {238, 169, 184}, "pink2"},
+               { {205, 145, 158}, "pink3"},
+               { {139, 99, 108}, "pink4"},
+               { {221, 160, 221}, "plum"},
+               { {255, 187, 255}, "plum1"},
+               { {238, 174, 238}, "plum2"},
+               { {205, 150, 205}, "plum3"},
+               { {139, 102, 139}, "plum4"},
+               { {176, 224, 230}, "powderblue"},
+               { {160, 32, 240}, "purple"},
+               { {155, 48, 255}, "purple1"},
+               { {145, 44, 238}, "purple2"},
+               { {125, 38, 205}, "purple3"},
+               { {102, 51, 153}, "rebeccapurple"},
+               { {255, 0, 0}, "red"},
+               { {255, 0, 0}, "red1"},
+               { {238, 0, 0}, "red2"},
+               { {205, 0, 0}, "red3"},
+               { {139, 0, 0}, "red4"},
+               { {188, 143, 143}, "rosybrown"},
+               { {255, 193, 193}, "rosybrown1"},
+               { {238, 180, 180}, "rosybrown2"},
+               { {205, 155, 155}, "rosybrown3"},
+               { {139, 105, 105}, "rosybrown4"},
+               { {139, 69, 19}, "saddlebrown"},
+               { {250, 128, 114}, "salmon"},
+               { {255, 140, 105}, "salmon1"},
+               { {238, 130, 98}, "salmon2"},
+               { {205, 112, 84}, "salmon3"},
+               { {139, 76, 57}, "salmon4"},
+               { {244, 164, 96}, "sandybrown"},
+               { {255, 245, 238}, "seashell"},
+               { {255, 245, 238}, "seashell1"},
+               { {238, 229, 222}, "seashell2"},
+               { {205, 197, 191}, "seashell3"},
+               { {139, 134, 130}, "seashell4"},
+               { {160, 82, 45}, "sienna"},
+               { {255, 130, 71}, "sienna1"},
+               { {238, 121, 66}, "sienna2"},
+               { {205, 104, 57}, "sienna3"},
+               { {139, 71, 38}, "sienna4"},
+               { {192, 192, 192}, "silver"},
+               { {135, 206, 235}, "skyblue"},
+               { {135, 206, 255}, "skyblue1"},
+               { {126, 192, 238}, "skyblue2"},
+               { {108, 166, 205}, "skyblue3"},
+               { {106, 90, 205}, "slateblue"},
+               { {131, 111, 255}, "slateblue1"},
+               { {122, 103, 238}, "slateblue2"},
+               { {105, 89, 205}, "slateblue3"},
+               { {112, 128, 144}, "slategray"},
+               { {198, 226, 255}, "slategray1"},
+               { {185, 211, 238}, "slategray2"},
+               { {159, 182, 205}, "slategray3"},
+               { {108, 123, 139}, "slategray4"},
+               { {112, 128, 144}, "slategrey"},
+               { {255, 250, 250}, "snow"},
+               { {255, 250, 250}, "snow1"},
+               { {238, 233, 233}, "snow2"},
+               { {205, 201, 201}, "snow3"},
+               { {139, 137, 137}, "snow4"},
+               { {210, 180, 140}, "tan"},
+               { {255, 165, 79}, "tan1"},
+               { {238, 154, 73}, "tan2"},
+               { {205, 133, 63}, "tan3"},
+               { {139, 90, 43}, "tan4"},
+               { {216, 191, 216}, "thistle"},
+               { {255, 225, 255}, "thistle1"},
+               { {238, 210, 238}, "thistle2"},
+               { {205, 181, 205}, "thistle3"},
+               { {139, 123, 139}, "thistle4"},
+               { {255, 99, 71}, "tomato"},
+               { {255, 99, 71}, "tomato1"},
+               { {238, 92, 66}, "tomato2"},
+               { {205, 79, 57}, "tomato3"},
+               { {139, 54, 38}, "tomato4"},
+               { {238, 130, 238}, "violet"},
+               { {208, 32, 144}, "violetred"},
+               { {255, 62, 150}, "violetred1"},
+               { {238, 58, 140}, "violetred2"},
+               { {205, 50, 120}, "violetred3"},
+               { {139, 34, 82}, "violetred4"},
+               { {128, 128, 128}, "webgray"},
+               { {128, 128, 128}, "webgrey"},
+               { {128, 0, 0}, "webmaroon"},
+               { {128, 0, 128}, "webpurple"},
+               { {245, 222, 179}, "wheat"},
+               { {255, 231, 186}, "wheat1"},
+               { {238, 216, 174}, "wheat2"},
+               { {205, 186, 150}, "wheat3"},
+               { {139, 126, 102}, "wheat4"},
+               { {255, 255, 255}, "white"},
+               { {245, 245, 245}, "whitesmoke"},
+               { {190, 190, 190}, "x11gray"},
+               { {190, 190, 190}, "x11grey"},
+               { {176, 48, 96}, "x11maroon"},
+               { {160, 32, 240}, "x11purple"},
+               { {255, 255, 0}, "yellow"},
+               { {255, 255, 0}, "yellow1"},
+               { {238, 238, 0}, "yellow2"},
+               { {205, 205, 0}, "yellow3"},
+               { {139, 139, 0}, "yellow4"},
+               { {154, 205, 50}, "yellowgreen"},
+};
+
+#endif /* SRC_LIBSERVER_HTML_COLORS_H_ */