rigela_utils/
color.rs

1/*
2 * Copyright (c) 2024. The RigelA open source project team and
3 * its contributors reserve all rights.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and limitations under the License.
12 */
13
14const COLOR_NAMES_MAX: usize = 866;
15
16#[derive(Debug)]
17struct ColorInfo {
18    name: &'static str,
19    rgb: Rgb,
20}
21
22#[derive(Debug, Copy, Clone, PartialEq)]
23struct Rgb {
24    r: u8,
25    g: u8,
26    b: u8,
27}
28
29macro_rules! define {
30    ($var:ident,$len:expr,$(($name:literal,$r:expr,$g:expr,$b:expr)),*) => {
31        static $var: [ColorInfo; $len] = [
32            $(
33                ColorInfo { name: $name, rgb: Rgb { r: $r, g: $g, b: $b } }
34            ),*
35        ];
36    };
37}
38
39define!(
40    COLOR_DATA,
41    COLOR_NAMES_MAX,
42    ("air_force_blue_raf", 93, 138, 168),
43    ("air_force_blue_usaf", 0, 48, 143),
44    ("air_superiority_blue", 114, 160, 193),
45    ("alabama_crimson", 163, 38, 56),
46    ("alice_blue", 240, 248, 255),
47    ("alizarin_crimson", 227, 38, 54),
48    ("alloy_orange", 196, 98, 16),
49    ("almond", 239, 222, 205),
50    ("amaranth", 229, 43, 80),
51    ("amber", 255, 191, 0),
52    ("amber_sae_ece", 255, 126, 0),
53    ("american_rose", 255, 3, 62),
54    ("amethyst", 153, 102, 204),
55    ("android_green", 164, 198, 57),
56    ("anti_flash_white", 242, 243, 244),
57    ("antique_brass", 205, 149, 117),
58    ("antique_fuchsia", 145, 92, 131),
59    ("antique_ruby", 132, 27, 45),
60    ("antique_white", 250, 235, 215),
61    ("ao_english", 0, 128, 0),
62    ("apple_green", 141, 182, 0),
63    ("apricot", 251, 206, 177),
64    ("aqua", 0, 255, 255),
65    ("aquamarine", 127, 255, 212),
66    ("army_green", 75, 83, 32),
67    ("arsenic", 59, 68, 75),
68    ("arylide_yellow", 233, 214, 107),
69    ("ash_grey", 178, 190, 181),
70    ("asparagus", 135, 169, 107),
71    ("atomic_tangerine", 255, 153, 102),
72    ("auburn", 165, 42, 42),
73    ("aureolin", 253, 238, 0),
74    ("aurometalsaurus", 110, 127, 128),
75    ("avocado", 86, 130, 3),
76    ("azure", 0, 127, 255),
77    ("azure_mist_web", 240, 255, 255),
78    ("baby_blue", 137, 207, 240),
79    ("baby_blue_eyes", 161, 202, 241),
80    ("baby_pink", 244, 194, 194),
81    ("ball_blue", 33, 171, 205),
82    ("banana_mania", 250, 231, 181),
83    ("banana_yellow", 255, 225, 53),
84    ("barn_red", 124, 10, 2),
85    ("battleship_grey", 132, 132, 130),
86    ("bazaar", 152, 119, 123),
87    ("beau_blue", 188, 212, 230),
88    ("beaver", 159, 129, 112),
89    ("beige", 245, 245, 220),
90    ("big_dip_o_ruby", 156, 37, 66),
91    ("bisque", 255, 228, 196),
92    ("bistre", 61, 43, 31),
93    ("bittersweet", 254, 111, 94),
94    ("bittersweet_shimmer", 191, 79, 81),
95    ("black", 0, 0, 0),
96    ("black_bean", 61, 12, 2),
97    ("black_leather_jacket", 37, 53, 41),
98    ("black_olive", 59, 60, 54),
99    ("blanched_almond", 255, 235, 205),
100    ("blast_off_bronze", 165, 113, 100),
101    ("bleu_de_france", 49, 140, 231),
102    ("blizzard_blue", 172, 229, 238),
103    ("blond", 250, 240, 190),
104    ("blue", 0, 0, 255),
105    ("blue_bell", 162, 162, 208),
106    ("blue_crayola", 31, 117, 254),
107    ("blue_gray", 102, 153, 204),
108    ("blue_green", 13, 152, 186),
109    ("blue_munsell", 0, 147, 175),
110    ("blue_ncs", 0, 135, 189),
111    ("blue_pigment", 51, 51, 153),
112    ("blue_ryb", 2, 71, 254),
113    ("blue_sapphire", 18, 97, 128),
114    ("blue_violet", 138, 43, 226),
115    ("blush", 222, 93, 131),
116    ("bole", 121, 68, 59),
117    ("bondi_blue", 0, 149, 182),
118    ("bone", 227, 218, 201),
119    ("boston_university_red", 204, 0, 0),
120    ("bottle_green", 0, 106, 78),
121    ("boysenberry", 135, 50, 96),
122    ("brandeis_blue", 0, 112, 255),
123    ("brass", 181, 166, 66),
124    ("brick_red", 203, 65, 84),
125    ("bright_cerulean", 29, 172, 214),
126    ("bright_green", 102, 255, 0),
127    ("bright_lavender", 191, 148, 228),
128    ("bright_maroon", 195, 33, 72),
129    ("bright_pink", 255, 0, 127),
130    ("bright_turquoise", 8, 232, 222),
131    ("bright_ube", 209, 159, 232),
132    ("brilliant_lavender", 244, 187, 255),
133    ("brilliant_rose", 255, 85, 163),
134    ("brink_pink", 251, 96, 127),
135    ("british_racing_green", 0, 66, 37),
136    ("bronze", 205, 127, 50),
137    ("brown_traditional", 150, 75, 0),
138    ("brown_web", 165, 42, 42),
139    ("bubble_gum", 255, 193, 204),
140    ("bubbles", 231, 254, 255),
141    ("buff", 240, 220, 130),
142    ("bulgarian_rose", 72, 6, 7),
143    ("burgundy", 128, 0, 32),
144    ("burlywood", 222, 184, 135),
145    ("burnt_orange", 204, 85, 0),
146    ("burnt_sienna", 233, 116, 81),
147    ("burnt_umber", 138, 51, 36),
148    ("byzantine", 189, 51, 164),
149    ("byzantium", 112, 41, 99),
150    ("cadet", 83, 104, 114),
151    ("cadet_blue", 95, 158, 160),
152    ("cadet_grey", 145, 163, 176),
153    ("cadmium_green", 0, 107, 60),
154    ("cadmium_orange", 237, 135, 45),
155    ("cadmium_red", 227, 0, 34),
156    ("cadmium_yellow", 255, 246, 0),
157    ("cafe_au_lait", 166, 123, 91),
158    ("cafe_noir", 75, 54, 33),
159    ("cal_poly_green", 30, 77, 43),
160    ("cambridge_blue", 163, 193, 173),
161    ("camel", 193, 154, 107),
162    ("cameo_pink", 239, 187, 204),
163    ("camouflage_green", 120, 134, 107),
164    ("canary_yellow", 255, 239, 0),
165    ("candy_apple_red", 255, 8, 0),
166    ("candy_pink", 228, 113, 122),
167    ("capri", 0, 191, 255),
168    ("caput_mortuum", 89, 39, 32),
169    ("cardinal", 196, 30, 58),
170    ("caribbean_green", 0, 204, 153),
171    ("carmine", 150, 0, 24),
172    ("carmine_m_p", 215, 0, 64),
173    ("carmine_pink", 235, 76, 66),
174    ("carmine_red", 255, 0, 56),
175    ("carnation_pink", 255, 166, 201),
176    ("carnelian", 179, 27, 27),
177    ("carolina_blue", 153, 186, 221),
178    ("carrot_orange", 237, 145, 33),
179    ("catalina_blue", 6, 42, 120),
180    ("ceil", 146, 161, 207),
181    ("celadon", 172, 225, 175),
182    ("celadon_blue", 0, 123, 167),
183    ("celadon_green", 47, 132, 124),
184    ("celeste_colour", 178, 255, 255),
185    ("celestial_blue", 73, 151, 208),
186    ("cerise", 222, 49, 99),
187    ("cerise_pink", 236, 59, 131),
188    ("cerulean", 0, 123, 167),
189    ("cerulean_blue", 42, 82, 190),
190    ("cerulean_frost", 109, 155, 195),
191    ("cg_blue", 0, 122, 165),
192    ("cg_red", 224, 60, 49),
193    ("chamoisee", 160, 120, 90),
194    ("champagne", 250, 214, 165),
195    ("charcoal", 54, 69, 79),
196    ("charm_pink", 230, 143, 172),
197    ("chartreuse_traditional", 223, 255, 0),
198    ("chartreuse_web", 127, 255, 0),
199    ("cherry", 222, 49, 99),
200    ("cherry_blossom_pink", 255, 183, 197),
201    ("chestnut", 205, 92, 92),
202    ("china_pink", 222, 111, 161),
203    ("china_rose", 168, 81, 110),
204    ("chinese_red", 170, 56, 30),
205    ("chocolate_traditional", 123, 63, 0),
206    ("chocolate_web", 210, 105, 30),
207    ("chrome_yellow", 255, 167, 0),
208    ("cinereous", 152, 129, 123),
209    ("cinnabar", 227, 66, 52),
210    ("cinnamon", 210, 105, 30),
211    ("citrine", 228, 208, 10),
212    ("classic_rose", 251, 204, 231),
213    ("cobalt", 0, 71, 171),
214    ("cocoa_brown", 210, 105, 30),
215    ("coffee", 111, 78, 55),
216    ("columbia_blue", 155, 221, 255),
217    ("congo_pink", 248, 131, 121),
218    ("cool_black", 0, 46, 99),
219    ("cool_grey", 140, 146, 172),
220    ("copper", 184, 115, 51),
221    ("copper_crayola", 218, 138, 103),
222    ("copper_penny", 173, 111, 105),
223    ("copper_red", 203, 109, 81),
224    ("copper_rose", 153, 102, 102),
225    ("coquelicot", 255, 56, 0),
226    ("coral", 255, 127, 80),
227    ("coral_pink", 248, 131, 121),
228    ("coral_red", 255, 64, 64),
229    ("cordovan", 137, 63, 69),
230    ("corn", 251, 236, 93),
231    ("cornell_red", 179, 27, 27),
232    ("cornflower_blue", 100, 149, 237),
233    ("cornsilk", 255, 248, 220),
234    ("cosmic_latte", 255, 248, 231),
235    ("cotton_candy", 255, 188, 217),
236    ("cream", 255, 253, 208),
237    ("crimson", 220, 20, 60),
238    ("crimson_glory", 190, 0, 50),
239    ("cyan", 0, 255, 255),
240    ("cyan_process", 0, 183, 235),
241    ("daffodil", 255, 255, 49),
242    ("dandelion", 240, 225, 48),
243    ("dark_blue", 0, 0, 139),
244    ("dark_brown", 101, 67, 33),
245    ("dark_byzantium", 93, 57, 84),
246    ("dark_candy_apple_red", 164, 0, 0),
247    ("dark_cerulean", 8, 69, 126),
248    ("dark_chestnut", 152, 105, 96),
249    ("dark_coral", 205, 91, 69),
250    ("dark_cyan", 0, 139, 139),
251    ("dark_electric_blue", 83, 104, 120),
252    ("dark_goldenrod", 184, 134, 11),
253    ("dark_gray", 169, 169, 169),
254    ("dark_green", 1, 50, 32),
255    ("dark_imperial_blue", 0, 65, 106),
256    ("dark_jungle_green", 26, 36, 33),
257    ("dark_khaki", 189, 183, 107),
258    ("dark_lava", 72, 60, 50),
259    ("dark_lavender", 115, 79, 150),
260    ("dark_magenta", 139, 0, 139),
261    ("dark_midnight_blue", 0, 51, 102),
262    ("dark_olive_green", 85, 107, 47),
263    ("dark_orange", 255, 140, 0),
264    ("dark_orchid", 153, 50, 204),
265    ("dark_pastel_blue", 119, 158, 203),
266    ("dark_pastel_green", 3, 192, 60),
267    ("dark_pastel_purple", 150, 111, 214),
268    ("dark_pastel_red", 194, 59, 34),
269    ("dark_pink", 231, 84, 128),
270    ("dark_powder_blue", 0, 51, 153),
271    ("dark_raspberry", 135, 38, 87),
272    ("dark_red", 139, 0, 0),
273    ("dark_salmon", 233, 150, 122),
274    ("dark_scarlet", 86, 3, 25),
275    ("dark_sea_green", 143, 188, 143),
276    ("dark_sienna", 60, 20, 20),
277    ("dark_slate_blue", 72, 61, 139),
278    ("dark_slate_gray", 47, 79, 79),
279    ("dark_spring_green", 23, 114, 69),
280    ("dark_tan", 145, 129, 81),
281    ("dark_tangerine", 255, 168, 18),
282    ("dark_taupe", 72, 60, 50),
283    ("dark_terracotta", 204, 78, 92),
284    ("dark_turquoise", 0, 206, 209),
285    ("dark_violet", 148, 0, 211),
286    ("dark_yellow", 155, 135, 12),
287    ("dartmouth_green", 0, 112, 60),
288    ("davy_s_grey", 85, 85, 85),
289    ("debian_red", 215, 10, 83),
290    ("deep_carmine", 169, 32, 62),
291    ("deep_carmine_pink", 239, 48, 56),
292    ("deep_carrot_orange", 233, 105, 44),
293    ("deep_cerise", 218, 50, 135),
294    ("deep_champagne", 250, 214, 165),
295    ("deep_chestnut", 185, 78, 72),
296    ("deep_coffee", 112, 66, 65),
297    ("deep_fuchsia", 193, 84, 193),
298    ("deep_jungle_green", 0, 75, 73),
299    ("deep_lilac", 153, 85, 187),
300    ("deep_magenta", 204, 0, 204),
301    ("deep_peach", 255, 203, 164),
302    ("deep_pink", 255, 20, 147),
303    ("deep_ruby", 132, 63, 91),
304    ("deep_saffron", 255, 153, 51),
305    ("deep_sky_blue", 0, 191, 255),
306    ("deep_tuscan_red", 102, 66, 77),
307    ("denim", 21, 96, 189),
308    ("desert", 193, 154, 107),
309    ("desert_sand", 237, 201, 175),
310    ("dim_gray", 105, 105, 105),
311    ("dodger_blue", 30, 144, 255),
312    ("dogwood_rose", 215, 24, 104),
313    ("dollar_bill", 133, 187, 101),
314    ("drab", 150, 113, 23),
315    ("duke_blue", 0, 0, 156),
316    ("earth_yellow", 225, 169, 95),
317    ("ebony", 85, 93, 80),
318    ("ecru", 194, 178, 128),
319    ("eggplant", 97, 64, 81),
320    ("eggshell", 240, 234, 214),
321    ("egyptian_blue", 16, 52, 166),
322    ("electric_blue", 125, 249, 255),
323    ("electric_crimson", 255, 0, 63),
324    ("electric_cyan", 0, 255, 255),
325    ("electric_green", 0, 255, 0),
326    ("electric_indigo", 111, 0, 255),
327    ("electric_lavender", 244, 187, 255),
328    ("electric_lime", 204, 255, 0),
329    ("electric_purple", 191, 0, 255),
330    ("electric_ultramarine", 63, 0, 255),
331    ("electric_violet", 143, 0, 255),
332    ("electric_yellow", 255, 255, 0),
333    ("emerald", 80, 200, 120),
334    ("english_lavender", 180, 131, 149),
335    ("eton_blue", 150, 200, 162),
336    ("fallow", 193, 154, 107),
337    ("falu_red", 128, 24, 24),
338    ("fandango", 181, 51, 137),
339    ("fashion_fuchsia", 244, 0, 161),
340    ("fawn", 229, 170, 112),
341    ("feldgrau", 77, 93, 83),
342    ("fern_green", 79, 121, 66),
343    ("ferrari_red", 255, 40, 0),
344    ("field_drab", 108, 84, 30),
345    ("fire_engine_red", 206, 32, 41),
346    ("firebrick", 178, 34, 34),
347    ("flame", 226, 88, 34),
348    ("flamingo_pink", 252, 142, 172),
349    ("flavescent", 247, 233, 142),
350    ("flax", 238, 220, 130),
351    ("floral_white", 255, 250, 240),
352    ("fluorescent_orange", 255, 191, 0),
353    ("fluorescent_pink", 255, 20, 147),
354    ("fluorescent_yellow", 204, 255, 0),
355    ("folly", 255, 0, 79),
356    ("forest_green_traditional", 1, 68, 33),
357    ("forest_green_web", 34, 139, 34),
358    ("french_beige", 166, 123, 91),
359    ("french_blue", 0, 114, 187),
360    ("french_lilac", 134, 96, 142),
361    ("french_lime", 204, 255, 0),
362    ("french_raspberry", 199, 44, 72),
363    ("french_rose", 246, 74, 138),
364    ("fuchsia", 255, 0, 255),
365    ("fuchsia_crayola", 193, 84, 193),
366    ("fuchsia_pink", 255, 119, 255),
367    ("fuchsia_rose", 199, 67, 117),
368    ("fulvous", 228, 132, 0),
369    ("futurama_deep_space_blue", 64, 3, 192),
370    ("fuzzy_wuzzy", 204, 102, 102),
371    ("gainsboro", 220, 220, 220),
372    ("gamboge", 228, 155, 15),
373    ("ghost_white", 248, 248, 255),
374    ("ginger", 176, 101, 0),
375    ("glaucous", 96, 130, 182),
376    ("glitter", 230, 232, 250),
377    ("gold_metallic", 212, 175, 55),
378    ("gold_web_golden", 255, 215, 0),
379    ("golden_brown", 153, 101, 21),
380    ("golden_poppy", 252, 194, 0),
381    ("golden_yellow", 255, 223, 0),
382    ("goldenrod", 218, 165, 32),
383    ("granny_smith_apple", 168, 228, 160),
384    ("gray", 128, 128, 128),
385    ("gray_asparagus", 70, 89, 69),
386    ("gray_html_css_gray", 128, 128, 128),
387    ("gray_x11_gray", 190, 190, 190),
388    ("green_color_wheel_x11_green", 0, 255, 0),
389    ("green_crayola", 28, 172, 120),
390    ("green_html_css_green", 0, 128, 0),
391    ("green_munsell", 0, 168, 119),
392    ("green_ncs", 0, 159, 107),
393    ("green_pigment", 0, 165, 80),
394    ("green_ryb", 102, 176, 50),
395    ("green_yellow", 173, 255, 47),
396    ("grullo", 169, 154, 134),
397    ("guppie_green", 0, 255, 127),
398    ("halayaube", 102, 56, 84),
399    ("han_blue", 68, 108, 207),
400    ("han_purple", 82, 24, 250),
401    ("hansa_yellow", 233, 214, 107),
402    ("harlequin", 63, 255, 0),
403    ("harvard_crimson", 201, 0, 22),
404    ("harvest_gold", 218, 145, 0),
405    ("heart_gold", 128, 128, 0),
406    ("heliotrope", 223, 115, 255),
407    ("hollywood_cerise", 244, 0, 161),
408    ("honeydew", 240, 255, 240),
409    ("honolulu_blue", 0, 127, 191),
410    ("hooker_s_green", 73, 121, 107),
411    ("hot_magenta", 255, 29, 206),
412    ("hot_pink", 255, 105, 180),
413    ("hunter_green", 53, 94, 59),
414    ("iceberg", 113, 166, 210),
415    ("icterine", 252, 247, 94),
416    ("imperial_blue", 0, 35, 149),
417    ("inchworm", 178, 236, 93),
418    ("india_green", 19, 136, 8),
419    ("indian_red", 205, 92, 92),
420    ("indian_yellow", 227, 168, 87),
421    ("indigo", 111, 0, 255),
422    ("indigo_dye", 0, 65, 106),
423    ("indigo_web", 75, 0, 130),
424    ("international_klein_blue", 0, 47, 167),
425    ("international_orange_aerospace", 255, 79, 0),
426    ("international_orange_engineering", 186, 22, 12),
427    ("international_orange_goldengatebridge", 192, 54, 44),
428    ("iris", 90, 79, 207),
429    ("isabelline", 244, 240, 236),
430    ("islamic_green", 0, 144, 0),
431    ("ivory", 255, 255, 240),
432    ("jade", 0, 168, 107),
433    ("jasmine", 248, 222, 126),
434    ("jasper", 215, 59, 62),
435    ("jazzberry_jam", 165, 11, 94),
436    ("jet", 52, 52, 52),
437    ("jonquil", 250, 218, 94),
438    ("june_bud", 189, 218, 87),
439    ("jungle_green", 41, 171, 135),
440    ("kelly_green", 76, 187, 23),
441    ("kenyan_copper", 124, 28, 5),
442    ("khaki_html_css_khaki", 195, 176, 145),
443    ("khaki_x11_lightkhaki", 240, 230, 140),
444    ("ku_crimson", 232, 0, 13),
445    ("la_salle_green", 8, 120, 48),
446    ("languid_lavender", 214, 202, 221),
447    ("lapis_lazuli", 38, 97, 156),
448    ("laser_lemon", 254, 254, 34),
449    ("laurel_green", 169, 186, 157),
450    ("lava", 207, 16, 32),
451    ("lavender_blue", 204, 204, 255),
452    ("lavender_blush", 255, 240, 245),
453    ("lavender_floral", 181, 126, 220),
454    ("lavender_gray", 196, 195, 208),
455    ("lavender_indigo", 148, 87, 235),
456    ("lavender_magenta", 238, 130, 238),
457    ("lavender_mist", 230, 230, 250),
458    ("lavender_pink", 251, 174, 210),
459    ("lavender_purple", 150, 123, 182),
460    ("lavender_rose", 251, 160, 227),
461    ("lavender_web", 230, 230, 250),
462    ("lawn_green", 124, 252, 0),
463    ("lemon", 255, 247, 0),
464    ("lemon_chiffon", 255, 250, 205),
465    ("lemon_lime", 227, 255, 0),
466    ("licorice", 26, 17, 16),
467    ("light_apricot", 253, 213, 177),
468    ("light_blue", 173, 216, 230),
469    ("light_brown", 181, 101, 29),
470    ("light_carmine_pink", 230, 103, 113),
471    ("light_coral", 240, 128, 128),
472    ("light_cornflower_blue", 147, 204, 234),
473    ("light_crimson", 245, 105, 145),
474    ("light_cyan", 224, 255, 255),
475    ("light_fuchsia_pink", 249, 132, 239),
476    ("light_goldenrod_yellow", 250, 250, 210),
477    ("light_gray", 211, 211, 211),
478    ("light_green", 144, 238, 144),
479    ("light_khaki", 240, 230, 140),
480    ("light_pastel_purple", 177, 156, 217),
481    ("light_pink", 255, 182, 193),
482    ("light_red_ochre", 233, 116, 81),
483    ("light_salmon", 255, 160, 122),
484    ("light_salmon_pink", 255, 153, 153),
485    ("light_sea_green", 32, 178, 170),
486    ("light_sky_blue", 135, 206, 250),
487    ("light_slate_gray", 119, 136, 153),
488    ("light_taupe", 179, 139, 109),
489    ("light_thulian_pink", 230, 143, 172),
490    ("light_yellow", 255, 255, 224),
491    ("lilac", 200, 162, 200),
492    ("lime_color_wheel", 191, 255, 0),
493    ("lime_green", 50, 205, 50),
494    ("lime_web_x11green", 0, 255, 0),
495    ("limerick", 157, 194, 9),
496    ("lincoln_green", 25, 89, 5),
497    ("linen", 250, 240, 230),
498    ("lion", 193, 154, 107),
499    ("little_boy_blue", 108, 160, 220),
500    ("liver", 83, 75, 79),
501    ("lust", 230, 32, 32),
502    ("magenta", 255, 0, 255),
503    ("magenta_dye", 202, 31, 123),
504    ("magenta_process", 255, 0, 144),
505    ("magic_mint", 170, 240, 209),
506    ("magnolia", 248, 244, 255),
507    ("mahogany", 192, 64, 0),
508    ("maize", 251, 236, 93),
509    ("majorelle_blue", 96, 80, 220),
510    ("malachite", 11, 218, 81),
511    ("manatee", 151, 154, 170),
512    ("mango_tango", 255, 130, 67),
513    ("mantis", 116, 195, 101),
514    ("mardi_gras", 136, 0, 133),
515    ("maroon_crayola", 195, 33, 72),
516    ("maroon_html_css", 128, 0, 0),
517    ("maroon_x11", 176, 48, 96),
518    ("mauve", 224, 176, 255),
519    ("mauve_taupe", 145, 95, 109),
520    ("mauvelous", 239, 152, 170),
521    ("maya_blue", 115, 194, 251),
522    ("meat_brown", 229, 183, 59),
523    ("medium_aquamarine", 102, 221, 170),
524    ("medium_blue", 0, 0, 205),
525    ("medium_candy_apple_red", 226, 6, 44),
526    ("medium_carmine", 175, 64, 53),
527    ("medium_champagne", 243, 229, 171),
528    ("medium_electric_blue", 3, 80, 150),
529    ("medium_jungle_green", 28, 53, 45),
530    ("medium_lavender_magenta", 221, 160, 221),
531    ("medium_orchid", 186, 85, 211),
532    ("medium_persian_blue", 0, 103, 165),
533    ("medium_purple", 147, 112, 219),
534    ("medium_red_violet", 187, 51, 133),
535    ("medium_ruby", 170, 64, 105),
536    ("medium_sea_green", 60, 179, 113),
537    ("medium_slate_blue", 123, 104, 238),
538    ("medium_spring_bud", 201, 220, 135),
539    ("medium_spring_green", 0, 250, 154),
540    ("medium_taupe", 103, 76, 71),
541    ("medium_turquoise", 72, 209, 204),
542    ("medium_tuscan_red", 121, 68, 59),
543    ("medium_vermilion", 217, 96, 59),
544    ("medium_violet_red", 199, 21, 133),
545    ("mellow_apricot", 248, 184, 120),
546    ("mellow_yellow", 248, 222, 126),
547    ("melon", 253, 188, 180),
548    ("midnight_blue", 25, 25, 112),
549    ("midnight_green_eagle_green", 0, 73, 83),
550    ("mikado_yellow", 255, 196, 12),
551    ("mint", 62, 180, 137),
552    ("mint_cream", 245, 255, 250),
553    ("mint_green", 152, 255, 152),
554    ("misty_rose", 255, 228, 225),
555    ("moccasin", 250, 235, 215),
556    ("mode_beige", 150, 113, 23),
557    ("moonstone_blue", 115, 169, 194),
558    ("mordant_red_19", 174, 12, 0),
559    ("moss_green", 173, 223, 173),
560    ("mountain_meadow", 48, 186, 143),
561    ("mountbatten_pink", 153, 122, 141),
562    ("msu_green", 24, 69, 59),
563    ("mulberry", 197, 75, 140),
564    ("mustard", 255, 219, 88),
565    ("myrtle", 33, 66, 30),
566    ("nadeshiko_pink", 246, 173, 198),
567    ("napier_green", 42, 128, 0),
568    ("naples_yellow", 250, 218, 94),
569    ("navajo_white", 255, 222, 173),
570    ("navy_blue", 0, 0, 128),
571    ("neon_carrot", 255, 163, 67),
572    ("neon_fuchsia", 254, 65, 100),
573    ("neon_green", 57, 255, 20),
574    ("new_york_pink", 215, 131, 127),
575    ("non_photo_blue", 164, 221, 237),
576    ("north_texas_green", 5, 144, 51),
577    ("ocean_boat_blue", 0, 119, 190),
578    ("ochre", 204, 119, 34),
579    ("office_green", 0, 128, 0),
580    ("old_gold", 207, 181, 59),
581    ("old_lace", 253, 245, 230),
582    ("old_lavender", 121, 104, 120),
583    ("old_mauve", 103, 49, 71),
584    ("old_rose", 192, 128, 129),
585    ("olive", 128, 128, 0),
586    ("olive_drab_7", 60, 52, 31),
587    ("olive_drab_web_olive_drab_3", 107, 142, 35),
588    ("olivine", 154, 185, 115),
589    ("onyx", 53, 56, 57),
590    ("opera_mauve", 183, 132, 167),
591    ("orange_color_wheel", 255, 127, 0),
592    ("orange_peel", 255, 159, 0),
593    ("orange_red", 255, 69, 0),
594    ("orange_ryb", 251, 153, 2),
595    ("orange_web_color", 255, 165, 0),
596    ("orchid", 218, 112, 214),
597    ("otter_brown", 101, 67, 33),
598    ("ou_crimson_red", 153, 0, 0),
599    ("outer_space", 65, 74, 76),
600    ("outrageous_orange", 255, 110, 74),
601    ("oxford_blue", 0, 33, 71),
602    ("pakistan_green", 0, 102, 0),
603    ("palatinate_blue", 39, 59, 226),
604    ("palatinate_purple", 104, 40, 96),
605    ("pale_aqua", 188, 212, 230),
606    ("pale_blue", 175, 238, 238),
607    ("pale_brown", 152, 118, 84),
608    ("pale_carmine", 175, 64, 53),
609    ("pale_cerulean", 155, 196, 226),
610    ("pale_chestnut", 221, 173, 175),
611    ("pale_copper", 218, 138, 103),
612    ("pale_cornflower_blue", 171, 205, 239),
613    ("pale_gold", 230, 190, 138),
614    ("pale_goldenrod", 238, 232, 170),
615    ("pale_green", 152, 251, 152),
616    ("pale_lavender", 220, 208, 255),
617    ("pale_magenta", 249, 132, 229),
618    ("pale_pink", 250, 218, 221),
619    ("pale_plum", 221, 160, 221),
620    ("pale_red_violet", 219, 112, 147),
621    ("pale_robin_egg_blue", 150, 222, 209),
622    ("pale_silver", 201, 192, 187),
623    ("pale_spring_bud", 236, 235, 189),
624    ("pale_taupe", 188, 152, 126),
625    ("pale_violet_red", 219, 112, 147),
626    ("pansy_purple", 120, 24, 74),
627    ("papaya_whip", 255, 239, 213),
628    ("paris_green", 80, 200, 120),
629    ("pastel_blue", 174, 198, 207),
630    ("pastel_brown", 131, 105, 83),
631    ("pastel_gray", 207, 207, 196),
632    ("pastel_green", 119, 221, 119),
633    ("pastel_magenta", 244, 154, 194),
634    ("pastel_orange", 255, 179, 71),
635    ("pastel_pink", 222, 165, 164),
636    ("pastel_purple", 179, 158, 181),
637    ("pastel_red", 255, 105, 97),
638    ("pastel_violet", 203, 153, 201),
639    ("pastel_yellow", 253, 253, 150),
640    ("patriarch", 128, 0, 128),
641    ("payne_s_grey", 83, 104, 120),
642    ("peach", 255, 229, 180),
643    ("peach_crayola", 255, 203, 164),
644    ("peach_orange", 255, 204, 153),
645    ("peach_puff", 255, 218, 185),
646    ("peach_yellow", 250, 223, 173),
647    ("pear", 209, 226, 49),
648    ("pearl", 234, 224, 200),
649    ("pearl_aqua", 136, 216, 192),
650    ("pearly_purple", 183, 104, 162),
651    ("peridot", 230, 226, 0),
652    ("periwinkle", 204, 204, 255),
653    ("persian_blue", 28, 57, 187),
654    ("persian_green", 0, 166, 147),
655    ("persian_indigo", 50, 18, 122),
656    ("persian_orange", 217, 144, 88),
657    ("persian_pink", 247, 127, 190),
658    ("persian_plum", 112, 28, 28),
659    ("persian_red", 204, 51, 51),
660    ("persian_rose", 254, 40, 162),
661    ("persimmon", 236, 88, 0),
662    ("peru", 205, 133, 63),
663    ("phlox", 223, 0, 255),
664    ("phthalo_blue", 0, 15, 137),
665    ("phthalo_green", 18, 53, 36),
666    ("piggy_pink", 253, 221, 230),
667    ("pine_green", 1, 121, 111),
668    ("pink", 255, 192, 203),
669    ("pink_lace", 255, 221, 244),
670    ("pink_orange", 255, 153, 102),
671    ("pink_pearl", 231, 172, 207),
672    ("pink_sherbet", 247, 143, 167),
673    ("pistachio", 147, 197, 114),
674    ("platinum", 229, 228, 226),
675    ("plum_traditional", 142, 69, 133),
676    ("plum_web", 221, 160, 221),
677    ("portland_orange", 255, 90, 54),
678    ("powder_blue_web", 176, 224, 230),
679    ("princeton_orange", 255, 143, 0),
680    ("prune", 112, 28, 28),
681    ("prussian_blue", 0, 49, 83),
682    ("psychedelic_purple", 223, 0, 255),
683    ("puce", 204, 136, 153),
684    ("pumpkin", 255, 117, 24),
685    ("purple_heart", 105, 53, 156),
686    ("purple_html_css", 128, 0, 128),
687    ("purple_mountain_majesty", 150, 120, 182),
688    ("purple_munsell", 159, 0, 197),
689    ("purple_pizzazz", 254, 78, 218),
690    ("purple_taupe", 80, 64, 77),
691    ("purple_x11", 160, 32, 240),
692    ("quartz", 81, 72, 79),
693    ("rackley", 93, 138, 168),
694    ("radical_red", 255, 53, 94),
695    ("rajah", 251, 171, 96),
696    ("raspberry", 227, 11, 93),
697    ("raspberry_glace", 145, 95, 109),
698    ("raspberry_pink", 226, 80, 152),
699    ("raspberry_rose", 179, 68, 108),
700    ("raw_umber", 130, 102, 68),
701    ("razzle_dazzle_rose", 255, 51, 204),
702    ("razzmatazz", 227, 37, 107),
703    ("red", 255, 0, 0),
704    ("red_brown", 165, 42, 42),
705    ("red_devil", 134, 1, 17),
706    ("red_munsell", 242, 0, 60),
707    ("red_ncs", 196, 2, 51),
708    ("red_orange", 255, 83, 73),
709    ("red_pigment", 237, 28, 36),
710    ("red_ryb", 254, 39, 18),
711    ("red_violet", 199, 21, 133),
712    ("redwood", 171, 78, 82),
713    ("regalia", 82, 45, 128),
714    ("resolution_blue", 0, 35, 135),
715    ("rich_black", 0, 64, 64),
716    ("rich_brilliant_lavender", 241, 167, 254),
717    ("rich_carmine", 215, 0, 64),
718    ("rich_electric_blue", 8, 146, 208),
719    ("rich_lavender", 167, 107, 207),
720    ("rich_lilac", 182, 102, 210),
721    ("rich_maroon", 176, 48, 96),
722    ("rifle_green", 65, 72, 51),
723    ("robin_egg_blue", 0, 204, 204),
724    ("rose", 255, 0, 127),
725    ("rose_bonbon", 249, 66, 158),
726    ("rose_ebony", 103, 72, 70),
727    ("rose_gold", 183, 110, 121),
728    ("rose_madder", 227, 38, 54),
729    ("rose_pink", 255, 102, 204),
730    ("rose_quartz", 170, 152, 169),
731    ("rose_taupe", 144, 93, 93),
732    ("rose_vale", 171, 78, 82),
733    ("rosewood", 101, 0, 11),
734    ("rosso_corsa", 212, 0, 0),
735    ("rosy_brown", 188, 143, 143),
736    ("royal_azure", 0, 56, 168),
737    ("royal_blue_traditional", 0, 35, 102),
738    ("royal_blue_web", 65, 105, 225),
739    ("royal_fuchsia", 202, 44, 146),
740    ("royal_purple", 120, 81, 169),
741    ("royal_yellow", 250, 218, 94),
742    ("rubine_red", 209, 0, 86),
743    ("ruby", 224, 17, 95),
744    ("ruby_red", 155, 17, 30),
745    ("ruddy", 255, 0, 40),
746    ("ruddy_brown", 187, 101, 40),
747    ("ruddy_pink", 225, 142, 150),
748    ("rufous", 168, 28, 7),
749    ("russet", 128, 70, 27),
750    ("rust", 183, 65, 14),
751    ("rusty_red", 218, 44, 67),
752    ("sacramento_state_green", 0, 86, 63),
753    ("saddle_brown", 139, 69, 19),
754    ("safety_orange_blaze_orange", 255, 103, 0),
755    ("saffron", 244, 196, 48),
756    ("salmon", 255, 140, 105),
757    ("salmon_pink", 255, 145, 164),
758    ("sand", 194, 178, 128),
759    ("sand_dune", 150, 113, 23),
760    ("sandstorm", 236, 213, 64),
761    ("sandy_brown", 244, 164, 96),
762    ("sandy_taupe", 150, 113, 23),
763    ("sangria", 146, 0, 10),
764    ("sap_green", 80, 125, 42),
765    ("sapphire", 15, 82, 186),
766    ("sapphire_blue", 0, 103, 165),
767    ("satin_sheen_gold", 203, 161, 53),
768    ("scarlet", 255, 36, 0),
769    ("scarlet_crayola", 253, 14, 53),
770    ("school_bus_yellow", 255, 216, 0),
771    ("screamin_green", 118, 255, 122),
772    ("sea_blue", 0, 105, 148),
773    ("sea_green", 46, 139, 87),
774    ("seal_brown", 50, 20, 20),
775    ("seashell", 255, 245, 238),
776    ("selective_yellow", 255, 186, 0),
777    ("sepia", 112, 66, 20),
778    ("shadow", 138, 121, 93),
779    ("shamrock_green", 0, 158, 96),
780    ("shocking_pink", 252, 15, 192),
781    ("shocking_pink_crayola", 255, 111, 255),
782    ("sienna", 136, 45, 23),
783    ("silver", 192, 192, 192),
784    ("sinopia", 203, 65, 11),
785    ("skobeloff", 0, 116, 116),
786    ("sky_blue", 135, 206, 235),
787    ("sky_magenta", 207, 113, 175),
788    ("slate_blue", 106, 90, 205),
789    ("slate_gray", 112, 128, 144),
790    ("smalt_dark_powder_blue", 0, 51, 153),
791    ("smokey_topaz", 147, 61, 65),
792    ("smoky_black", 16, 12, 8),
793    ("snow", 255, 250, 250),
794    ("spiro_disco_ball", 15, 192, 252),
795    ("spring_bud", 167, 252, 0),
796    ("spring_green", 0, 255, 127),
797    ("st_patrick_s_blue", 35, 41, 122),
798    ("steel_blue", 70, 130, 180),
799    ("stil_de_grain_yellow", 250, 218, 94),
800    ("stizza", 153, 0, 0),
801    ("stormcloud", 79, 102, 106),
802    ("straw", 228, 217, 111),
803    ("sunglow", 255, 204, 51),
804    ("sunset", 250, 214, 165),
805    ("tan", 210, 180, 140),
806    ("tangelo", 249, 77, 0),
807    ("tangerine", 242, 133, 0),
808    ("tangerine_yellow", 255, 204, 0),
809    ("tango_pink", 228, 113, 122),
810    ("taupe", 72, 60, 50),
811    ("taupe_gray", 139, 133, 137),
812    ("tea_green", 208, 240, 192),
813    ("tea_rose_orange", 248, 131, 121),
814    ("tea_rose_rose", 244, 194, 194),
815    ("teal", 0, 128, 128),
816    ("teal_blue", 54, 117, 136),
817    ("teal_green", 0, 130, 127),
818    ("telemagenta", 207, 52, 118),
819    ("tenné_tawny", 205, 87, 0),
820    ("terra_cotta", 226, 114, 91),
821    ("thistle", 216, 191, 216),
822    ("thulian_pink", 222, 111, 161),
823    ("tickle_me_pink", 252, 137, 172),
824    ("tiffany_blue", 10, 186, 181),
825    ("tiger_s_eye", 224, 141, 60),
826    ("timberwolf", 219, 215, 210),
827    ("titanium_yellow", 238, 230, 0),
828    ("tomato", 255, 99, 71),
829    ("toolbox", 116, 108, 192),
830    ("topaz", 255, 200, 124),
831    ("tractor_red", 253, 14, 53),
832    ("trolley_grey", 128, 128, 128),
833    ("tropical_rain_forest", 0, 117, 94),
834    ("true_blue", 0, 115, 207),
835    ("tufts_blue", 65, 125, 193),
836    ("tumbleweed", 222, 170, 136),
837    ("turkish_rose", 181, 114, 129),
838    ("turquoise", 48, 213, 200),
839    ("turquoise_blue", 0, 255, 239),
840    ("turquoise_green", 160, 214, 180),
841    ("tuscan_red", 124, 72, 72),
842    ("twilight_lavender", 138, 73, 107),
843    ("tyrian_purple", 102, 2, 60),
844    ("ua_blue", 0, 51, 170),
845    ("ua_red", 217, 0, 76),
846    ("ube", 136, 120, 195),
847    ("ucla_blue", 83, 104, 149),
848    ("ucla_gold", 255, 179, 0),
849    ("ufo_green", 60, 208, 112),
850    ("ultra_pink", 255, 111, 255),
851    ("ultramarine", 18, 10, 143),
852    ("ultramarine_blue", 65, 102, 245),
853    ("umber", 99, 81, 71),
854    ("unbleached_silk", 255, 221, 202),
855    ("united_nations_blue", 91, 146, 229),
856    ("university_of_california_gold", 183, 135, 39),
857    ("unmellow_yellow", 255, 255, 102),
858    ("up_forest_green", 1, 68, 33),
859    ("up_maroon", 123, 17, 19),
860    ("upsdell_red", 174, 32, 41),
861    ("urobilin", 225, 173, 33),
862    ("usafa_blue", 0, 79, 152),
863    ("usc_cardinal", 153, 0, 0),
864    ("usc_gold", 255, 204, 0),
865    ("utah_crimson", 211, 0, 63),
866    ("vanilla", 243, 229, 171),
867    ("vegas_gold", 197, 179, 88),
868    ("venetian_red", 200, 8, 21),
869    ("verdigris", 67, 179, 174),
870    ("vermilion_cinnabar", 227, 66, 52),
871    ("vermilion_plochere", 217, 96, 59),
872    ("veronica", 160, 32, 240),
873    ("violet", 143, 0, 255),
874    ("violet_blue", 50, 74, 178),
875    ("violet_color_wheel", 127, 0, 255),
876    ("violet_ryb", 134, 1, 175),
877    ("violet_web", 238, 130, 238),
878    ("viridian", 64, 130, 109),
879    ("vivid_auburn", 146, 39, 36),
880    ("vivid_burgundy", 159, 29, 53),
881    ("vivid_cerise", 218, 29, 129),
882    ("vivid_tangerine", 255, 160, 137),
883    ("vivid_violet", 159, 0, 255),
884    ("warm_black", 0, 66, 66),
885    ("waterspout", 164, 244, 249),
886    ("wenge", 100, 84, 82),
887    ("wheat", 245, 222, 179),
888    ("white", 255, 255, 255),
889    ("white_smoke", 245, 245, 245),
890    ("wild_blue_yonder", 162, 173, 208),
891    ("wild_strawberry", 255, 67, 164),
892    ("wild_watermelon", 252, 108, 133),
893    ("wine", 114, 47, 55),
894    ("wine_dregs", 103, 49, 71),
895    ("wisteria", 201, 160, 220),
896    ("wood_brown", 193, 154, 107),
897    ("xanadu", 115, 134, 120),
898    ("yale_blue", 15, 77, 146),
899    ("yellow", 255, 255, 0),
900    ("yellow_green", 154, 205, 50),
901    ("yellow_munsell", 239, 204, 0),
902    ("yellow_ncs", 255, 211, 0),
903    ("yellow_orange", 255, 174, 66),
904    ("yellow_process", 255, 239, 0),
905    ("yellow_ryb", 254, 254, 51),
906    ("zaffre", 0, 20, 168),
907    ("zinnwaldite_brown", 44, 22, 8)
908);
909
910/**
911 * 根据RGB颜色获取最接近的颜色名称。
912 * `r` 红色分量。
913 * `g` 绿色分量。
914 * `b` 蓝色分量。
915 * */
916pub fn get_nearest_color_name(r: u8, g: u8, b: u8) -> &'static str {
917    let rr = r as f64 / 255.0;
918    let gg = g as f64 / 255.0;
919    let bb = b as f64 / 255.0;
920
921    let mut best_index = 0;
922    let mut min_error = f64::INFINITY;
923
924    for (i, ref color) in COLOR_DATA.iter().enumerate() {
925        let rd = color.rgb.r as f64 / 255.0;
926        let gd = color.rgb.g as f64 / 255.0;
927        let bd = color.rgb.b as f64 / 255.0;
928
929        let error = (rd - rr).powi(2) + (gd - gg).powi(2) + (bd - bb).powi(2);
930        let error = error.sqrt();
931
932        if error < min_error {
933            min_error = error;
934            best_index = i;
935        }
936    }
937    COLOR_DATA[best_index].name
938}
939
940#[cfg(test)]
941mod test_color {
942    use crate::color::get_nearest_color_name;
943
944    #[test]
945    fn main() {
946        assert_eq!(get_nearest_color_name(0, 0, 0), "Black");
947        assert_eq!(get_nearest_color_name(255, 255, 255), "White");
948        assert_eq!(get_nearest_color_name(255, 0, 0), "Red");
949        assert_eq!(get_nearest_color_name(0, 255, 0), "ElectricGreen");
950        assert_eq!(get_nearest_color_name(0, 0, 255), "Blue");
951        assert_eq!(get_nearest_color_name(50, 80, 40), "RifleGreen");
952    }
953}