1 //! A big dictionary of named colors and their
2 //! corresponding RGBA values
3 
4 pub(crate) struct NamedColorMap {
5     name_to_rgba: phf::Map<&'static str, [u8; 4]>,
6     rgba_to_name: phf::Map<[u8; 3], &'static str>,
7 }
8 
9 impl NamedColorMap {
get_by_name(&self, name: &str) -> Option<&[u8; 4]>10     pub fn get_by_name(&self, name: &str) -> Option<&[u8; 4]> {
11         self.name_to_rgba.get(name)
12     }
13 
14     // transparent is not handled
get_by_rgba(&self, rgba: [u8; 3]) -> Option<&&str>15     pub fn get_by_rgba(&self, rgba: [u8; 3]) -> Option<&&str> {
16         self.rgba_to_name.get(&rgba)
17     }
18 }
19 
20 // Adding one color requires adding to both map due to limitation in phf crate.
21 pub(crate) static NAMED_COLORS: NamedColorMap = NamedColorMap {
22     name_to_rgba: phf::phf_map! {
23         "aliceblue" => [0xF0, 0xF8, 0xFF, 0xFF],
24         "antiquewhite" => [0xFA, 0xEB, 0xD7, 0xFF],
25         "aqua" => [0x00, 0xFF, 0xFF, 0xFF],
26         "aquamarine" => [0x7F, 0xFF, 0xD4, 0xFF],
27         "azure" => [0xF0, 0xFF, 0xFF, 0xFF],
28         "beige" => [0xF5, 0xF5, 0xDC, 0xFF],
29         "bisque" => [0xFF, 0xE4, 0xC4, 0xFF],
30         "black" => [0x00, 0x00, 0x00, 0xFF],
31         "blanchedalmond" => [0xFF, 0xEB, 0xCD, 0xFF],
32         "blue" => [0x00, 0x00, 0xFF, 0xFF],
33         "blueviolet" => [0x8A, 0x2B, 0xE2, 0xFF],
34         "brown" => [0xA5, 0x2A, 0x2A, 0xFF],
35         "burlywood" => [0xDE, 0xB8, 0x87, 0xFF],
36         "cadetblue" => [0x5F, 0x9E, 0xA0, 0xFF],
37         "chartreuse" => [0x7F, 0xFF, 0x00, 0xFF],
38         "chocolate" => [0xD2, 0x69, 0x1E, 0xFF],
39         "coral" => [0xFF, 0x7F, 0x50, 0xFF],
40         "cornflowerblue" => [0x64, 0x95, 0xED, 0xFF],
41         "cornsilk" => [0xFF, 0xF8, 0xDC, 0xFF],
42         "crimson" => [0xDC, 0x14, 0x3C, 0xFF],
43         "darkblue" => [0x00, 0x00, 0x8B, 0xFF],
44         "darkcyan" => [0x00, 0x8B, 0x8B, 0xFF],
45         "darkgoldenrod" => [0xB8, 0x86, 0x0B, 0xFF],
46         "darkgray" => [0xA9, 0xA9, 0xA9, 0xFF],
47         "darkgreen" => [0x00, 0x64, 0x00, 0xFF],
48         "darkkhaki" => [0xBD, 0xB7, 0x6B, 0xFF],
49         "darkmagenta" => [0x8B, 0x00, 0x8B, 0xFF],
50         "darkolivegreen" => [0x55, 0x6B, 0x2F, 0xFF],
51         "darkorange" => [0xFF, 0x8C, 0x00, 0xFF],
52         "darkorchid" => [0x99, 0x32, 0xCC, 0xFF],
53         "darkred" => [0x8B, 0x00, 0x00, 0xFF],
54         "darksalmon" => [0xE9, 0x96, 0x7A, 0xFF],
55         "darkseagreen" => [0x8F, 0xBC, 0x8F, 0xFF],
56         "darkslateblue" => [0x48, 0x3D, 0x8B, 0xFF],
57         "darkslategray" => [0x2F, 0x4F, 0x4F, 0xFF],
58         "darkturquoise" => [0x00, 0xCE, 0xD1, 0xFF],
59         "darkviolet" => [0x94, 0x00, 0xD3, 0xFF],
60         "deeppink" => [0xFF, 0x14, 0x93, 0xFF],
61         "deepskyblue" => [0x00, 0xBF, 0xFF, 0xFF],
62         "dimgray" => [0x69, 0x69, 0x69, 0xFF],
63         "dodgerblue" => [0x1E, 0x90, 0xFF, 0xFF],
64         "firebrick" => [0xB2, 0x22, 0x22, 0xFF],
65         "floralwhite" => [0xFF, 0xFA, 0xF0, 0xFF],
66         "forestgreen" => [0x22, 0x8B, 0x22, 0xFF],
67         "fuchsia" => [0xFF, 0x00, 0xFF, 0xFF],
68         "gainsboro" => [0xDC, 0xDC, 0xDC, 0xFF],
69         "ghostwhite" => [0xF8, 0xF8, 0xFF, 0xFF],
70         "gold" => [0xFF, 0xD7, 0x00, 0xFF],
71         "goldenrod" => [0xDA, 0xA5, 0x20, 0xFF],
72         "gray" => [0x80, 0x80, 0x80, 0xFF],
73         "green" => [0x00, 0x80, 0x00, 0xFF],
74         "greenyellow" => [0xAD, 0xFF, 0x2F, 0xFF],
75         "honeydew" => [0xF0, 0xFF, 0xF0, 0xFF],
76         "hotpink" => [0xFF, 0x69, 0xB4, 0xFF],
77         "indianred" => [0xCD, 0x5C, 0x5C, 0xFF],
78         "indigo" => [0x4B, 0x00, 0x82, 0xFF],
79         "ivory" => [0xFF, 0xFF, 0xF0, 0xFF],
80         "khaki" => [0xF0, 0xE6, 0x8C, 0xFF],
81         "lavender" => [0xE6, 0xE6, 0xFA, 0xFF],
82         "lavenderblush" => [0xFF, 0xF0, 0xF5, 0xFF],
83         "lawngreen" => [0x7C, 0xFC, 0x00, 0xFF],
84         "lemonchiffon" => [0xFF, 0xFA, 0xCD, 0xFF],
85         "lightblue" => [0xAD, 0xD8, 0xE6, 0xFF],
86         "lightcoral" => [0xF0, 0x80, 0x80, 0xFF],
87         "lightcyan" => [0xE0, 0xFF, 0xFF, 0xFF],
88         "lightgoldenrodyellow" => [0xFA, 0xFA, 0xD2, 0xFF],
89         "lightgray" => [0xD3, 0xD3, 0xD3, 0xFF],
90         "lightgreen" => [0x90, 0xEE, 0x90, 0xFF],
91         "lightpink" => [0xFF, 0xB6, 0xC1, 0xFF],
92         "lightsalmon" => [0xFF, 0xA0, 0x7A, 0xFF],
93         "lightseagreen" => [0x20, 0xB2, 0xAA, 0xFF],
94         "lightskyblue" => [0x87, 0xCE, 0xFA, 0xFF],
95         "lightslategray" => [0x77, 0x88, 0x99, 0xFF],
96         "lightsteelblue" => [0xB0, 0xC4, 0xDE, 0xFF],
97         "lightyellow" => [0xFF, 0xFF, 0xE0, 0xFF],
98         "lime" => [0x00, 0xFF, 0x00, 0xFF],
99         "limegreen" => [0x32, 0xCD, 0x32, 0xFF],
100         "linen" => [0xFA, 0xF0, 0xE6, 0xFF],
101         "maroon" => [0x80, 0x00, 0x00, 0xFF],
102         "mediumaquamarine" => [0x66, 0xCD, 0xAA, 0xFF],
103         "mediumblue" => [0x00, 0x00, 0xCD, 0xFF],
104         "mediumorchid" => [0xBA, 0x55, 0xD3, 0xFF],
105         "mediumpurple" => [0x93, 0x70, 0xDB, 0xFF],
106         "mediumseagreen" => [0x3C, 0xB3, 0x71, 0xFF],
107         "mediumslateblue" => [0x7B, 0x68, 0xEE, 0xFF],
108         "mediumspringgreen" => [0x00, 0xFA, 0x9A, 0xFF],
109         "mediumturquoise" => [0x48, 0xD1, 0xCC, 0xFF],
110         "mediumvioletred" => [0xC7, 0x15, 0x85, 0xFF],
111         "midnightblue" => [0x19, 0x19, 0x70, 0xFF],
112         "mintcream" => [0xF5, 0xFF, 0xFA, 0xFF],
113         "mistyrose" => [0xFF, 0xE4, 0xE1, 0xFF],
114         "moccasin" => [0xFF, 0xE4, 0xB5, 0xFF],
115         "navajowhite" => [0xFF, 0xDE, 0xAD, 0xFF],
116         "navy" => [0x00, 0x00, 0x80, 0xFF],
117         "oldlace" => [0xFD, 0xF5, 0xE6, 0xFF],
118         "olive" => [0x80, 0x80, 0x00, 0xFF],
119         "olivedrab" => [0x6B, 0x8E, 0x23, 0xFF],
120         "orange" => [0xFF, 0xA5, 0x00, 0xFF],
121         "orangered" => [0xFF, 0x45, 0x00, 0xFF],
122         "orchid" => [0xDA, 0x70, 0xD6, 0xFF],
123         "palegoldenrod" => [0xEE, 0xE8, 0xAA, 0xFF],
124         "palegreen" => [0x98, 0xFB, 0x98, 0xFF],
125         "paleturquoise" => [0xAF, 0xEE, 0xEE, 0xFF],
126         "palevioletred" => [0xDB, 0x70, 0x93, 0xFF],
127         "papayawhip" => [0xFF, 0xEF, 0xD5, 0xFF],
128         "peachpuff" => [0xFF, 0xDA, 0xB9, 0xFF],
129         "peru" => [0xCD, 0x85, 0x3F, 0xFF],
130         "pink" => [0xFF, 0xC0, 0xCB, 0xFF],
131         "plum" => [0xDD, 0xA0, 0xDD, 0xFF],
132         "powderblue" => [0xB0, 0xE0, 0xE6, 0xFF],
133         "purple" => [0x80, 0x00, 0x80, 0xFF],
134         "rebeccapurple" => [0x66, 0x33, 0x99, 0xFF],
135         "red" => [0xFF, 0x00, 0x00, 0xFF],
136         "rosybrown" => [0xBC, 0x8F, 0x8F, 0xFF],
137         "royalblue" => [0x41, 0x69, 0xE1, 0xFF],
138         "saddlebrown" => [0x8B, 0x45, 0x13, 0xFF],
139         "salmon" => [0xFA, 0x80, 0x72, 0xFF],
140         "sandybrown" => [0xF4, 0xA4, 0x60, 0xFF],
141         "seagreen" => [0x2E, 0x8B, 0x57, 0xFF],
142         "seashell" => [0xFF, 0xF5, 0xEE, 0xFF],
143         "sienna" => [0xA0, 0x52, 0x2D, 0xFF],
144         "silver" => [0xC0, 0xC0, 0xC0, 0xFF],
145         "skyblue" => [0x87, 0xCE, 0xEB, 0xFF],
146         "slateblue" => [0x6A, 0x5A, 0xCD, 0xFF],
147         "slategray" => [0x70, 0x80, 0x90, 0xFF],
148         "snow" => [0xFF, 0xFA, 0xFA, 0xFF],
149         "springgreen" => [0x00, 0xFF, 0x7F, 0xFF],
150         "steelblue" => [0x46, 0x82, 0xB4, 0xFF],
151         "tan" => [0xD2, 0xB4, 0x8C, 0xFF],
152         "teal" => [0x00, 0x80, 0x80, 0xFF],
153         "thistle" => [0xD8, 0xBF, 0xD8, 0xFF],
154         "tomato" => [0xFF, 0x63, 0x47, 0xFF],
155         "turquoise" => [0x40, 0xE0, 0xD0, 0xFF],
156         "violet" => [0xEE, 0x82, 0xEE, 0xFF],
157         "wheat" => [0xF5, 0xDE, 0xB3, 0xFF],
158         "white" => [0xFF, 0xFF, 0xFF, 0xFF],
159         "whitesmoke" => [0xF5, 0xF5, 0xF5, 0xFF],
160         "yellow" => [0xFF, 0xFF, 0x00, 0xFF],
161         "yellowgreen" => [0x9A, 0xCD, 0x32, 0xFF],
162         "transparent" => [0x00, 0x00, 0x00, 0x00],
163     },
164     rgba_to_name: phf::phf_map! {
165         [0xF0, 0xF8, 0xFF] => "aliceblue",
166         [0xFA, 0xEB, 0xD7] => "antiquewhite",
167         [0x00, 0xFF, 0xFF] => "aqua",
168         [0x7F, 0xFF, 0xD4] => "aquamarine",
169         [0xF0, 0xFF, 0xFF] => "azure",
170         [0xF5, 0xF5, 0xDC] => "beige",
171         [0xFF, 0xE4, 0xC4] => "bisque",
172         [0x00, 0x00, 0x00] => "black",
173         [0xFF, 0xEB, 0xCD] => "blanchedalmond",
174         [0x00, 0x00, 0xFF] => "blue",
175         [0x8A, 0x2B, 0xE2] => "blueviolet",
176         [0xA5, 0x2A, 0x2A] => "brown",
177         [0xDE, 0xB8, 0x87] => "burlywood",
178         [0x5F, 0x9E, 0xA0] => "cadetblue",
179         [0x7F, 0xFF, 0x00] => "chartreuse",
180         [0xD2, 0x69, 0x1E] => "chocolate",
181         [0xFF, 0x7F, 0x50] => "coral",
182         [0x64, 0x95, 0xED] => "cornflowerblue",
183         [0xFF, 0xF8, 0xDC] => "cornsilk",
184         [0xDC, 0x14, 0x3C] => "crimson",
185         [0x00, 0x00, 0x8B] => "darkblue",
186         [0x00, 0x8B, 0x8B] => "darkcyan",
187         [0xB8, 0x86, 0x0B] => "darkgoldenrod",
188         [0xA9, 0xA9, 0xA9] => "darkgray",
189         [0x00, 0x64, 0x00] => "darkgreen",
190         [0xBD, 0xB7, 0x6B] => "darkkhaki",
191         [0x8B, 0x00, 0x8B] => "darkmagenta",
192         [0x55, 0x6B, 0x2F] => "darkolivegreen",
193         [0xFF, 0x8C, 0x00] => "darkorange",
194         [0x99, 0x32, 0xCC] => "darkorchid",
195         [0x8B, 0x00, 0x00] => "darkred",
196         [0xE9, 0x96, 0x7A] => "darksalmon",
197         [0x8F, 0xBC, 0x8F] => "darkseagreen",
198         [0x48, 0x3D, 0x8B] => "darkslateblue",
199         [0x2F, 0x4F, 0x4F] => "darkslategray",
200         [0x00, 0xCE, 0xD1] => "darkturquoise",
201         [0x94, 0x00, 0xD3] => "darkviolet",
202         [0xFF, 0x14, 0x93] => "deeppink",
203         [0x00, 0xBF, 0xFF] => "deepskyblue",
204         [0x69, 0x69, 0x69] => "dimgray",
205         [0x1E, 0x90, 0xFF] => "dodgerblue",
206         [0xB2, 0x22, 0x22] => "firebrick",
207         [0xFF, 0xFA, 0xF0] => "floralwhite",
208         [0x22, 0x8B, 0x22] => "forestgreen",
209         [0xFF, 0x00, 0xFF] => "fuchsia",
210         [0xDC, 0xDC, 0xDC] => "gainsboro",
211         [0xF8, 0xF8, 0xFF] => "ghostwhite",
212         [0xFF, 0xD7, 0x00] => "gold",
213         [0xDA, 0xA5, 0x20] => "goldenrod",
214         [0x80, 0x80, 0x80] => "gray",
215         [0x00, 0x80, 0x00] => "green",
216         [0xAD, 0xFF, 0x2F] => "greenyellow",
217         [0xF0, 0xFF, 0xF0] => "honeydew",
218         [0xFF, 0x69, 0xB4] => "hotpink",
219         [0xCD, 0x5C, 0x5C] => "indianred",
220         [0x4B, 0x00, 0x82] => "indigo",
221         [0xFF, 0xFF, 0xF0] => "ivory",
222         [0xF0, 0xE6, 0x8C] => "khaki",
223         [0xE6, 0xE6, 0xFA] => "lavender",
224         [0xFF, 0xF0, 0xF5] => "lavenderblush",
225         [0x7C, 0xFC, 0x00] => "lawngreen",
226         [0xFF, 0xFA, 0xCD] => "lemonchiffon",
227         [0xAD, 0xD8, 0xE6] => "lightblue",
228         [0xF0, 0x80, 0x80] => "lightcoral",
229         [0xE0, 0xFF, 0xFF] => "lightcyan",
230         [0xFA, 0xFA, 0xD2] => "lightgoldenrodyellow",
231         [0xD3, 0xD3, 0xD3] => "lightgray",
232         [0x90, 0xEE, 0x90] => "lightgreen",
233         [0xFF, 0xB6, 0xC1] => "lightpink",
234         [0xFF, 0xA0, 0x7A] => "lightsalmon",
235         [0x20, 0xB2, 0xAA] => "lightseagreen",
236         [0x87, 0xCE, 0xFA] => "lightskyblue",
237         [0x77, 0x88, 0x99] => "lightslategray",
238         [0xB0, 0xC4, 0xDE] => "lightsteelblue",
239         [0xFF, 0xFF, 0xE0] => "lightyellow",
240         [0x00, 0xFF, 0x00] => "lime",
241         [0x32, 0xCD, 0x32] => "limegreen",
242         [0xFA, 0xF0, 0xE6] => "linen",
243         [0x80, 0x00, 0x00] => "maroon",
244         [0x66, 0xCD, 0xAA] => "mediumaquamarine",
245         [0x00, 0x00, 0xCD] => "mediumblue",
246         [0xBA, 0x55, 0xD3] => "mediumorchid",
247         [0x93, 0x70, 0xDB] => "mediumpurple",
248         [0x3C, 0xB3, 0x71] => "mediumseagreen",
249         [0x7B, 0x68, 0xEE] => "mediumslateblue",
250         [0x00, 0xFA, 0x9A] => "mediumspringgreen",
251         [0x48, 0xD1, 0xCC] => "mediumturquoise",
252         [0xC7, 0x15, 0x85] => "mediumvioletred",
253         [0x19, 0x19, 0x70] => "midnightblue",
254         [0xF5, 0xFF, 0xFA] => "mintcream",
255         [0xFF, 0xE4, 0xE1] => "mistyrose",
256         [0xFF, 0xE4, 0xB5] => "moccasin",
257         [0xFF, 0xDE, 0xAD] => "navajowhite",
258         [0x00, 0x00, 0x80] => "navy",
259         [0xFD, 0xF5, 0xE6] => "oldlace",
260         [0x80, 0x80, 0x00] => "olive",
261         [0x6B, 0x8E, 0x23] => "olivedrab",
262         [0xFF, 0xA5, 0x00] => "orange",
263         [0xFF, 0x45, 0x00] => "orangered",
264         [0xDA, 0x70, 0xD6] => "orchid",
265         [0xEE, 0xE8, 0xAA] => "palegoldenrod",
266         [0x98, 0xFB, 0x98] => "palegreen",
267         [0xAF, 0xEE, 0xEE] => "paleturquoise",
268         [0xDB, 0x70, 0x93] => "palevioletred",
269         [0xFF, 0xEF, 0xD5] => "papayawhip",
270         [0xFF, 0xDA, 0xB9] => "peachpuff",
271         [0xCD, 0x85, 0x3F] => "peru",
272         [0xFF, 0xC0, 0xCB] => "pink",
273         [0xDD, 0xA0, 0xDD] => "plum",
274         [0xB0, 0xE0, 0xE6] => "powderblue",
275         [0x80, 0x00, 0x80] => "purple",
276         [0x66, 0x33, 0x99] => "rebeccapurple",
277         [0xFF, 0x00, 0x00] => "red",
278         [0xBC, 0x8F, 0x8F] => "rosybrown",
279         [0x41, 0x69, 0xE1] => "royalblue",
280         [0x8B, 0x45, 0x13] => "saddlebrown",
281         [0xFA, 0x80, 0x72] => "salmon",
282         [0xF4, 0xA4, 0x60] => "sandybrown",
283         [0x2E, 0x8B, 0x57] => "seagreen",
284         [0xFF, 0xF5, 0xEE] => "seashell",
285         [0xA0, 0x52, 0x2D] => "sienna",
286         [0xC0, 0xC0, 0xC0] => "silver",
287         [0x87, 0xCE, 0xEB] => "skyblue",
288         [0x6A, 0x5A, 0xCD] => "slateblue",
289         [0x70, 0x80, 0x90] => "slategray",
290         [0xFF, 0xFA, 0xFA] => "snow",
291         [0x00, 0xFF, 0x7F] => "springgreen",
292         [0x46, 0x82, 0xB4] => "steelblue",
293         [0xD2, 0xB4, 0x8C] => "tan",
294         [0x00, 0x80, 0x80] => "teal",
295         [0xD8, 0xBF, 0xD8] => "thistle",
296         [0xFF, 0x63, 0x47] => "tomato",
297         [0x40, 0xE0, 0xD0] => "turquoise",
298         [0xEE, 0x82, 0xEE] => "violet",
299         [0xF5, 0xDE, 0xB3] => "wheat",
300         [0xFF, 0xFF, 0xFF] => "white",
301         [0xF5, 0xF5, 0xF5] => "whitesmoke",
302         [0xFF, 0xFF, 0x00] => "yellow",
303         [0x9A, 0xCD, 0x32] => "yellowgreen",
304     },
305 };
306