Commit 9f38f380 authored by Christian Persch's avatar Christian Persch

Use libcroco to lookup colour by name

... instead of adding the same array to librsvg as well.
parent 3c950c14
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment