evas xpm loader - remove the rgb txt file db loading and compile in
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 14 Jun 2017 07:51:08 +0000 (16:51 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 14 Jun 2017 08:04:43 +0000 (17:04 +0900)
so modern systems seem to have abandoned rgb.txt files. this leads to
us breaking the loading of xpm files tha use color names ... i added
the rgbt.txt from vim but that didn't seem to help... odd... so to just
stop adding path after path to load... ship our own. we could ship the
file... but then we'd still have to load and parse it... every time we
look up a color. so i munged the data with awk and now we compile it
in. it should consume the same space the rgb.txt does in the shared lib
binary. if not read it shouldn't be paged in. it should end up cheaper
than our floaing of the file and mmaping it when xpm module is
loaded/initted... so either way more efficient, uses a little less ram
(12306 bytes vs 17780 for the rgb.txt) ... and bonus - dont have
an extenral out-of-code data blob to find, manage install etc...

this means we should load xpms with colornames correctly again on
systems without an rgb.txt provided by x11 ... which seems to be the
common case now. :(

@fix

src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c

index e219982..66e5e19 100644 (file)
@@ -16,8 +16,1581 @@ static int _evas_loader_xpm_log_dom = -1;
 #endif
 #define ERR(...) EINA_LOG_DOM_ERR(_evas_loader_xpm_log_dom, __VA_ARGS__)
 
-static Eina_File *rgb_txt;
-static void *rgb_txt_map;
+typedef struct
+{
+   unsigned short offset;
+   unsigned char r, g, b;
+} Color_Index;
+
+static const Color_Index color_name_index[] =
+{
+{   0,  240, 248, 255},
+{  11,  240, 248, 255},
+{  21,  255, 239, 219},
+{  35,  238, 223, 204},
+{  49,  250, 235, 215},
+{  63,  250, 235, 215},
+{  76,  205, 192, 176},
+{  90,  139, 131, 120},
+{ 104,    0, 255, 255},
+{ 109,  127, 255, 212},
+{ 121,  127, 255, 212},
+{ 132,  118, 238, 198},
+{ 144,  102, 205, 170},
+{ 156,   69, 139, 116},
+{ 168,  240, 255, 255},
+{ 175,  224, 238, 238},
+{ 182,  240, 255, 255},
+{ 188,  193, 205, 205},
+{ 195,  131, 139, 139},
+{ 202,  245, 245, 220},
+{ 208,  255, 228, 196},
+{ 216,  238, 213, 183},
+{ 224,  255, 228, 196},
+{ 231,  205, 183, 158},
+{ 239,  139, 125, 107},
+{ 247,    0,   0,   0},
+{ 253,  255, 235, 205},
+{ 269,  255, 235, 205},
+{ 284,    0,   0, 255},
+{ 289,    0,   0, 255},
+{ 295,    0,   0, 238},
+{ 301,    0,   0, 205},
+{ 307,    0,   0, 139},
+{ 313,  138,  43, 226},
+{ 325,  138,  43, 226},
+{ 336,  255,  64,  64},
+{ 343,  165,  42,  42},
+{ 349,  238,  59,  59},
+{ 356,  205,  51,  51},
+{ 363,  139,  35,  35},
+{ 370,  255, 211, 155},
+{ 381,  222, 184, 135},
+{ 391,  238, 197, 145},
+{ 402,  205, 170, 125},
+{ 413,  139, 115,  85},
+{ 424,  152, 245, 255},
+{ 435,  142, 229, 238},
+{ 446,  122, 197, 205},
+{ 457,   83, 134, 139},
+{ 468,   95, 158, 160},
+{ 479,   95, 158, 160},
+{ 489,  127, 255,   0},
+{ 501,  127, 255,   0},
+{ 512,  118, 238,   0},
+{ 524,  102, 205,   0},
+{ 536,   69, 139,   0},
+{ 548,  255, 127,  36},
+{ 559,  210, 105,  30},
+{ 569,  238, 118,  33},
+{ 580,  205, 102,  29},
+{ 591,  139,  69,  19},
+{ 602,  255, 114,  86},
+{ 609,  238, 106,  80},
+{ 616,  255, 127,  80},
+{ 622,  205,  91,  69},
+{ 629,  139,  62,  47},
+{ 636,  100, 149, 237},
+{ 652,  100, 149, 237},
+{ 667,  255, 248, 220},
+{ 677,  238, 232, 205},
+{ 687,  255, 248, 220},
+{ 696,  205, 200, 177},
+{ 706,  139, 136, 120},
+{ 716,  220,  20,  60},
+{ 724,    0, 255, 255},
+{ 729,    0, 255, 255},
+{ 735,    0, 238, 238},
+{ 741,    0, 205, 205},
+{ 747,    0, 139, 139},
+{ 753,    0,   0, 139},
+{ 763,    0,   0, 139},
+{ 772,    0, 139, 139},
+{ 782,    0, 139, 139},
+{ 791,  255, 185,  15},
+{ 806,  184, 134,  11},
+{ 821,  184, 134,  11},
+{ 835,  238, 173,  14},
+{ 850,  205, 149,  12},
+{ 865,  139, 101,   8},
+{ 880,  169, 169, 169},
+{ 890,  169, 169, 169},
+{ 899,    0, 100,   0},
+{ 910,    0, 100,   0},
+{ 920,  169, 169, 169},
+{ 930,  169, 169, 169},
+{ 939,  189, 183, 107},
+{ 950,  189, 183, 107},
+{ 960,  139,   0, 139},
+{ 973,  139,   0, 139},
+{ 985,  202, 255, 112},
+{1001,  188, 238, 104},
+{1017,  162, 205,  90},
+{1033,  110, 139,  61},
+{1049,   85, 107,  47},
+{1066,   85, 107,  47},
+{1081,  255, 127,   0},
+{1093,  238, 118,   0},
+{1105,  255, 140,   0},
+{1117,  255, 140,   0},
+{1128,  205, 102,   0},
+{1140,  139,  69,   0},
+{1152,  191,  62, 255},
+{1164,  153,  50, 204},
+{1176,  153,  50, 204},
+{1187,  178,  58, 238},
+{1199,  154,  50, 205},
+{1211,  104,  34, 139},
+{1223,  139,   0,   0},
+{1232,  139,   0,   0},
+{1240,  233, 150, 122},
+{1252,  233, 150, 122},
+{1263,  193, 255, 193},
+{1277,  143, 188, 143},
+{1292,  143, 188, 143},
+{1305,  180, 238, 180},
+{1319,  155, 205, 155},
+{1333,  105, 139, 105},
+{1347,   72,  61, 139},
+{1363,   72,  61, 139},
+{1377,  151, 255, 255},
+{1392,  141, 238, 238},
+{1407,  121, 205, 205},
+{1422,   47,  79,  79},
+{1438,   47,  79,  79},
+{1452,   82, 139, 139},
+{1467,   47,  79,  79},
+{1483,   47,  79,  79},
+{1497,    0, 206, 209},
+{1512,    0, 206, 209},
+{1526,  148,   0, 211},
+{1538,  148,   0, 211},
+{1549,  255,  20, 147},
+{1559,  238,  18, 137},
+{1569,  255,  20, 147},
+{1579,  255,  20, 147},
+{1588,  205,  16, 118},
+{1598,  139,  10,  80},
+{1608,    0, 191, 255},
+{1622,    0, 191, 255},
+{1634,    0, 191, 255},
+{1647,    0, 178, 238},
+{1660,    0, 154, 205},
+{1673,    0, 104, 139},
+{1686,  105, 105, 105},
+{1695,  105, 105, 105},
+{1703,  105, 105, 105},
+{1712,  105, 105, 105},
+{1720,   30, 144, 255},
+{1732,   28, 134, 238},
+{1744,   30, 144, 255},
+{1756,   30, 144, 255},
+{1767,   24, 116, 205},
+{1779,   16,  78, 139},
+{1791,  255,  48,  48},
+{1802,  178,  34,  34},
+{1812,  238,  44,  44},
+{1823,  205,  38,  38},
+{1834,  139,  26,  26},
+{1845,  255, 250, 240},
+{1858,  255, 250, 240},
+{1870,   34, 139,  34},
+{1883,   34, 139,  34},
+{1895,  255,   0, 255},
+{1903,  220, 220, 220},
+{1913,  248, 248, 255},
+{1925,  248, 248, 255},
+{1936,  255, 215,   0},
+{1942,  238, 201,   0},
+{1948,  255, 215,   0},
+{1953,  205, 173,   0},
+{1959,  139, 117,   0},
+{1965,  255, 193,  37},
+{1976,  218, 165,  32},
+{1986,  238, 180,  34},
+{1997,  205, 155,  29},
+{2008,  139, 105,  20},
+{2019,    0,   0,   0},
+{2025,  255, 255, 255},
+{2033,   26,  26,  26},
+{2040,   28,  28,  28},
+{2047,   31,  31,  31},
+{2054,    3,   3,   3},
+{2060,   33,  33,  33},
+{2067,   36,  36,  36},
+{2074,   38,  38,  38},
+{2081,   41,  41,  41},
+{2088,   43,  43,  43},
+{2095,   46,  46,  46},
+{2102,  190, 190, 190},
+{2107,   48,  48,  48},
+{2114,   51,  51,  51},
+{2121,   54,  54,  54},
+{2128,   56,  56,  56},
+{2135,   59,  59,  59},
+{2142,   61,  61,  61},
+{2149,    5,   5,   5},
+{2155,   64,  64,  64},
+{2162,   66,  66,  66},
+{2169,   69,  69,  69},
+{2176,   71,  71,  71},
+{2183,   74,  74,  74},
+{2190,   77,  77,  77},
+{2197,   79,  79,  79},
+{2204,   82,  82,  82},
+{2211,   84,  84,  84},
+{2218,   87,  87,  87},
+{2225,   89,  89,  89},
+{2232,   92,  92,  92},
+{2239,   94,  94,  94},
+{2246,    8,   8,   8},
+{2252,   97,  97,  97},
+{2259,   99,  99,  99},
+{2266,  102, 102, 102},
+{2273,   10,  10,  10},
+{2279,  105, 105, 105},
+{2286,  107, 107, 107},
+{2293,  110, 110, 110},
+{2300,  112, 112, 112},
+{2307,  115, 115, 115},
+{2314,  117, 117, 117},
+{2321,  120, 120, 120},
+{2328,  122, 122, 122},
+{2335,  125, 125, 125},
+{2342,  127, 127, 127},
+{2349,  130, 130, 130},
+{2356,   13,  13,  13},
+{2362,  133, 133, 133},
+{2369,  135, 135, 135},
+{2376,  138, 138, 138},
+{2383,  140, 140, 140},
+{2390,  143, 143, 143},
+{2397,  145, 145, 145},
+{2404,  148, 148, 148},
+{2411,  150, 150, 150},
+{2418,  153, 153, 153},
+{2425,  156, 156, 156},
+{2432,   15,  15,  15},
+{2438,  158, 158, 158},
+{2445,  161, 161, 161},
+{2452,  163, 163, 163},
+{2459,  166, 166, 166},
+{2466,  168, 168, 168},
+{2473,  171, 171, 171},
+{2480,  173, 173, 173},
+{2487,  176, 176, 176},
+{2494,  179, 179, 179},
+{2501,  181, 181, 181},
+{2508,   18,  18,  18},
+{2514,  184, 184, 184},
+{2521,  186, 186, 186},
+{2528,  189, 189, 189},
+{2535,  191, 191, 191},
+{2542,  194, 194, 194},
+{2549,  196, 196, 196},
+{2556,  199, 199, 199},
+{2563,  201, 201, 201},
+{2570,  204, 204, 204},
+{2577,  207, 207, 207},
+{2584,   20,  20,  20},
+{2590,  209, 209, 209},
+{2597,  212, 212, 212},
+{2604,  214, 214, 214},
+{2611,  217, 217, 217},
+{2618,  219, 219, 219},
+{2625,  222, 222, 222},
+{2632,  224, 224, 224},
+{2639,  227, 227, 227},
+{2646,  229, 229, 229},
+{2653,  232, 232, 232},
+{2660,  235, 235, 235},
+{2667,   23,  23,  23},
+{2673,  237, 237, 237},
+{2680,  240, 240, 240},
+{2687,  242, 242, 242},
+{2694,  245, 245, 245},
+{2701,  247, 247, 247},
+{2708,  250, 250, 250},
+{2715,  252, 252, 252},
+{2722,    0, 255,   0},
+{2728,    0, 255,   0},
+{2735,    0, 238,   0},
+{2742,    0, 205,   0},
+{2749,    0, 139,   0},
+{2756,  173, 255,  47},
+{2769,  173, 255,  47},
+{2781,    0,   0,   0},
+{2787,  255, 255, 255},
+{2795,   26,  26,  26},
+{2802,   28,  28,  28},
+{2809,   31,  31,  31},
+{2816,    3,   3,   3},
+{2822,   33,  33,  33},
+{2829,   36,  36,  36},
+{2836,   38,  38,  38},
+{2843,   41,  41,  41},
+{2850,   43,  43,  43},
+{2857,   46,  46,  46},
+{2864,  190, 190, 190},
+{2869,   48,  48,  48},
+{2876,   51,  51,  51},
+{2883,   54,  54,  54},
+{2890,   56,  56,  56},
+{2897,   59,  59,  59},
+{2904,   61,  61,  61},
+{2911,    5,   5,   5},
+{2917,   64,  64,  64},
+{2924,   66,  66,  66},
+{2931,   69,  69,  69},
+{2938,   71,  71,  71},
+{2945,   74,  74,  74},
+{2952,   77,  77,  77},
+{2959,   79,  79,  79},
+{2966,   82,  82,  82},
+{2973,   84,  84,  84},
+{2980,   87,  87,  87},
+{2987,   89,  89,  89},
+{2994,   92,  92,  92},
+{3001,   94,  94,  94},
+{3008,    8,   8,   8},
+{3014,   97,  97,  97},
+{3021,   99,  99,  99},
+{3028,  102, 102, 102},
+{3035,   10,  10,  10},
+{3041,  105, 105, 105},
+{3048,  107, 107, 107},
+{3055,  110, 110, 110},
+{3062,  112, 112, 112},
+{3069,  115, 115, 115},
+{3076,  117, 117, 117},
+{3083,  120, 120, 120},
+{3090,  122, 122, 122},
+{3097,  125, 125, 125},
+{3104,  127, 127, 127},
+{3111,  130, 130, 130},
+{3118,   13,  13,  13},
+{3124,  133, 133, 133},
+{3131,  135, 135, 135},
+{3138,  138, 138, 138},
+{3145,  140, 140, 140},
+{3152,  143, 143, 143},
+{3159,  145, 145, 145},
+{3166,  148, 148, 148},
+{3173,  150, 150, 150},
+{3180,  153, 153, 153},
+{3187,  156, 156, 156},
+{3194,   15,  15,  15},
+{3200,  158, 158, 158},
+{3207,  161, 161, 161},
+{3214,  163, 163, 163},
+{3221,  166, 166, 166},
+{3228,  168, 168, 168},
+{3235,  171, 171, 171},
+{3242,  173, 173, 173},
+{3249,  176, 176, 176},
+{3256,  179, 179, 179},
+{3263,  181, 181, 181},
+{3270,   18,  18,  18},
+{3276,  184, 184, 184},
+{3283,  186, 186, 186},
+{3290,  189, 189, 189},
+{3297,  191, 191, 191},
+{3304,  194, 194, 194},
+{3311,  196, 196, 196},
+{3318,  199, 199, 199},
+{3325,  201, 201, 201},
+{3332,  204, 204, 204},
+{3339,  207, 207, 207},
+{3346,   20,  20,  20},
+{3352,  209, 209, 209},
+{3359,  212, 212, 212},
+{3366,  214, 214, 214},
+{3373,  217, 217, 217},
+{3380,  219, 219, 219},
+{3387,  222, 222, 222},
+{3394,  224, 224, 224},
+{3401,  227, 227, 227},
+{3408,  229, 229, 229},
+{3415,  232, 232, 232},
+{3422,  235, 235, 235},
+{3429,   23,  23,  23},
+{3435,  237, 237, 237},
+{3442,  240, 240, 240},
+{3449,  242, 242, 242},
+{3456,  245, 245, 245},
+{3463,  247, 247, 247},
+{3470,  250, 250, 250},
+{3477,  252, 252, 252},
+{3484,  240, 255, 240},
+{3494,  224, 238, 224},
+{3504,  240, 255, 240},
+{3513,  193, 205, 193},
+{3523,  131, 139, 131},
+{3533,  255, 110, 180},
+{3542,  238, 106, 167},
+{3551,  255, 105, 180},
+{3560,  255, 105, 180},
+{3568,  205,  96, 144},
+{3577,  139,  58,  98},
+{3586,  255, 106, 106},
+{3597,  205,  92,  92},
+{3608,  205,  92,  92},
+{3618,  238,  99,  99},
+{3629,  205,  85,  85},
+{3640,  139,  58,  58},
+{3651,   75,   0, 130},
+{3658,  255, 255, 240},
+{3665,  238, 238, 224},
+{3672,  255, 255, 240},
+{3678,  205, 205, 193},
+{3685,  139, 139, 131},
+{3692,  255, 246, 143},
+{3699,  238, 230, 133},
+{3706,  240, 230, 140},
+{3712,  205, 198, 115},
+{3719,  139, 134,  78},
+{3726,  230, 230, 250},
+{3735,  255, 240, 245},
+{3750,  238, 224, 229},
+{3765,  255, 240, 245},
+{3780,  255, 240, 245},
+{3794,  205, 193, 197},
+{3809,  139, 131, 134},
+{3824,  124, 252,   0},
+{3835,  124, 252,   0},
+{3845,  255, 250, 205},
+{3859,  238, 233, 191},
+{3873,  255, 250, 205},
+{3887,  255, 250, 205},
+{3900,  205, 201, 165},
+{3914,  139, 137, 112},
+{3928,  191, 239, 255},
+{3939,  173, 216, 230},
+{3950,  173, 216, 230},
+{3960,  178, 223, 238},
+{3971,  154, 192, 205},
+{3982,  104, 131, 139},
+{3993,  240, 128, 128},
+{4005,  240, 128, 128},
+{4016,  224, 255, 255},
+{4027,  209, 238, 238},
+{4038,  224, 255, 255},
+{4049,  224, 255, 255},
+{4059,  180, 205, 205},
+{4070,  122, 139, 139},
+{4081,  255, 236, 139},
+{4097,  238, 220, 130},
+{4113,  238, 221, 130},
+{4129,  238, 221, 130},
+{4144,  205, 190, 112},
+{4160,  139, 129,  76},
+{4176,  250, 250, 210},
+{4199,  250, 250, 210},
+{4220,  211, 211, 211},
+{4231,  211, 211, 211},
+{4241,  144, 238, 144},
+{4253,  144, 238, 144},
+{4264,  211, 211, 211},
+{4275,  211, 211, 211},
+{4285,  255, 174, 185},
+{4296,  238, 162, 173},
+{4307,  255, 182, 193},
+{4318,  255, 182, 193},
+{4328,  205, 140, 149},
+{4339,  139,  95, 101},
+{4350,  255, 160, 122},
+{4363,  238, 149, 114},
+{4376,  255, 160, 122},
+{4389,  255, 160, 122},
+{4401,  205, 129,  98},
+{4414,  139,  87,  66},
+{4427,   32, 178, 170},
+{4443,   32, 178, 170},
+{4457,  176, 226, 255},
+{4471,  135, 206, 250},
+{4486,  135, 206, 250},
+{4499,  164, 211, 238},
+{4513,  141, 182, 205},
+{4527,   96, 123, 139},
+{4541,  132, 112, 255},
+{4558,  132, 112, 255},
+{4573,  119, 136, 153},
+{4590,  119, 136, 153},
+{4605,  119, 136, 153},
+{4622,  119, 136, 153},
+{4637,  202, 225, 255},
+{4653,  176, 196, 222},
+{4670,  176, 196, 222},
+{4685,  188, 210, 238},
+{4701,  162, 181, 205},
+{4717,  110, 123, 139},
+{4733,  255, 255, 224},
+{4746,  238, 238, 209},
+{4759,  255, 255, 224},
+{4772,  255, 255, 224},
+{4784,  205, 205, 180},
+{4797,  139, 139, 122},
+{4810,    0, 255,   0},
+{4815,   50, 205,  50},
+{4826,   50, 205,  50},
+{4836,  250, 240, 230},
+{4842,  255,   0, 255},
+{4851,  238,   0, 238},
+{4860,  255,   0, 255},
+{4868,  205,   0, 205},
+{4877,  139,   0, 139},
+{4886,  255,  52, 179},
+{4894,  176,  48,  96},
+{4901,  238,  48, 167},
+{4909,  205,  41, 144},
+{4917,  139,  28,  98},
+{4925,  102, 205, 170},
+{4943,  102, 205, 170},
+{4960,    0,   0, 205},
+{4972,    0,   0, 205},
+{4983,  224, 102, 255},
+{4997,  186,  85, 211},
+{5011,  186,  85, 211},
+{5024,  209,  95, 238},
+{5038,  180,  82, 205},
+{5052,  122,  55, 139},
+{5066,  171, 130, 255},
+{5080,  147, 112, 219},
+{5094,  147, 112, 219},
+{5107,  159, 121, 238},
+{5121,  137, 104, 205},
+{5135,   93,  71, 139},
+{5149,   60, 179, 113},
+{5166,   60, 179, 113},
+{5181,  123, 104, 238},
+{5199,  123, 104, 238},
+{5215,    0, 250, 154},
+{5235,    0, 250, 154},
+{5253,   72, 209, 204},
+{5270,   72, 209, 204},
+{5286,  199,  21, 133},
+{5304,  199,  21, 133},
+{5320,   25,  25, 112},
+{5334,   25,  25, 112},
+{5347,  245, 255, 250},
+{5358,  245, 255, 250},
+{5368,  255, 228, 225},
+{5379,  238, 213, 210},
+{5390,  255, 228, 225},
+{5401,  255, 228, 225},
+{5411,  205, 183, 181},
+{5422,  139, 125, 123},
+{5433,  255, 228, 181},
+{5442,  255, 222, 173},
+{5455,  238, 207, 161},
+{5468,  255, 222, 173},
+{5481,  255, 222, 173},
+{5493,  205, 179, 139},
+{5506,  139, 121,  94},
+{5519,    0,   0, 128},
+{5524,    0,   0, 128},
+{5534,    0,   0, 128},
+{5543,  253, 245, 230},
+{5552,  253, 245, 230},
+{5560,  128, 128,   0},
+{5566,  107, 142,  35},
+{5577,  107, 142,  35},
+{5587,  192, 255,  62},
+{5598,  179, 238,  58},
+{5609,  154, 205,  50},
+{5620,  105, 139,  34},
+{5631,  255, 165,   0},
+{5639,  238, 154,   0},
+{5647,  255, 165,   0},
+{5654,  205, 133,   0},
+{5662,  139,  90,   0},
+{5670,  255,  69,   0},
+{5681,  238,  64,   0},
+{5692,  255,  69,   0},
+{5703,  255,  69,   0},
+{5713,  205,  55,   0},
+{5724,  139,  37,   0},
+{5735,  255, 131, 250},
+{5743,  218, 112, 214},
+{5750,  238, 122, 233},
+{5758,  205, 105, 201},
+{5766,  139,  71, 137},
+{5774,  238, 232, 170},
+{5789,  238, 232, 170},
+{5803,  154, 255, 154},
+{5814,  152, 251, 152},
+{5825,  152, 251, 152},
+{5835,  144, 238, 144},
+{5846,  124, 205, 124},
+{5857,   84, 139,  84},
+{5868,  187, 255, 255},
+{5883,  175, 238, 238},
+{5898,  175, 238, 238},
+{5912,  174, 238, 238},
+{5927,  150, 205, 205},
+{5942,  102, 139, 139},
+{5957,  255, 130, 171},
+{5972,  219, 112, 147},
+{5988,  219, 112, 147},
+{6002,  238, 121, 159},
+{6017,  205, 104, 137},
+{6032,  139,  71,  93},
+{6047,  255, 239, 213},
+{6059,  255, 239, 213},
+{6070,  255, 218, 185},
+{6081,  238, 203, 173},
+{6092,  255, 218, 185},
+{6103,  255, 218, 185},
+{6113,  205, 175, 149},
+{6124,  139, 119, 101},
+{6135,  205, 133,  63},
+{6140,  255, 181, 197},
+{6146,  238, 169, 184},
+{6152,  255, 192, 203},
+{6157,  205, 145, 158},
+{6163,  139,  99, 108},
+{6169,  255, 187, 255},
+{6175,  221, 160, 221},
+{6180,  238, 174, 238},
+{6186,  205, 150, 205},
+{6192,  139, 102, 139},
+{6198,  176, 224, 230},
+{6210,  176, 224, 230},
+{6221,  155,  48, 255},
+{6229,  160,  32, 240},
+{6236,  145,  44, 238},
+{6244,  125,  38, 205},
+{6252,   85,  26, 139},
+{6260,  102,  51, 153},
+{6275,  102,  51, 153},
+{6289,  255,   0,   0},
+{6294,  238,   0,   0},
+{6299,  255,   0,   0},
+{6303,  205,   0,   0},
+{6308,  139,   0,   0},
+{6313,  255, 193, 193},
+{6324,  188, 143, 143},
+{6335,  188, 143, 143},
+{6345,  238, 180, 180},
+{6356,  205, 155, 155},
+{6367,  139, 105, 105},
+{6378,   72, 118, 255},
+{6389,   67, 110, 238},
+{6400,   58,  95, 205},
+{6411,   39,  64, 139},
+{6422,   65, 105, 225},
+{6433,   65, 105, 225},
+{6443,  139,  69,  19},
+{6456,  139,  69,  19},
+{6468,  255, 140, 105},
+{6476,  238, 130,  98},
+{6484,  250, 128, 114},
+{6491,  205, 112,  84},
+{6499,  139,  76,  57},
+{6507,  244, 164,  96},
+{6519,  244, 164,  96},
+{6530,   84, 255, 159},
+{6540,   78, 238, 148},
+{6550,   67, 205, 128},
+{6560,   46, 139,  87},
+{6570,   46, 139,  87},
+{6580,   46, 139,  87},
+{6589,  255, 245, 238},
+{6599,  238, 229, 222},
+{6609,  255, 245, 238},
+{6618,  205, 197, 191},
+{6628,  139, 134, 130},
+{6638,  255, 130,  71},
+{6646,  160,  82,  45},
+{6653,  238, 121,  66},
+{6661,  205, 104,  57},
+{6669,  139,  71,  38},
+{6677,  192, 192, 192},
+{6684,  135, 206, 255},
+{6693,  135, 206, 235},
+{6702,  135, 206, 235},
+{6710,  126, 192, 238},
+{6719,  108, 166, 205},
+{6728,   74, 112, 139},
+{6737,  106,  90, 205},
+{6748,  106,  90, 205},
+{6758,  131, 111, 255},
+{6769,  122, 103, 238},
+{6780,  105,  89, 205},
+{6791,   71,  60, 139},
+{6802,  112, 128, 144},
+{6813,  112, 128, 144},
+{6823,  198, 226, 255},
+{6834,  185, 211, 238},
+{6845,  159, 182, 205},
+{6856,  108, 123, 139},
+{6867,  112, 128, 144},
+{6878,  112, 128, 144},
+{6888,  255, 250, 250},
+{6894,  238, 233, 233},
+{6900,  255, 250, 250},
+{6905,  205, 201, 201},
+{6911,  139, 137, 137},
+{6917,    0, 255, 127},
+{6930,    0, 255, 127},
+{6942,    0, 255, 127},
+{6955,    0, 238, 118},
+{6968,    0, 205, 102},
+{6981,    0, 139,  69},
+{6994,   99, 184, 255},
+{7005,   92, 172, 238},
+{7016,   79, 148, 205},
+{7027,   54, 100, 139},
+{7038,   70, 130, 180},
+{7049,   70, 130, 180},
+{7059,  255, 165,  79},
+{7064,  210, 180, 140},
+{7068,  238, 154,  73},
+{7073,  205, 133,  63},
+{7078,  139,  90,  43},
+{7083,    0, 128, 128},
+{7088,  255, 225, 255},
+{7097,  216, 191, 216},
+{7105,  238, 210, 238},
+{7114,  205, 181, 205},
+{7123,  139, 123, 139},
+{7132,  255,  99,  71},
+{7140,  238,  92,  66},
+{7148,  255,  99,  71},
+{7155,  205,  79,  57},
+{7163,  139,  54,  38},
+{7171,    0, 245, 255},
+{7182,    0, 229, 238},
+{7193,    0, 197, 205},
+{7204,    0, 134, 139},
+{7215,   64, 224, 208},
+{7225,  238, 130, 238},
+{7232,  255,  62, 150},
+{7243,  208,  32, 144},
+{7254,  208,  32, 144},
+{7264,  238,  58, 140},
+{7275,  205,  50, 120},
+{7286,  139,  34,  82},
+{7297,  128, 128, 128},
+{7306,  128, 128, 128},
+{7314,    0, 128,   0},
+{7324,    0, 128,   0},
+{7333,  128, 128, 128},
+{7342,  128, 128, 128},
+{7350,  128,   0,   0},
+{7361,  128,   0,   0},
+{7371,  128,   0, 128},
+{7382,  128,   0, 128},
+{7392,  255, 231, 186},
+{7399,  238, 216, 174},
+{7406,  245, 222, 179},
+{7412,  205, 186, 150},
+{7419,  139, 126, 102},
+{7426,  255, 255, 255},
+{7432,  245, 245, 245},
+{7444,  245, 245, 245},
+{7455,  190, 190, 190},
+{7464,  190, 190, 190},
+{7472,    0, 255,   0},
+{7482,    0, 255,   0},
+{7491,  190, 190, 190},
+{7500,  190, 190, 190},
+{7508,  176,  48,  96},
+{7519,  176,  48,  96},
+{7529,  160,  32, 240},
+{7540,  160,  32, 240},
+{7550,  255, 255,   0},
+{7558,  238, 238,   0},
+{7566,  255, 255,   0},
+{7573,  205, 205,   0},
+{7581,  139, 139,   0},
+{7589,  154, 205,  50},
+{7602,  154, 205,  50}
+};
+static const char color_name_string[] =
+"alice blue\0"
+"aliceblue\0"
+"antiquewhite1\0"
+"antiquewhite2\0"
+"antique white\0"
+"antiquewhite\0"
+"antiquewhite3\0"
+"antiquewhite4\0"
+"aqua\0"
+"aquamarine1\0"
+"aquamarine\0"
+"aquamarine2\0"
+"aquamarine3\0"
+"aquamarine4\0"
+"azure1\0"
+"azure2\0"
+"azure\0"
+"azure3\0"
+"azure4\0"
+"beige\0"
+"bisque1\0"
+"bisque2\0"
+"bisque\0"
+"bisque3\0"
+"bisque4\0"
+"black\0"
+"blanched almond\0"
+"blanchedalmond\0"
+"blue\0"
+"blue1\0"
+"blue2\0"
+"blue3\0"
+"blue4\0"
+"blue violet\0"
+"blueviolet\0"
+"brown1\0"
+"brown\0"
+"brown2\0"
+"brown3\0"
+"brown4\0"
+"burlywood1\0"
+"burlywood\0"
+"burlywood2\0"
+"burlywood3\0"
+"burlywood4\0"
+"cadetblue1\0"
+"cadetblue2\0"
+"cadetblue3\0"
+"cadetblue4\0"
+"cadet blue\0"
+"cadetblue\0"
+"chartreuse1\0"
+"chartreuse\0"
+"chartreuse2\0"
+"chartreuse3\0"
+"chartreuse4\0"
+"chocolate1\0"
+"chocolate\0"
+"chocolate2\0"
+"chocolate3\0"
+"chocolate4\0"
+"coral1\0"
+"coral2\0"
+"coral\0"
+"coral3\0"
+"coral4\0"
+"cornflower blue\0"
+"cornflowerblue\0"
+"cornsilk1\0"
+"cornsilk2\0"
+"cornsilk\0"
+"cornsilk3\0"
+"cornsilk4\0"
+"crimson\0"
+"cyan\0"
+"cyan1\0"
+"cyan2\0"
+"cyan3\0"
+"cyan4\0"
+"dark blue\0"
+"darkblue\0"
+"dark cyan\0"
+"darkcyan\0"
+"darkgoldenrod1\0"
+"dark goldenrod\0"
+"darkgoldenrod\0"
+"darkgoldenrod2\0"
+"darkgoldenrod3\0"
+"darkgoldenrod4\0"
+"dark gray\0"
+"darkgray\0"
+"dark green\0"
+"darkgreen\0"
+"dark grey\0"
+"darkgrey\0"
+"dark khaki\0"
+"darkkhaki\0"
+"dark magenta\0"
+"darkmagenta\0"
+"darkolivegreen1\0"
+"darkolivegreen2\0"
+"darkolivegreen3\0"
+"darkolivegreen4\0"
+"dark olive green\0"
+"darkolivegreen\0"
+"darkorange1\0"
+"darkorange2\0"
+"dark orange\0"
+"darkorange\0"
+"darkorange3\0"
+"darkorange4\0"
+"darkorchid1\0"
+"dark orchid\0"
+"darkorchid\0"
+"darkorchid2\0"
+"darkorchid3\0"
+"darkorchid4\0"
+"dark red\0"
+"darkred\0"
+"dark salmon\0"
+"darksalmon\0"
+"darkseagreen1\0"
+"dark sea green\0"
+"darkseagreen\0"
+"darkseagreen2\0"
+"darkseagreen3\0"
+"darkseagreen4\0"
+"dark slate blue\0"
+"darkslateblue\0"
+"darkslategray1\0"
+"darkslategray2\0"
+"darkslategray3\0"
+"dark slate gray\0"
+"darkslategray\0"
+"darkslategray4\0"
+"dark slate grey\0"
+"darkslategrey\0"
+"dark turquoise\0"
+"darkturquoise\0"
+"dark violet\0"
+"darkviolet\0"
+"deeppink1\0"
+"deeppink2\0"
+"deep pink\0"
+"deeppink\0"
+"deeppink3\0"
+"deeppink4\0"
+"deep sky blue\0"
+"deepskyblue\0"
+"deepskyblue1\0"
+"deepskyblue2\0"
+"deepskyblue3\0"
+"deepskyblue4\0"
+"dim gray\0"
+"dimgray\0"
+"dim grey\0"
+"dimgrey\0"
+"dodgerblue1\0"
+"dodgerblue2\0"
+"dodger blue\0"
+"dodgerblue\0"
+"dodgerblue3\0"
+"dodgerblue4\0"
+"firebrick1\0"
+"firebrick\0"
+"firebrick2\0"
+"firebrick3\0"
+"firebrick4\0"
+"floral white\0"
+"floralwhite\0"
+"forest green\0"
+"forestgreen\0"
+"fuchsia\0"
+"gainsboro\0"
+"ghost white\0"
+"ghostwhite\0"
+"gold1\0"
+"gold2\0"
+"gold\0"
+"gold3\0"
+"gold4\0"
+"goldenrod1\0"
+"goldenrod\0"
+"goldenrod2\0"
+"goldenrod3\0"
+"goldenrod4\0"
+"gray0\0"
+"gray100\0"
+"gray10\0"
+"gray11\0"
+"gray12\0"
+"gray1\0"
+"gray13\0"
+"gray14\0"
+"gray15\0"
+"gray16\0"
+"gray17\0"
+"gray18\0"
+"gray\0"
+"gray19\0"
+"gray20\0"
+"gray21\0"
+"gray22\0"
+"gray23\0"
+"gray24\0"
+"gray2\0"
+"gray25\0"
+"gray26\0"
+"gray27\0"
+"gray28\0"
+"gray29\0"
+"gray30\0"
+"gray31\0"
+"gray32\0"
+"gray33\0"
+"gray34\0"
+"gray35\0"
+"gray36\0"
+"gray37\0"
+"gray3\0"
+"gray38\0"
+"gray39\0"
+"gray40\0"
+"gray4\0"
+"gray41\0"
+"gray42\0"
+"gray43\0"
+"gray44\0"
+"gray45\0"
+"gray46\0"
+"gray47\0"
+"gray48\0"
+"gray49\0"
+"gray50\0"
+"gray51\0"
+"gray5\0"
+"gray52\0"
+"gray53\0"
+"gray54\0"
+"gray55\0"
+"gray56\0"
+"gray57\0"
+"gray58\0"
+"gray59\0"
+"gray60\0"
+"gray61\0"
+"gray6\0"
+"gray62\0"
+"gray63\0"
+"gray64\0"
+"gray65\0"
+"gray66\0"
+"gray67\0"
+"gray68\0"
+"gray69\0"
+"gray70\0"
+"gray71\0"
+"gray7\0"
+"gray72\0"
+"gray73\0"
+"gray74\0"
+"gray75\0"
+"gray76\0"
+"gray77\0"
+"gray78\0"
+"gray79\0"
+"gray80\0"
+"gray81\0"
+"gray8\0"
+"gray82\0"
+"gray83\0"
+"gray84\0"
+"gray85\0"
+"gray86\0"
+"gray87\0"
+"gray88\0"
+"gray89\0"
+"gray90\0"
+"gray91\0"
+"gray92\0"
+"gray9\0"
+"gray93\0"
+"gray94\0"
+"gray95\0"
+"gray96\0"
+"gray97\0"
+"gray98\0"
+"gray99\0"
+"green\0"
+"green1\0"
+"green2\0"
+"green3\0"
+"green4\0"
+"green yellow\0"
+"greenyellow\0"
+"grey0\0"
+"grey100\0"
+"grey10\0"
+"grey11\0"
+"grey12\0"
+"grey1\0"
+"grey13\0"
+"grey14\0"
+"grey15\0"
+"grey16\0"
+"grey17\0"
+"grey18\0"
+"grey\0"
+"grey19\0"
+"grey20\0"
+"grey21\0"
+"grey22\0"
+"grey23\0"
+"grey24\0"
+"grey2\0"
+"grey25\0"
+"grey26\0"
+"grey27\0"
+"grey28\0"
+"grey29\0"
+"grey30\0"
+"grey31\0"
+"grey32\0"
+"grey33\0"
+"grey34\0"
+"grey35\0"
+"grey36\0"
+"grey37\0"
+"grey3\0"
+"grey38\0"
+"grey39\0"
+"grey40\0"
+"grey4\0"
+"grey41\0"
+"grey42\0"
+"grey43\0"
+"grey44\0"
+"grey45\0"
+"grey46\0"
+"grey47\0"
+"grey48\0"
+"grey49\0"
+"grey50\0"
+"grey51\0"
+"grey5\0"
+"grey52\0"
+"grey53\0"
+"grey54\0"
+"grey55\0"
+"grey56\0"
+"grey57\0"
+"grey58\0"
+"grey59\0"
+"grey60\0"
+"grey61\0"
+"grey6\0"
+"grey62\0"
+"grey63\0"
+"grey64\0"
+"grey65\0"
+"grey66\0"
+"grey67\0"
+"grey68\0"
+"grey69\0"
+"grey70\0"
+"grey71\0"
+"grey7\0"
+"grey72\0"
+"grey73\0"
+"grey74\0"
+"grey75\0"
+"grey76\0"
+"grey77\0"
+"grey78\0"
+"grey79\0"
+"grey80\0"
+"grey81\0"
+"grey8\0"
+"grey82\0"
+"grey83\0"
+"grey84\0"
+"grey85\0"
+"grey86\0"
+"grey87\0"
+"grey88\0"
+"grey89\0"
+"grey90\0"
+"grey91\0"
+"grey92\0"
+"grey9\0"
+"grey93\0"
+"grey94\0"
+"grey95\0"
+"grey96\0"
+"grey97\0"
+"grey98\0"
+"grey99\0"
+"honeydew1\0"
+"honeydew2\0"
+"honeydew\0"
+"honeydew3\0"
+"honeydew4\0"
+"hotpink1\0"
+"hotpink2\0"
+"hot pink\0"
+"hotpink\0"
+"hotpink3\0"
+"hotpink4\0"
+"indianred1\0"
+"indian red\0"
+"indianred\0"
+"indianred2\0"
+"indianred3\0"
+"indianred4\0"
+"indigo\0"
+"ivory1\0"
+"ivory2\0"
+"ivory\0"
+"ivory3\0"
+"ivory4\0"
+"khaki1\0"
+"khaki2\0"
+"khaki\0"
+"khaki3\0"
+"khaki4\0"
+"lavender\0"
+"lavenderblush1\0"
+"lavenderblush2\0"
+"lavender blush\0"
+"lavenderblush\0"
+"lavenderblush3\0"
+"lavenderblush4\0"
+"lawn green\0"
+"lawngreen\0"
+"lemonchiffon1\0"
+"lemonchiffon2\0"
+"lemon chiffon\0"
+"lemonchiffon\0"
+"lemonchiffon3\0"
+"lemonchiffon4\0"
+"lightblue1\0"
+"light blue\0"
+"lightblue\0"
+"lightblue2\0"
+"lightblue3\0"
+"lightblue4\0"
+"light coral\0"
+"lightcoral\0"
+"lightcyan1\0"
+"lightcyan2\0"
+"light cyan\0"
+"lightcyan\0"
+"lightcyan3\0"
+"lightcyan4\0"
+"lightgoldenrod1\0"
+"lightgoldenrod2\0"
+"light goldenrod\0"
+"lightgoldenrod\0"
+"lightgoldenrod3\0"
+"lightgoldenrod4\0"
+"light goldenrod yellow\0"
+"lightgoldenrodyellow\0"
+"light gray\0"
+"lightgray\0"
+"light green\0"
+"lightgreen\0"
+"light grey\0"
+"lightgrey\0"
+"lightpink1\0"
+"lightpink2\0"
+"light pink\0"
+"lightpink\0"
+"lightpink3\0"
+"lightpink4\0"
+"lightsalmon1\0"
+"lightsalmon2\0"
+"light salmon\0"
+"lightsalmon\0"
+"lightsalmon3\0"
+"lightsalmon4\0"
+"light sea green\0"
+"lightseagreen\0"
+"lightskyblue1\0"
+"light sky blue\0"
+"lightskyblue\0"
+"lightskyblue2\0"
+"lightskyblue3\0"
+"lightskyblue4\0"
+"light slate blue\0"
+"lightslateblue\0"
+"light slate gray\0"
+"lightslategray\0"
+"light slate grey\0"
+"lightslategrey\0"
+"lightsteelblue1\0"
+"light steel blue\0"
+"lightsteelblue\0"
+"lightsteelblue2\0"
+"lightsteelblue3\0"
+"lightsteelblue4\0"
+"lightyellow1\0"
+"lightyellow2\0"
+"light yellow\0"
+"lightyellow\0"
+"lightyellow3\0"
+"lightyellow4\0"
+"lime\0"
+"lime green\0"
+"limegreen\0"
+"linen\0"
+"magenta1\0"
+"magenta2\0"
+"magenta\0"
+"magenta3\0"
+"magenta4\0"
+"maroon1\0"
+"maroon\0"
+"maroon2\0"
+"maroon3\0"
+"maroon4\0"
+"medium aquamarine\0"
+"mediumaquamarine\0"
+"medium blue\0"
+"mediumblue\0"
+"mediumorchid1\0"
+"medium orchid\0"
+"mediumorchid\0"
+"mediumorchid2\0"
+"mediumorchid3\0"
+"mediumorchid4\0"
+"mediumpurple1\0"
+"medium purple\0"
+"mediumpurple\0"
+"mediumpurple2\0"
+"mediumpurple3\0"
+"mediumpurple4\0"
+"medium sea green\0"
+"mediumseagreen\0"
+"medium slate blue\0"
+"mediumslateblue\0"
+"medium spring green\0"
+"mediumspringgreen\0"
+"medium turquoise\0"
+"mediumturquoise\0"
+"medium violet red\0"
+"mediumvioletred\0"
+"midnight blue\0"
+"midnightblue\0"
+"mint cream\0"
+"mintcream\0"
+"mistyrose1\0"
+"mistyrose2\0"
+"misty rose\0"
+"mistyrose\0"
+"mistyrose3\0"
+"mistyrose4\0"
+"moccasin\0"
+"navajowhite1\0"
+"navajowhite2\0"
+"navajo white\0"
+"navajowhite\0"
+"navajowhite3\0"
+"navajowhite4\0"
+"navy\0"
+"navy blue\0"
+"navyblue\0"
+"old lace\0"
+"oldlace\0"
+"olive\0"
+"olive drab\0"
+"olivedrab\0"
+"olivedrab1\0"
+"olivedrab2\0"
+"olivedrab3\0"
+"olivedrab4\0"
+"orange1\0"
+"orange2\0"
+"orange\0"
+"orange3\0"
+"orange4\0"
+"orangered1\0"
+"orangered2\0"
+"orange red\0"
+"orangered\0"
+"orangered3\0"
+"orangered4\0"
+"orchid1\0"
+"orchid\0"
+"orchid2\0"
+"orchid3\0"
+"orchid4\0"
+"pale goldenrod\0"
+"palegoldenrod\0"
+"palegreen1\0"
+"pale green\0"
+"palegreen\0"
+"palegreen2\0"
+"palegreen3\0"
+"palegreen4\0"
+"paleturquoise1\0"
+"pale turquoise\0"
+"paleturquoise\0"
+"paleturquoise2\0"
+"paleturquoise3\0"
+"paleturquoise4\0"
+"palevioletred1\0"
+"pale violet red\0"
+"palevioletred\0"
+"palevioletred2\0"
+"palevioletred3\0"
+"palevioletred4\0"
+"papaya whip\0"
+"papayawhip\0"
+"peachpuff1\0"
+"peachpuff2\0"
+"peach puff\0"
+"peachpuff\0"
+"peachpuff3\0"
+"peachpuff4\0"
+"peru\0"
+"pink1\0"
+"pink2\0"
+"pink\0"
+"pink3\0"
+"pink4\0"
+"plum1\0"
+"plum\0"
+"plum2\0"
+"plum3\0"
+"plum4\0"
+"powder blue\0"
+"powderblue\0"
+"purple1\0"
+"purple\0"
+"purple2\0"
+"purple3\0"
+"purple4\0"
+"rebecca purple\0"
+"rebeccapurple\0"
+"red1\0"
+"red2\0"
+"red\0"
+"red3\0"
+"red4\0"
+"rosybrown1\0"
+"rosy brown\0"
+"rosybrown\0"
+"rosybrown2\0"
+"rosybrown3\0"
+"rosybrown4\0"
+"royalblue1\0"
+"royalblue2\0"
+"royalblue3\0"
+"royalblue4\0"
+"royal blue\0"
+"royalblue\0"
+"saddle brown\0"
+"saddlebrown\0"
+"salmon1\0"
+"salmon2\0"
+"salmon\0"
+"salmon3\0"
+"salmon4\0"
+"sandy brown\0"
+"sandybrown\0"
+"seagreen1\0"
+"seagreen2\0"
+"seagreen3\0"
+"seagreen4\0"
+"sea green\0"
+"seagreen\0"
+"seashell1\0"
+"seashell2\0"
+"seashell\0"
+"seashell3\0"
+"seashell4\0"
+"sienna1\0"
+"sienna\0"
+"sienna2\0"
+"sienna3\0"
+"sienna4\0"
+"silver\0"
+"skyblue1\0"
+"sky blue\0"
+"skyblue\0"
+"skyblue2\0"
+"skyblue3\0"
+"skyblue4\0"
+"slate blue\0"
+"slateblue\0"
+"slateblue1\0"
+"slateblue2\0"
+"slateblue3\0"
+"slateblue4\0"
+"slate gray\0"
+"slategray\0"
+"slategray1\0"
+"slategray2\0"
+"slategray3\0"
+"slategray4\0"
+"slate grey\0"
+"slategrey\0"
+"snow1\0"
+"snow2\0"
+"snow\0"
+"snow3\0"
+"snow4\0"
+"spring green\0"
+"springgreen\0"
+"springgreen1\0"
+"springgreen2\0"
+"springgreen3\0"
+"springgreen4\0"
+"steelblue1\0"
+"steelblue2\0"
+"steelblue3\0"
+"steelblue4\0"
+"steel blue\0"
+"steelblue\0"
+"tan1\0"
+"tan\0"
+"tan2\0"
+"tan3\0"
+"tan4\0"
+"teal\0"
+"thistle1\0"
+"thistle\0"
+"thistle2\0"
+"thistle3\0"
+"thistle4\0"
+"tomato1\0"
+"tomato2\0"
+"tomato\0"
+"tomato3\0"
+"tomato4\0"
+"turquoise1\0"
+"turquoise2\0"
+"turquoise3\0"
+"turquoise4\0"
+"turquoise\0"
+"violet\0"
+"violetred1\0"
+"violet red\0"
+"violetred\0"
+"violetred2\0"
+"violetred3\0"
+"violetred4\0"
+"web gray\0"
+"webgray\0"
+"web green\0"
+"webgreen\0"
+"web grey\0"
+"webgrey\0"
+"web maroon\0"
+"webmaroon\0"
+"web purple\0"
+"webpurple\0"
+"wheat1\0"
+"wheat2\0"
+"wheat\0"
+"wheat3\0"
+"wheat4\0"
+"white\0"
+"white smoke\0"
+"whitesmoke\0"
+"x11 gray\0"
+"x11gray\0"
+"x11 green\0"
+"x11green\0"
+"x11 grey\0"
+"x11grey\0"
+"x11 maroon\0"
+"x11maroon\0"
+"x11 purple\0"
+"x11purple\0"
+"yellow1\0"
+"yellow2\0"
+"yellow\0"
+"yellow3\0"
+"yellow4\0"
+"yellow green\0"
+"yellowgreen"
+;
 
 static int
 _xpm_hexa_int(const char *s, int len)
@@ -39,10 +1612,7 @@ _xpm_hexa_int(const char *s, int len)
 static void
 xpm_parse_color(char *color, int *r, int *g, int *b)
 {
-   char *tmp;
-   char *max;
-   char *endline;
-   char buf[4096];
+   int i;
 
    /* is a #ff00ff like color */
    if (color[0] == '#')
@@ -72,36 +1642,21 @@ xpm_parse_color(char *color, int *r, int *g, int *b)
           }
         return;
      }
-   /* look in rgb txt database */
-   if (!rgb_txt) return;
-   tmp = rgb_txt_map;
-   max = tmp + eina_file_size_get(rgb_txt);
 
-   while (tmp < max)
+   /* look in rgb txt database */
+   // yes this is a linear search. as it's sorted we could binary-search...
+   // but come on. it's an xpm file. we do this only for the palette and
+   // we're already forced to paars c src code text to load an image...
+   // so does it matter?
+   for (i = 0; i < 782; i++) // there are 786 entries in color index
      {
-        endline = memchr(tmp, '\n', max - tmp);
-        if (!endline) endline = max;
-        if ((*tmp != '!') && ((endline - tmp) < (int) (sizeof(buf) - 1)))
+        if (!strcasecmp(color_name_string + color_name_index[i].offset, color))
           {
-             int rr, gg, bb;
-             char name[4096];
-
-             /* FIXME: not really efficient, should be loaded once in memory with a lookup table */
-             memcpy(buf, tmp, endline - tmp);
-             buf[endline - tmp + 1] = '\0';
-
-             if (sscanf(buf, "%i %i %i %[^\n]", &rr, &gg, &bb, name) == 4)
-              {
-                 if (!strcasecmp(name, color))
-                   {
-                      *r = rr;
-                      *g = gg;
-                      *b = bb;
-                      return;
-                   }
-              }
+             *r = color_name_index[i].r;
+             *g = color_name_index[i].g;
+             *b = color_name_index[i].b;
+             return;
           }
-        tmp = endline + 1;
      }
 }
 
@@ -706,15 +2261,6 @@ module_open(Evas_Module *em)
         return 0;
      }
 
-   /* Shouldn't we make that PATH configurable ? */
-   rgb_txt = eina_file_open("/etc/X11/rgb.txt", 0);
-   if (!rgb_txt) rgb_txt = eina_file_open("/usr/lib/X11/rgb.txt", 0);
-   if (!rgb_txt) rgb_txt = eina_file_open("/usr/X11/lib/X11/rgb.txt", 0);
-   if (!rgb_txt) rgb_txt = eina_file_open("/usr/X11R6/lib/X11/rgb.txt", 0);
-   if (!rgb_txt) rgb_txt = eina_file_open("/usr/openwin/lib/X11/rgb.txt", 0);
-   if (!rgb_txt) rgb_txt = eina_file_open("/usr/share/vim/vim80/rgb.txt", 0);
-   if (rgb_txt)
-     rgb_txt_map = eina_file_map_all(rgb_txt, EINA_FILE_WILLNEED);
    em->functions = (void *)(&evas_image_load_xpm_func);
    return 1;
 }
@@ -722,12 +2268,6 @@ module_open(Evas_Module *em)
 static void
 module_close(Evas_Module *em EINA_UNUSED)
 {
-   if (rgb_txt)
-     {
-        eina_file_map_free(rgb_txt, rgb_txt_map);
-        eina_file_close(rgb_txt);
-        rgb_txt = NULL;
-     }
    if (_evas_loader_xpm_log_dom >= 0)
      {
         eina_log_domain_unregister(_evas_loader_xpm_log_dom);