[librsvg] Use libcroco to lookup colour by name



commit 9f38f380d98451bc624bd73731d40871db04df4a
Author: Christian Persch <chpe gnome org>
Date:   Sat Oct 22 22:15:08 2011 +0200

    Use libcroco to lookup colour by name
    
    ... instead of adding the same array to librsvg as well.

 rsvg-css.c |  183 +++---------------------------------------------------------
 1 files changed, 9 insertions(+), 174 deletions(-)
---
diff --git a/rsvg-css.c b/rsvg-css.c
index bbba7c0..7895c21 100644
--- a/rsvg-css.c
+++ b/rsvg-css.c
@@ -39,6 +39,8 @@
 #include <errno.h>
 #include <math.h>
 
+#include <libcroco/libcroco.h>
+
 #define POINTS_PER_INCH (72.0)
 #define CM_PER_INCH     (2.54)
 #define MM_PER_INCH     (25.4)
@@ -299,21 +301,6 @@ rsvg_css_clip_rgb (gint rgb)
     return rgb;
 }
 
-typedef struct {
-    const char *const name;
-    guint rgb;
-} ColorPair;
-
-/* compare function callback for bsearch */
-static int
-rsvg_css_color_compare (const void *a, const void *b)
-{
-    const char *needle = (const char *) a;
-    const ColorPair *haystack = (const ColorPair *) b;
-
-    return g_ascii_strcasecmp (needle, haystack->name);
-}
-
 /* pack 3 [0,255] ints into one 32 bit one */
 #define PACK_RGB(r,g,b) (((r) << 16) | ((g) << 8) | (b))
 
@@ -386,167 +373,15 @@ rsvg_css_parse_color (const char *str, gboolean * inherit)
     } else if (!strcmp (str, "inherit"))
         UNSETINHERIT ();
     else {
-        static const ColorPair color_list[] = {
-            {"aliceblue", PACK_RGB (240, 248, 255)},
-            {"antiquewhite", PACK_RGB (250, 235, 215)},
-            {"aqua", PACK_RGB (0, 255, 255)},
-            {"aquamarine", PACK_RGB (127, 255, 212)},
-            {"azure", PACK_RGB (240, 255, 255)},
-            {"beige", PACK_RGB (245, 245, 220)},
-            {"bisque", PACK_RGB (255, 228, 196)},
-            {"black", PACK_RGB (0, 0, 0)},
-            {"blanchedalmond", PACK_RGB (255, 235, 205)},
-            {"blue", PACK_RGB (0, 0, 255)},
-            {"blueviolet", PACK_RGB (138, 43, 226)},
-            {"brown", PACK_RGB (165, 42, 42)},
-            {"burlywood", PACK_RGB (222, 184, 135)},
-            {"cadetblue", PACK_RGB (95, 158, 160)},
-            {"chartreuse", PACK_RGB (127, 255, 0)},
-            {"chocolate", PACK_RGB (210, 105, 30)},
-            {"coral", PACK_RGB (255, 127, 80)},
-            {"cornflowerblue", PACK_RGB (100, 149, 237)},
-            {"cornsilk", PACK_RGB (255, 248, 220)},
-            {"crimson", PACK_RGB (220, 20, 60)},
-            {"cyan", PACK_RGB (0, 255, 255)},
-            {"darkblue", PACK_RGB (0, 0, 139)},
-            {"darkcyan", PACK_RGB (0, 139, 139)},
-            {"darkgoldenrod", PACK_RGB (184, 132, 11)},
-            {"darkgray", PACK_RGB (169, 169, 169)},
-            {"darkgreen", PACK_RGB (0, 100, 0)},
-            {"darkgrey", PACK_RGB (169, 169, 169)},
-            {"darkkhaki", PACK_RGB (189, 183, 107)},
-            {"darkmagenta", PACK_RGB (139, 0, 139)},
-            {"darkolivegreen", PACK_RGB (85, 107, 47)},
-            {"darkorange", PACK_RGB (255, 140, 0)},
-            {"darkorchid", PACK_RGB (153, 50, 204)},
-            {"darkred", PACK_RGB (139, 0, 0)},
-            {"darksalmon", PACK_RGB (233, 150, 122)},
-            {"darkseagreen", PACK_RGB (143, 188, 143)},
-            {"darkslateblue", PACK_RGB (72, 61, 139)},
-            {"darkslategray", PACK_RGB (47, 79, 79)},
-            {"darkslategrey", PACK_RGB (47, 79, 79)},
-            {"darkturquoise", PACK_RGB (0, 206, 209)},
-            {"darkviolet", PACK_RGB (148, 0, 211)},
-            {"deeppink", PACK_RGB (255, 20, 147)},
-            {"deepskyblue", PACK_RGB (0, 191, 255)},
-            {"dimgray", PACK_RGB (105, 105, 105)},
-            {"dimgrey", PACK_RGB (105, 105, 105)},
-            {"dodgerblue", PACK_RGB (30, 144, 255)},
-            {"firebrick", PACK_RGB (178, 34, 34)},
-            {"floralwhite", PACK_RGB (255, 255, 240)},
-            {"forestgreen", PACK_RGB (34, 139, 34)},
-            {"fuchsia", PACK_RGB (255, 0, 255)},
-            {"gainsboro", PACK_RGB (220, 220, 220)},
-            {"ghostwhite", PACK_RGB (248, 248, 255)},
-            {"gold", PACK_RGB (255, 215, 0)},
-            {"goldenrod", PACK_RGB (218, 165, 32)},
-            {"gray", PACK_RGB (128, 128, 128)},
-            {"green", PACK_RGB (0, 128, 0)},
-            {"greenyellow", PACK_RGB (173, 255, 47)},
-            {"grey", PACK_RGB (128, 128, 128)},
-            {"honeydew", PACK_RGB (240, 255, 240)},
-            {"hotpink", PACK_RGB (255, 105, 180)},
-            {"indianred", PACK_RGB (205, 92, 92)},
-            {"indigo", PACK_RGB (75, 0, 130)},
-            {"ivory", PACK_RGB (255, 255, 240)},
-            {"khaki", PACK_RGB (240, 230, 140)},
-            {"lavender", PACK_RGB (230, 230, 250)},
-            {"lavenderblush", PACK_RGB (255, 240, 245)},
-            {"lawngreen", PACK_RGB (124, 252, 0)},
-            {"lemonchiffon", PACK_RGB (255, 250, 205)},
-            {"lightblue", PACK_RGB (173, 216, 230)},
-            {"lightcoral", PACK_RGB (240, 128, 128)},
-            {"lightcyan", PACK_RGB (224, 255, 255)},
-            {"lightgoldenrodyellow", PACK_RGB (250, 250, 210)},
-            {"lightgray", PACK_RGB (211, 211, 211)},
-            {"lightgreen", PACK_RGB (144, 238, 144)},
-            {"lightgrey", PACK_RGB (211, 211, 211)},
-            {"lightpink", PACK_RGB (255, 182, 193)},
-            {"lightsalmon", PACK_RGB (255, 160, 122)},
-            {"lightseagreen", PACK_RGB (32, 178, 170)},
-            {"lightskyblue", PACK_RGB (135, 206, 250)},
-            {"lightslategray", PACK_RGB (119, 136, 153)},
-            {"lightslategrey", PACK_RGB (119, 136, 153)},
-            {"lightsteelblue", PACK_RGB (176, 196, 222)},
-            {"lightyellow", PACK_RGB (255, 255, 224)},
-            {"lime", PACK_RGB (0, 255, 0)},
-            {"limegreen", PACK_RGB (50, 205, 50)},
-            {"linen", PACK_RGB (250, 240, 230)},
-            {"magenta", PACK_RGB (255, 0, 255)},
-            {"maroon", PACK_RGB (128, 0, 0)},
-            {"mediumaquamarine", PACK_RGB (102, 205, 170)},
-            {"mediumblue", PACK_RGB (0, 0, 205)},
-            {"mediumorchid", PACK_RGB (186, 85, 211)},
-            {"mediumpurple", PACK_RGB (147, 112, 219)},
-            {"mediumseagreen", PACK_RGB (60, 179, 113)},
-            {"mediumslateblue", PACK_RGB (123, 104, 238)},
-            {"mediumspringgreen", PACK_RGB (0, 250, 154)},
-            {"mediumturquoise", PACK_RGB (72, 209, 204)},
-            {"mediumvioletred", PACK_RGB (199, 21, 133)},
-            {"midnightblue", PACK_RGB (25, 25, 112)},
-            {"mintcream", PACK_RGB (245, 255, 250)},
-            {"mistyrose", PACK_RGB (255, 228, 225)},
-            {"moccasin", PACK_RGB (255, 228, 181)},
-            {"navajowhite", PACK_RGB (255, 222, 173)},
-            {"navy", PACK_RGB (0, 0, 128)},
-            {"oldlace", PACK_RGB (253, 245, 230)},
-            {"olive", PACK_RGB (128, 128, 0)},
-            {"olivedrab", PACK_RGB (107, 142, 35)},
-            {"orange", PACK_RGB (255, 165, 0)},
-            {"orangered", PACK_RGB (255, 69, 0)},
-            {"orchid", PACK_RGB (218, 112, 214)},
-            {"palegoldenrod", PACK_RGB (238, 232, 170)},
-            {"palegreen", PACK_RGB (152, 251, 152)},
-            {"paleturquoise", PACK_RGB (175, 238, 238)},
-            {"palevioletred", PACK_RGB (219, 112, 147)},
-            {"papayawhip", PACK_RGB (255, 239, 213)},
-            {"peachpuff", PACK_RGB (255, 218, 185)},
-            {"peru", PACK_RGB (205, 133, 63)},
-            {"pink", PACK_RGB (255, 192, 203)},
-            {"plum", PACK_RGB (221, 160, 203)},
-            {"powderblue", PACK_RGB (176, 224, 230)},
-            {"purple", PACK_RGB (128, 0, 128)},
-            {"red", PACK_RGB (255, 0, 0)},
-            {"rosybrown", PACK_RGB (188, 143, 143)},
-            {"royalblue", PACK_RGB (65, 105, 225)},
-            {"saddlebrown", PACK_RGB (139, 69, 19)},
-            {"salmon", PACK_RGB (250, 128, 114)},
-            {"sandybrown", PACK_RGB (244, 164, 96)},
-            {"seagreen", PACK_RGB (46, 139, 87)},
-            {"seashell", PACK_RGB (255, 245, 238)},
-            {"sienna", PACK_RGB (160, 82, 45)},
-            {"silver", PACK_RGB (192, 192, 192)},
-            {"skyblue", PACK_RGB (135, 206, 235)},
-            {"slateblue", PACK_RGB (106, 90, 205)},
-            {"slategray", PACK_RGB (119, 128, 144)},
-            {"slategrey", PACK_RGB (119, 128, 144)},
-            {"snow", PACK_RGB (255, 255, 250)},
-            {"springgreen", PACK_RGB (0, 255, 127)},
-            {"steelblue", PACK_RGB (70, 130, 180)},
-            {"tan", PACK_RGB (210, 180, 140)},
-            {"teal", PACK_RGB (0, 128, 128)},
-            {"thistle", PACK_RGB (216, 191, 216)},
-            {"tomato", PACK_RGB (255, 99, 71)},
-            {"turquoise", PACK_RGB (64, 224, 208)},
-            {"violet", PACK_RGB (238, 130, 238)},
-            {"wheat", PACK_RGB (245, 222, 179)},
-            {"white", PACK_RGB (255, 255, 255)},
-            {"whitesmoke", PACK_RGB (245, 245, 245)},
-            {"yellow", PACK_RGB (255, 255, 0)},
-            {"yellowgreen", PACK_RGB (154, 205, 50)}
-        };
-
-        ColorPair *result = bsearch (str, color_list,
-                                     sizeof (color_list) / sizeof (color_list[0]),
-                                     sizeof (ColorPair),
-                                     rsvg_css_color_compare);
-
-        /* default to black on failed lookup */
-        if (result == NULL) {
+        CRRgb rgb;
+
+        if (cr_rgb_set_from_name (&rgb, (const guchar *) str) == CR_OK) {
+            val = PACK_RGB (rgb.red, rgb.green, rgb.blue);
+        } else {
+            /* default to black on failed lookup */
             UNSETINHERIT ();
             val = 0;
-        } else
-            val = result->rgb;
+        }
     }
 
     return val;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]