Pastey get x11 color names
- Posted by ne1uno Jun 29, 2016
-- color name map convert -- ne1 6/16 -- redylib demo -- http://centerkey.com/colors/ sorted x11 color names include std/os.e include std/io.e include std/sequence.e as seq include std/convert.e include std/text.e include std/map.e include std/error.e -- rgb/get_rgb from redylib, not sure from where exactly --[01:44] <@stagelark> public function rgb(atom r, atom g, atom b) return r + g * 256 + b * 65536 end function public function get_rgb(atom color) return int_to_bytes(color) end function -- return hex string given color name or color name given hex string -- obviously,if not found needs to find a match somehow -- a nearest color or default color return -- crash would be unacceptable -- should also lower case the sequence if not a number, -- since names are stored lower case and all string -- should be able to handle hex as number if name not found too public function get_colorname_orhex(map colormap, object hexcolor) object hc object found = map:has(colormap, lower(hexcolor)) if not found then crash("major malfunction in get_colorname_orhex="&hexcolor) else hc = map:get(colormap, lower(hexcolor)) end if return hc end function -- create map of colornames using hex as index -- add to map the inverse map -- so can lookup by name to get hex or hex to get name -- rather than an inverse map, -- easier just to add the hex index while creating the names map -- -- use existing rgb routines to convert to from hex -- I can't imagine this would ever be a bottleneck -- if so could add rgb or other colorspace as indexes -- fancier: -- add code so can lookup nearest name from any hex function initcolors() map dict = map:new() -- x11 color names sorted by hue object hexnames = split(` ________LavenderBlush FFF0F5 SeaShell FFF5EE Linen FAF0E6 MistyRose FFE4E1 PeachPuff FFDAB9 RosyBrown BC8F8F Pink FFC0CB LightPink FFB6C1 PaleVioletRed D87093 DarkSalmon E9967A Sienna A0522D HotPink FF69B4 LightSalmon FFA07A SaddleBrown 8B4513 LightCoral F08080 Peru CD853F SandyBrown F4A460 IndianRed CD5C5C Salmon FA8072 Brown A52A2A Maroon 800000 Chocolate D2691E Coral FF7F50 FireBrick B22222 DarkRed 8B0000 Tomato FF6347 Crimson DC143C OrangeRed FF4500 Red FF0000 MintCream F5FFFA HoneyDew F0FFF0 DarkSeaGreen 8FBC8F SeaGreen 2E8B57 LightGreen 90EE90 PaleGreen 98FB98 MediumSeaGreen 3CB371 ForestGreen 228B22 DarkGreen 006400 Green 008000 LimeGreen 32CD32 SpringGreen 00FF7F LawnGreen 7CFC00 Chartreuse 7FFF00 Lime 00FF00 Lavender E6E6FA LightSteelBlue B0C4DE LightSlateGray 778899 SlateGray 708090 DarkSlateBlue 483D8B MediumPurple 9370D8 MidnightBlue 191970 CornflowerBlue 6495ED SlateBlue 6A5ACD MediumSlateBlue 7B68EE RoyalBlue 4169E1 Navy 000080 DarkBlue 00008B MediumBlue 0000CD Blue 0000FF AliceBlue F0F8FF Azure F0FFFF LightCyan E0FFFF LightBlue ADD8E6 PowderBlue B0E0E6 PaleTurquoise AFEEEE DarkSlateGray 2F4F4F CadetBlue 5F9EA0 SkyBlue 87CEEB LightSkyBlue 87CEFA MediumAquaMarine 66CDAA SteelBlue 4682B4 Aquamarine 7FFFD4 MediumTurquoise 48D1CC Teal 008080 LightSeaGreen 20B2AA Turquoise 40E0D0 DarkCyan 008B8B DodgerBlue 1E90FF MediumSpringGreen 00FA9A DarkTurquoise 00CED1 DeepSkyBlue 00BFFF Aqua 00FFFF Cyan 00FFFF Thistle D8BFD8 Plum DDA0DD Violet EE82EE Orchid DA70D6 MediumOrchid BA55D3 Indigo 4B0082 DarkOrchid 9932CC BlueViolet 8A2BE2 Purple 800080 DarkMagenta 8B008B MediumVioletRed C71585 DarkViolet 9400D3 DeepPink FF1493 Fuchsia FF00FF Magenta FF00FF FloralWhite FFFAF0 Ivory FFFFF0 OldLace FDF5E6 Beige F5F5DC AntiqueWhite FAEBD7 LightYellow FFFFE0 Cornsilk FFF8DC PapayaWhip FFEFD5 LightGoldenRodYellow FAFAD2 BlanchedAlmond FFEBCD LemonChiffon FFFACD Bisque FFE4C4 Wheat F5DEB3 Moccasin FFE4B5 Tan D2B48C PaleGoldenRod EEE8AA NavajoWhite FFDEAD DarkOliveGreen 556B2F BurlyWood DEB887 DarkKhaki BDB76B Khaki F0E68C OliveDrab 6B8E23 YellowGreen 9ACD32 Olive 808000 DarkGoldenRod B8860B GreenYellow ADFF2F GoldenRod DAA520 DarkOrange FF8C00 Orange FFA500 Gold FFD700 Yellow FFFF00 White FFFFFF WhiteSmoke F5F5F5 Snow FFFAFA Gainsboro DCDCDC GhostWhite F8F8FF LightGray D3D3D3 Silver C0C0C0 DarkGray A9A9A9 Gray 808080 DimGray 696969 Black 000000 `, "\n", 1) for i=1 to length(hexnames) do object name = split(hexnames[i]) if 2 != length(name) then continue end if map:put(dict, lower(name[1]), '#'&lower(name[2]) ) map:put(dict, '#'&lower(name[2]), lower(name[1]) ) end for --?map:size(dict) return dict end function map color_name_map = initcolors() printf(1,"black = %s from black\n" , {get_colorname_orhex(color_name_map, "black")} ) printf(1,"%s = #000000 from #000000\n" , {get_colorname_orhex(color_name_map, "#000000")} ) printf(1,"Turquoise = %s from Turquoise\n" , {get_colorname_orhex(color_name_map, "Turquoise")} ) printf(1,"%s = #40E0D0 from #40E0D0\n" , {get_colorname_orhex(color_name_map, "#40E0D0")} ) --?1/0 /* needs some work to handle input hex as a number if that's required with appropriate error checking and default fallbacks it's indexed as a hex string might be nice to have uppercase hexstring but it just adds complication can use uppercase, it lowers it when getting from the map same with the mixed case color names. not sure how important that is to try and preserve. could store the prefered output format and return it if asked? lower case everything for now first cut proof of concept anyway */


