Source code for picmaker.colornames

################################################################################
# colornames.py
#
# A simple class to import the standard X11 color names into Python. Because I
# couldn't find a better way to do it.
#
# Mark R. Showalter, SETI Institute
################################################################################

import ast
import re
from typing import ClassVar


[docs] class ColorNames: """Standard X11 color-name → RGB lookup. Exposes the X11 ``rgb.txt`` color table as :attr:`COLOR_NAME_DICT` (and the case-insensitive, whitespace-stripped variant :attr:`COLOR_NAME_LOWER_DICT`) plus a single entry point :meth:`lookup` that resolves the following input forms: * A canonical name (``'IndianRed'``, ``'red'``, ``'white smoke'``). * A case-insensitive variant with spaces, dashes, or underscores stripped (``'INDIAN_RED'``, ``'mint-cream'``). * An RGB container expressed as ``'(r, g, b)'`` or ``'[r, g, b]'``. The class has no instance state; every entry point is a :func:`staticmethod`. """ # Extracted from /usr/X11/share/X11/rgb.txt COLOR_NAME_DICT: ClassVar[dict[str, tuple[int, int, int]]] = { "snow" : (255,250,250), "ghost white" : (248,248,255), "GhostWhite" : (248,248,255), "white smoke" : (245,245,245), "WhiteSmoke" : (245,245,245), "gainsboro" : (220,220,220), "floral white" : (255,250,240), "FloralWhite" : (255,250,240), "old lace" : (253,245,230), "OldLace" : (253,245,230), "linen" : (250,240,230), "antique white" : (250,235,215), "AntiqueWhite" : (250,235,215), "papaya whip" : (255,239,213), "PapayaWhip" : (255,239,213), "blanched almond" : (255,235,205), "BlanchedAlmond" : (255,235,205), "bisque" : (255,228,196), "peach puff" : (255,218,185), "PeachPuff" : (255,218,185), "navajo white" : (255,222,173), "NavajoWhite" : (255,222,173), "moccasin" : (255,228,181), "cornsilk" : (255,248,220), "ivory" : (255,255,240), "lemon chiffon" : (255,250,205), "LemonChiffon" : (255,250,205), "seashell" : (255,245,238), "honeydew" : (240,255,240), "mint cream" : (245,255,250), "MintCream" : (245,255,250), "azure" : (240,255,255), "alice blue" : (240,248,255), "AliceBlue" : (240,248,255), "lavender" : (230,230,250), "lavender blush" : (255,240,245), "LavenderBlush" : (255,240,245), "misty rose" : (255,228,225), "MistyRose" : (255,228,225), "white" : (255,255,255), "black" : ( 0, 0, 0), "dark slate gray" : ( 47, 79, 79), "DarkSlateGray" : ( 47, 79, 79), "dark slate grey" : ( 47, 79, 79), "DarkSlateGrey" : ( 47, 79, 79), "dim gray" : (105,105,105), "DimGray" : (105,105,105), "dim grey" : (105,105,105), "DimGrey" : (105,105,105), "slate gray" : (112,128,144), "SlateGray" : (112,128,144), "slate grey" : (112,128,144), "SlateGrey" : (112,128,144), "light slate gray" : (119,136,153), "LightSlateGray" : (119,136,153), "light slate grey" : (119,136,153), "LightSlateGrey" : (119,136,153), "gray" : (190,190,190), "grey" : (190,190,190), "light grey" : (211,211,211), "LightGrey" : (211,211,211), "light gray" : (211,211,211), "LightGray" : (211,211,211), "midnight blue" : ( 25, 25,112), "MidnightBlue" : ( 25, 25,112), "navy" : ( 0, 0,128), "navy blue" : ( 0, 0,128), "NavyBlue" : ( 0, 0,128), "cornflower blue" : (100,149,237), "CornflowerBlue" : (100,149,237), "dark slate blue" : ( 72, 61,139), "DarkSlateBlue" : ( 72, 61,139), "slate blue" : (106, 90,205), "SlateBlue" : (106, 90,205), "medium slate blue" : (123,104,238), "MediumSlateBlue" : (123,104,238), "light slate blue" : (132,112,255), "LightSlateBlue" : (132,112,255), "medium blue" : ( 0, 0,205), "MediumBlue" : ( 0, 0,205), "royal blue" : ( 65,105,225), "RoyalBlue" : ( 65,105,225), "blue" : ( 0, 0,255), "dodger blue" : ( 30,144,255), "DodgerBlue" : ( 30,144,255), "deep sky blue" : ( 0,191,255), "DeepSkyBlue" : ( 0,191,255), "sky blue" : (135,206,235), "SkyBlue" : (135,206,235), "light sky blue" : (135,206,250), "LightSkyBlue" : (135,206,250), "steel blue" : ( 70,130,180), "SteelBlue" : ( 70,130,180), "light steel blue" : (176,196,222), "LightSteelBlue" : (176,196,222), "light blue" : (173,216,230), "LightBlue" : (173,216,230), "powder blue" : (176,224,230), "PowderBlue" : (176,224,230), "pale turquoise" : (175,238,238), "PaleTurquoise" : (175,238,238), "dark turquoise" : ( 0,206,209), "DarkTurquoise" : ( 0,206,209), "medium turquoise" : ( 72,209,204), "MediumTurquoise" : ( 72,209,204), "turquoise" : ( 64,224,208), "cyan" : ( 0,255,255), "light cyan" : (224,255,255), "LightCyan" : (224,255,255), "cadet blue" : ( 95,158,160), "CadetBlue" : ( 95,158,160), "medium aquamarine" : (102,205,170), "MediumAquamarine" : (102,205,170), "aquamarine" : (127,255,212), "dark green" : ( 0,100, 0), "DarkGreen" : ( 0,100, 0), "dark olive green" : ( 85,107, 47), "DarkOliveGreen" : ( 85,107, 47), "dark sea green" : (143,188,143), "DarkSeaGreen" : (143,188,143), "sea green" : ( 46,139, 87), "SeaGreen" : ( 46,139, 87), "medium sea green" : ( 60,179,113), "MediumSeaGreen" : ( 60,179,113), "light sea green" : ( 32,178,170), "LightSeaGreen" : ( 32,178,170), "pale green" : (152,251,152), "PaleGreen" : (152,251,152), "spring green" : ( 0,255,127), "SpringGreen" : ( 0,255,127), "lawn green" : (124,252, 0), "LawnGreen" : (124,252, 0), "green" : ( 0,255, 0), "chartreuse" : (127,255, 0), "medium spring green" : ( 0,250,154), "MediumSpringGreen" : ( 0,250,154), "green yellow" : (173,255, 47), "GreenYellow" : (173,255, 47), "lime green" : ( 50,205, 50), "LimeGreen" : ( 50,205, 50), "yellow green" : (154,205, 50), "YellowGreen" : (154,205, 50), "forest green" : ( 34,139, 34), "ForestGreen" : ( 34,139, 34), "olive drab" : (107,142, 35), "OliveDrab" : (107,142, 35), "dark khaki" : (189,183,107), "DarkKhaki" : (189,183,107), "khaki" : (240,230,140), "pale goldenrod" : (238,232,170), "PaleGoldenrod" : (238,232,170), "light goldenrod yellow" : (250,250,210), "LightGoldenrodYellow" : (250,250,210), "light yellow" : (255,255,224), "LightYellow" : (255,255,224), "yellow" : (255,255, 0), "gold" : (255,215, 0), "light goldenrod" : (238,221,130), "LightGoldenrod" : (238,221,130), "goldenrod" : (218,165, 32), "dark goldenrod" : (184,134, 11), "DarkGoldenrod" : (184,134, 11), "rosy brown" : (188,143,143), "RosyBrown" : (188,143,143), "indian red" : (205, 92, 92), "IndianRed" : (205, 92, 92), "saddle brown" : (139, 69, 19), "SaddleBrown" : (139, 69, 19), "sienna" : (160, 82, 45), "peru" : (205,133, 63), "burlywood" : (222,184,135), "beige" : (245,245,220), "wheat" : (245,222,179), "sandy brown" : (244,164, 96), "SandyBrown" : (244,164, 96), "tan" : (210,180,140), "chocolate" : (210,105, 30), "firebrick" : (178, 34, 34), "brown" : (165, 42, 42), "dark salmon" : (233,150,122), "DarkSalmon" : (233,150,122), "salmon" : (250,128,114), "light salmon" : (255,160,122), "LightSalmon" : (255,160,122), "orange" : (255,165, 0), "dark orange" : (255,140, 0), "DarkOrange" : (255,140, 0), "coral" : (255,127, 80), "light coral" : (240,128,128), "LightCoral" : (240,128,128), "tomato" : (255, 99, 71), "orange red" : (255, 69, 0), "OrangeRed" : (255, 69, 0), "red" : (255, 0, 0), "hot pink" : (255,105,180), "HotPink" : (255,105,180), "deep pink" : (255, 20,147), "DeepPink" : (255, 20,147), "pink" : (255,192,203), "light pink" : (255,182,193), "LightPink" : (255,182,193), "pale violet red" : (219,112,147), "PaleVioletRed" : (219,112,147), "maroon" : (176, 48, 96), "medium violet red" : (199, 21,133), "MediumVioletRed" : (199, 21,133), "violet red" : (208, 32,144), "VioletRed" : (208, 32,144), "magenta" : (255, 0,255), "violet" : (238,130,238), "plum" : (221,160,221), "orchid" : (218,112,214), "medium orchid" : (186, 85,211), "MediumOrchid" : (186, 85,211), "dark orchid" : (153, 50,204), "DarkOrchid" : (153, 50,204), "dark violet" : (148, 0,211), "DarkViolet" : (148, 0,211), "blue violet" : (138, 43,226), "BlueViolet" : (138, 43,226), "purple" : (160, 32,240), "medium purple" : (147,112,219), "MediumPurple" : (147,112,219), "thistle" : (216,191,216), "snow1" : (255,250,250), "snow2" : (238,233,233), "snow3" : (205,201,201), "snow4" : (139,137,137), "seashell1" : (255,245,238), "seashell2" : (238,229,222), "seashell3" : (205,197,191), "seashell4" : (139,134,130), "AntiqueWhite1" : (255,239,219), "AntiqueWhite2" : (238,223,204), "AntiqueWhite3" : (205,192,176), "AntiqueWhite4" : (139,131,120), "bisque1" : (255,228,196), "bisque2" : (238,213,183), "bisque3" : (205,183,158), "bisque4" : (139,125,107), "PeachPuff1" : (255,218,185), "PeachPuff2" : (238,203,173), "PeachPuff3" : (205,175,149), "PeachPuff4" : (139,119,101), "NavajoWhite1" : (255,222,173), "NavajoWhite2" : (238,207,161), "NavajoWhite3" : (205,179,139), "NavajoWhite4" : (139,121, 94), "LemonChiffon1" : (255,250,205), "LemonChiffon2" : (238,233,191), "LemonChiffon3" : (205,201,165), "LemonChiffon4" : (139,137,112), "cornsilk1" : (255,248,220), "cornsilk2" : (238,232,205), "cornsilk3" : (205,200,177), "cornsilk4" : (139,136,120), "ivory1" : (255,255,240), "ivory2" : (238,238,224), "ivory3" : (205,205,193), "ivory4" : (139,139,131), "honeydew1" : (240,255,240), "honeydew2" : (224,238,224), "honeydew3" : (193,205,193), "honeydew4" : (131,139,131), "LavenderBlush1" : (255,240,245), "LavenderBlush2" : (238,224,229), "LavenderBlush3" : (205,193,197), "LavenderBlush4" : (139,131,134), "MistyRose1" : (255,228,225), "MistyRose2" : (238,213,210), "MistyRose3" : (205,183,181), "MistyRose4" : (139,125,123), "azure1" : (240,255,255), "azure2" : (224,238,238), "azure3" : (193,205,205), "azure4" : (131,139,139), "SlateBlue1" : (131,111,255), "SlateBlue2" : (122,103,238), "SlateBlue3" : (105, 89,205), "SlateBlue4" : ( 71, 60,139), "RoyalBlue1" : ( 72,118,255), "RoyalBlue2" : ( 67,110,238), "RoyalBlue3" : ( 58, 95,205), "RoyalBlue4" : ( 39, 64,139), "blue1" : ( 0, 0,255), "blue2" : ( 0, 0,238), "blue3" : ( 0, 0,205), "blue4" : ( 0, 0,139), "DodgerBlue1" : ( 30,144,255), "DodgerBlue2" : ( 28,134,238), "DodgerBlue3" : ( 24,116,205), "DodgerBlue4" : ( 16, 78,139), "SteelBlue1" : ( 99,184,255), "SteelBlue2" : ( 92,172,238), "SteelBlue3" : ( 79,148,205), "SteelBlue4" : ( 54,100,139), "DeepSkyBlue1" : ( 0,191,255), "DeepSkyBlue2" : ( 0,178,238), "DeepSkyBlue3" : ( 0,154,205), "DeepSkyBlue4" : ( 0,104,139), "SkyBlue1" : (135,206,255), "SkyBlue2" : (126,192,238), "SkyBlue3" : (108,166,205), "SkyBlue4" : ( 74,112,139), "LightSkyBlue1" : (176,226,255), "LightSkyBlue2" : (164,211,238), "LightSkyBlue3" : (141,182,205), "LightSkyBlue4" : ( 96,123,139), "SlateGray1" : (198,226,255), "SlateGray2" : (185,211,238), "SlateGray3" : (159,182,205), "SlateGray4" : (108,123,139), "LightSteelBlue1" : (202,225,255), "LightSteelBlue2" : (188,210,238), "LightSteelBlue3" : (162,181,205), "LightSteelBlue4" : (110,123,139), "LightBlue1" : (191,239,255), "LightBlue2" : (178,223,238), "LightBlue3" : (154,192,205), "LightBlue4" : (104,131,139), "LightCyan1" : (224,255,255), "LightCyan2" : (209,238,238), "LightCyan3" : (180,205,205), "LightCyan4" : (122,139,139), "PaleTurquoise1" : (187,255,255), "PaleTurquoise2" : (174,238,238), "PaleTurquoise3" : (150,205,205), "PaleTurquoise4" : (102,139,139), "CadetBlue1" : (152,245,255), "CadetBlue2" : (142,229,238), "CadetBlue3" : (122,197,205), "CadetBlue4" : ( 83,134,139), "turquoise1" : ( 0,245,255), "turquoise2" : ( 0,229,238), "turquoise3" : ( 0,197,205), "turquoise4" : ( 0,134,139), "cyan1" : ( 0,255,255), "cyan2" : ( 0,238,238), "cyan3" : ( 0,205,205), "cyan4" : ( 0,139,139), "DarkSlateGray1" : (151,255,255), "DarkSlateGray2" : (141,238,238), "DarkSlateGray3" : (121,205,205), "DarkSlateGray4" : ( 82,139,139), "aquamarine1" : (127,255,212), "aquamarine2" : (118,238,198), "aquamarine3" : (102,205,170), "aquamarine4" : ( 69,139,116), "DarkSeaGreen1" : (193,255,193), "DarkSeaGreen2" : (180,238,180), "DarkSeaGreen3" : (155,205,155), "DarkSeaGreen4" : (105,139,105), "SeaGreen1" : ( 84,255,159), "SeaGreen2" : ( 78,238,148), "khaki1" : (255,246,143), "SeaGreen4" : ( 46,139, 87), "PaleGreen1" : (154,255,154), "PaleGreen2" : (144,238,144), "PaleGreen3" : (124,205,124), "PaleGreen4" : ( 84,139, 84), "SpringGreen1" : ( 0,255,127), "SpringGreen2" : ( 0,238,118), "SpringGreen3" : ( 0,205,102), "SpringGreen4" : ( 0,139, 69), "green1" : ( 0,255, 0), "green2" : ( 0,238, 0), "green3" : ( 0,205, 0), "green4" : ( 0,139, 0), "chartreuse1" : (127,255, 0), "chartreuse2" : (118,238, 0), "chartreuse3" : (102,205, 0), "chartreuse4" : ( 69,139, 0), "OliveDrab1" : (192,255, 62), "OliveDrab2" : (179,238, 58), "OliveDrab3" : (154,205, 50), "OliveDrab4" : (105,139, 34), "DarkOliveGreen1" : (202,255,112), "DarkOliveGreen2" : (188,238,104), "DarkOliveGreen3" : (162,205, 90), "DarkOliveGreen4" : (110,139, 61), "khaki2" : (238,230,133), "khaki3" : (205,198,115), "khaki4" : (139,134, 78), "LightGoldenrod1" : (255,236,139), "LightGoldenrod2" : (238,220,130), "LightGoldenrod3" : (205,190,112), "LightGoldenrod4" : (139,129, 76), "LightYellow1" : (255,255,224), "LightYellow2" : (238,238,209), "LightYellow3" : (205,205,180), "LightYellow4" : (139,139,122), "yellow1" : (255,255, 0), "yellow2" : (238,238, 0), "yellow3" : (205,205, 0), "yellow4" : (139,139, 0), "gold1" : (255,215, 0), "gold2" : (238,201, 0), "gold3" : (205,173, 0), "gold4" : (139,117, 0), "goldenrod1" : (255,193, 37), "goldenrod2" : (238,180, 34), "goldenrod3" : (205,155, 29), "goldenrod4" : (139,105, 20), "DarkGoldenrod1" : (255,185, 15), "DarkGoldenrod2" : (238,173, 14), "DarkGoldenrod3" : (205,149, 12), "DarkGoldenrod4" : (139,101, 8), "RosyBrown1" : (255,193,193), "RosyBrown2" : (238,180,180), "RosyBrown3" : (205,155,155), "RosyBrown4" : (139,105,105), "IndianRed1" : (255,106,106), "IndianRed2" : (238, 99, 99), "IndianRed3" : (205, 85, 85), "IndianRed4" : (139, 58, 58), "sienna1" : (255,130, 71), "sienna2" : (238,121, 66), "sienna3" : (205,104, 57), "sienna4" : (139, 71, 38), "burlywood1" : (255,211,155), "burlywood2" : (238,197,145), "burlywood3" : (205,170,125), "burlywood4" : (139,115, 85), "wheat1" : (255,231,186), "wheat2" : (238,216,174), "wheat3" : (205,186,150), "wheat4" : (139,126,102), "tan1" : (255,165, 79), "tan2" : (238,154, 73), "tan3" : (205,133, 63), "tan4" : (139, 90, 43), "chocolate1" : (255,127, 36), "chocolate2" : (238,118, 33), "chocolate3" : (205,102, 29), "chocolate4" : (139, 69, 19), "firebrick1" : (255, 48, 48), "firebrick2" : (238, 44, 44), "firebrick3" : (205, 38, 38), "firebrick4" : (139, 26, 26), "brown1" : (255, 64, 64), "brown2" : (238, 59, 59), "brown3" : (205, 51, 51), "brown4" : (139, 35, 35), "salmon1" : (255,140,105), "salmon2" : (238,130, 98), "salmon3" : (205,112, 84), "salmon4" : (139, 76, 57), "LightSalmon1" : (255,160,122), "LightSalmon2" : (238,149,114), "LightSalmon3" : (205,129, 98), "LightSalmon4" : (139, 87, 66), "orange1" : (255,165, 0), "orange2" : (238,154, 0), "orange3" : (205,133, 0), "orange4" : (139, 90, 0), "DarkOrange1" : (255,127, 0), "DarkOrange2" : (238,118, 0), "DarkOrange3" : (205,102, 0), "DarkOrange4" : (139, 69, 0), "coral1" : (255,114, 86), "coral2" : (238,106, 80), "coral3" : (205, 91, 69), "coral4" : (139, 62, 47), "tomato1" : (255, 99, 71), "tomato2" : (238, 92, 66), "tomato3" : (205, 79, 57), "tomato4" : (139, 54, 38), "OrangeRed1" : (255, 69, 0), "OrangeRed2" : (238, 64, 0), "OrangeRed3" : (205, 55, 0), "OrangeRed4" : (139, 37, 0), "red1" : (255, 0, 0), "red2" : (238, 0, 0), "red3" : (205, 0, 0), "red4" : (139, 0, 0), "DeepPink1" : (255, 20,147), "DeepPink2" : (238, 18,137), "DeepPink3" : (205, 16,118), "DeepPink4" : (139, 10, 80), "HotPink1" : (255,110,180), "HotPink2" : (238,106,167), "HotPink3" : (205, 96,144), "HotPink4" : (139, 58, 98), "pink1" : (255,181,197), "pink2" : (238,169,184), "pink3" : (205,145,158), "pink4" : (139, 99,108), "LightPink1" : (255,174,185), "LightPink2" : (238,162,173), "LightPink3" : (205,140,149), "LightPink4" : (139, 95,101), "PaleVioletRed1" : (255,130,171), "PaleVioletRed2" : (238,121,159), "PaleVioletRed3" : (205,104,137), "PaleVioletRed4" : (139, 71, 93), "maroon1" : (255, 52,179), "maroon2" : (238, 48,167), "maroon3" : (205, 41,144), "maroon4" : (139, 28, 98), "VioletRed1" : (255, 62,150), "VioletRed2" : (238, 58,140), "VioletRed3" : (205, 50,120), "VioletRed4" : (139, 34, 82), "magenta1" : (255, 0,255), "magenta2" : (238, 0,238), "magenta3" : (205, 0,205), "magenta4" : (139, 0,139), "orchid1" : (255,131,250), "orchid2" : (238,122,233), "orchid3" : (205,105,201), "orchid4" : (139, 71,137), "plum1" : (255,187,255), "plum2" : (238,174,238), "plum3" : (205,150,205), "plum4" : (139,102,139), "MediumOrchid1" : (224,102,255), "MediumOrchid2" : (209, 95,238), "MediumOrchid3" : (180, 82,205), "MediumOrchid4" : (122, 55,139), "DarkOrchid1" : (191, 62,255), "DarkOrchid2" : (178, 58,238), "DarkOrchid3" : (154, 50,205), "DarkOrchid4" : (104, 34,139), "purple1" : (155, 48,255), "purple2" : (145, 44,238), "purple3" : (125, 38,205), "purple4" : ( 85, 26,139), "MediumPurple1" : (171,130,255), "MediumPurple2" : (159,121,238), "MediumPurple3" : (137,104,205), "MediumPurple4" : ( 93, 71,139), "thistle1" : (255,225,255), "thistle2" : (238,210,238), "thistle3" : (205,181,205), "thistle4" : (139,123,139), "gray0" : ( 0, 0, 0), "grey0" : ( 0, 0, 0), "gray1" : ( 3, 3, 3), "grey1" : ( 3, 3, 3), "gray2" : ( 5, 5, 5), "grey2" : ( 5, 5, 5), "gray3" : ( 8, 8, 8), "grey3" : ( 8, 8, 8), "gray4" : ( 10, 10, 10), "grey4" : ( 10, 10, 10), "gray5" : ( 13, 13, 13), "grey5" : ( 13, 13, 13), "gray6" : ( 15, 15, 15), "grey6" : ( 15, 15, 15), "gray7" : ( 18, 18, 18), "grey7" : ( 18, 18, 18), "gray8" : ( 20, 20, 20), "grey8" : ( 20, 20, 20), "gray9" : ( 23, 23, 23), "grey9" : ( 23, 23, 23), "gray10" : ( 26, 26, 26), "grey10" : ( 26, 26, 26), "gray11" : ( 28, 28, 28), "grey11" : ( 28, 28, 28), "gray12" : ( 31, 31, 31), "grey12" : ( 31, 31, 31), "gray13" : ( 33, 33, 33), "grey13" : ( 33, 33, 33), "gray14" : ( 36, 36, 36), "grey14" : ( 36, 36, 36), "gray15" : ( 38, 38, 38), "grey15" : ( 38, 38, 38), "gray16" : ( 41, 41, 41), "grey16" : ( 41, 41, 41), "gray17" : ( 43, 43, 43), "grey17" : ( 43, 43, 43), "gray18" : ( 46, 46, 46), "grey18" : ( 46, 46, 46), "gray19" : ( 48, 48, 48), "grey19" : ( 48, 48, 48), "gray20" : ( 51, 51, 51), "grey20" : ( 51, 51, 51), "gray21" : ( 54, 54, 54), "grey21" : ( 54, 54, 54), "gray22" : ( 56, 56, 56), "grey22" : ( 56, 56, 56), "gray23" : ( 59, 59, 59), "grey23" : ( 59, 59, 59), "gray24" : ( 61, 61, 61), "grey24" : ( 61, 61, 61), "gray25" : ( 64, 64, 64), "grey25" : ( 64, 64, 64), "gray26" : ( 66, 66, 66), "grey26" : ( 66, 66, 66), "gray27" : ( 69, 69, 69), "grey27" : ( 69, 69, 69), "gray28" : ( 71, 71, 71), "grey28" : ( 71, 71, 71), "gray29" : ( 74, 74, 74), "grey29" : ( 74, 74, 74), "gray30" : ( 77, 77, 77), "grey30" : ( 77, 77, 77), "gray31" : ( 79, 79, 79), "grey31" : ( 79, 79, 79), "gray32" : ( 82, 82, 82), "grey32" : ( 82, 82, 82), "gray33" : ( 84, 84, 84), "grey33" : ( 84, 84, 84), "gray34" : ( 87, 87, 87), "grey34" : ( 87, 87, 87), "gray35" : ( 89, 89, 89), "grey35" : ( 89, 89, 89), "gray36" : ( 92, 92, 92), "grey36" : ( 92, 92, 92), "gray37" : ( 94, 94, 94), "grey37" : ( 94, 94, 94), "gray38" : ( 97, 97, 97), "grey38" : ( 97, 97, 97), "gray39" : ( 99, 99, 99), "grey39" : ( 99, 99, 99), "gray40" : (102,102,102), "grey40" : (102,102,102), "gray41" : (105,105,105), "grey41" : (105,105,105), "gray42" : (107,107,107), "grey42" : (107,107,107), "gray43" : (110,110,110), "grey43" : (110,110,110), "gray44" : (112,112,112), "grey44" : (112,112,112), "gray45" : (115,115,115), "grey45" : (115,115,115), "gray46" : (117,117,117), "grey46" : (117,117,117), "gray47" : (120,120,120), "grey47" : (120,120,120), "gray48" : (122,122,122), "grey48" : (122,122,122), "gray49" : (125,125,125), "grey49" : (125,125,125), "gray50" : (127,127,127), "grey50" : (127,127,127), "gray51" : (130,130,130), "grey51" : (130,130,130), "gray52" : (133,133,133), "grey52" : (133,133,133), "gray53" : (135,135,135), "grey53" : (135,135,135), "gray54" : (138,138,138), "grey54" : (138,138,138), "gray55" : (140,140,140), "grey55" : (140,140,140), "gray56" : (143,143,143), "grey56" : (143,143,143), "gray57" : (145,145,145), "grey57" : (145,145,145), "gray58" : (148,148,148), "grey58" : (148,148,148), "gray59" : (150,150,150), "grey59" : (150,150,150), "gray60" : (153,153,153), "grey60" : (153,153,153), "gray61" : (156,156,156), "grey61" : (156,156,156), "gray62" : (158,158,158), "grey62" : (158,158,158), "gray63" : (161,161,161), "grey63" : (161,161,161), "gray64" : (163,163,163), "grey64" : (163,163,163), "gray65" : (166,166,166), "grey65" : (166,166,166), "gray66" : (168,168,168), "grey66" : (168,168,168), "gray67" : (171,171,171), "grey67" : (171,171,171), "gray68" : (173,173,173), "grey68" : (173,173,173), "gray69" : (176,176,176), "grey69" : (176,176,176), "gray70" : (179,179,179), "grey70" : (179,179,179), "gray71" : (181,181,181), "grey71" : (181,181,181), "gray72" : (184,184,184), "grey72" : (184,184,184), "gray73" : (186,186,186), "grey73" : (186,186,186), "gray74" : (189,189,189), "grey74" : (189,189,189), "gray75" : (191,191,191), "grey75" : (191,191,191), "gray76" : (194,194,194), "grey76" : (194,194,194), "gray77" : (196,196,196), "grey77" : (196,196,196), "gray78" : (199,199,199), "grey78" : (199,199,199), "gray79" : (201,201,201), "grey79" : (201,201,201), "gray80" : (204,204,204), "grey80" : (204,204,204), "gray81" : (207,207,207), "grey81" : (207,207,207), "gray82" : (209,209,209), "grey82" : (209,209,209), "gray83" : (212,212,212), "grey83" : (212,212,212), "gray84" : (214,214,214), "grey84" : (214,214,214), "gray85" : (217,217,217), "grey85" : (217,217,217), "gray86" : (219,219,219), "grey86" : (219,219,219), "gray87" : (222,222,222), "grey87" : (222,222,222), "gray88" : (224,224,224), "grey88" : (224,224,224), "gray89" : (227,227,227), "grey89" : (227,227,227), "gray90" : (229,229,229), "grey90" : (229,229,229), "gray91" : (232,232,232), "grey91" : (232,232,232), "gray92" : (235,235,235), "grey92" : (235,235,235), "gray93" : (237,237,237), "grey93" : (237,237,237), "gray94" : (240,240,240), "grey94" : (240,240,240), "gray95" : (242,242,242), "grey95" : (242,242,242), "gray96" : (245,245,245), "grey96" : (245,245,245), "gray97" : (247,247,247), "grey97" : (247,247,247), "gray98" : (250,250,250), "grey98" : (250,250,250), "gray99" : (252,252,252), "grey99" : (252,252,252), "gray100" : (255,255,255), "grey100" : (255,255,255), "dark grey" : (169,169,169), "DarkGrey" : (169,169,169), "dark gray" : (169,169,169), "DarkGray" : (169,169,169), "dark blue" : (0 , 0,139), "DarkBlue" : (0 , 0,139), "dark cyan" : (0 ,139,139), "DarkCyan" : (0 ,139,139), "dark magenta" : (139, 0,139), "DarkMagenta" : (139, 0,139), "dark red" : (139, 0, 0), "DarkRed" : (139, 0, 0), "light green" : (144,238,144), "LightGreen" : (144,238,144) } # Derived once at class-body time from COLOR_NAME_DICT. Cheap (~800 # entries, ~10us total), and the dict is referenced on every # `ColorNames.lookup` call so lazy init buys nothing in practice. COLOR_NAME_LOWER_DICT: ClassVar[dict[str, tuple[int, int, int]]] = { k.lower().replace(' ', ''): v for k, v in COLOR_NAME_DICT.items() } RGB_PATTERN: ClassVar[re.Pattern[str]] = re.compile( r" *[\[\(] *[0-9]{1,3} *, *[0-9]{1,3} *, *[0-9]{1,3} *[\)\]] *", re.IGNORECASE)
[docs] @staticmethod def lookup(name: str) -> tuple[int, int, int]: """Resolve a color name or RGB expression to a ``(r, g, b)`` triple. Parameters: name: A canonical X11 color name (case-sensitive), a case-insensitive variant with spaces / dashes / underscores stripped, or an RGB container expressed as ``'(r, g, b)'`` or ``'[r, g, b]'`` (parsed via :func:`ast.literal_eval`). Returns: The ``(r, g, b)`` triple with each channel in ``[0, 255]``. Bracketed ``'[r, g, b]'`` inputs are also returned as tuples (the parser normalizes lists to tuples on the way out). Raises: TypeError: If ``name`` is not a string. KeyError: If ``name`` matches no known X11 color and no RGB expression in ``()`` / ``[]``. ValueError: If a parsed RGB component exceeds 255. """ # Make sure it's a string if not isinstance(name, str): raise TypeError("Colorname must be a string: " + str(name)) # Strip quotes and white space if any test = name.strip() if test and ( (test[0] == '"' and test[-1] == '"') or (test[0] == "'" and test[-1] == "'") ): test = test[1:-1].strip() # Look up the color as a name try: return ColorNames.COLOR_NAME_DICT[test] except KeyError: pass # Try it as lower case test = test.lower() try: return ColorNames.COLOR_NAME_LOWER_DICT[test] except KeyError: pass # Try it as lower case, without blanks, dashes or underscores test = test.replace(' ','').replace('-','').replace('_','') try: return ColorNames.COLOR_NAME_LOWER_DICT[test] except KeyError: pass # Failing that, see if it is an RGB expression in () or [] match = ColorNames.RGB_PATTERN.match(name) if match is None or match.end() != len(name): raise KeyError("Unrecognized color name: " + name.strip()) # Parse the expression with ast.literal_eval (NOT eval) so that # only Python literals are accepted; this guards against any # injection vector the regex might otherwise admit. try: rgb = ast.literal_eval(name) except (ValueError, SyntaxError) as exc: raise KeyError( "Unrecognized color name: " + name.strip() ) from exc for i in rgb: if i > 255: raise ValueError("Color value out of range: " + name) # Normalize ``[r, g, b]`` lists to ``(r, g, b)`` tuples so the # return type is consistent regardless of the bracketing the # caller used. return tuple(rgb)