From ad4ec49f9c6354dfb4c8d8a65a9e2d90e79a3d45 Mon Sep 17 00:00:00 2001 From: Charles Spirakis Date: Mon, 28 Nov 2016 22:59:46 -0800 Subject: [PATCH] Update color names to follow w3.org list. (#4374) The color names -> rgb dictionary now follows the color names listed in the w3.org site for css3, section 4.3. Extended color keywords: https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color --- homeassistant/util/color.py | 172 +++++++++++++++++++++++++++++++++--- tests/util/test_color.py | 14 ++- 2 files changed, 172 insertions(+), 14 deletions(-) diff --git a/homeassistant/util/color.py b/homeassistant/util/color.py index e9671c77328..9502849e1d9 100644 --- a/homeassistant/util/color.py +++ b/homeassistant/util/color.py @@ -8,24 +8,170 @@ _LOGGER = logging.getLogger(__name__) HASS_COLOR_MAX = 500 # mireds (inverted) HASS_COLOR_MIN = 154 + +# Official CSS3 colors from w3.org: +# https://www.w3.org/TR/2010/PR-css3-color-20101028/#html4 +# names do not have spaces in them so that we can compare against +# reuqests more easily (by removing spaces from the requests as well). +# This lets "dark seagreen" and "dark sea green" both match the same +# color "darkseagreen". COLORS = { - 'white': (255, 255, 255), 'beige': (245, 245, 220), - 'tan': (210, 180, 140), 'gray': (128, 128, 128), - 'navy blue': (0, 0, 128), 'royal blue': (8, 76, 158), - 'blue': (0, 0, 255), 'azure': (0, 127, 255), 'aqua': (127, 255, 212), - 'teal': (0, 128, 128), 'green': (0, 255, 0), - 'forest green': (34, 139, 34), 'olive': (128, 128, 0), - 'chartreuse': (127, 255, 0), 'lime': (191, 255, 0), - 'golden': (255, 215, 0), 'red': (255, 0, 0), 'coral': (0, 63, 72), - 'hot pink': (252, 15, 192), 'fuchsia': (255, 119, 255), - 'lavender': (181, 126, 220), 'indigo': (75, 0, 130), - 'maroon': (128, 0, 0), 'crimson': (220, 20, 60)} + 'aliceblue': (240, 248, 255), + 'antiquewhite': (250, 235, 215), + 'aqua': (0, 255, 255), + 'aquamarine': (127, 255, 212), + 'azure': (240, 255, 255), + 'beige': (245, 245, 220), + 'bisque': (255, 228, 196), + 'black': (0, 0, 0), + 'blanchedalmond': (255, 235, 205), + 'blue': (0, 0, 255), + 'blueviolet': (138, 43, 226), + 'brown': (165, 42, 42), + 'burlywood': (222, 184, 135), + 'cadetblue': (95, 158, 160), + 'chartreuse': (127, 255, 0), + 'chocolate': (210, 105, 30), + 'coral': (255, 127, 80), + 'cornflowerblue': (100, 149, 237), + 'cornsilk': (255, 248, 220), + 'crimson': (220, 20, 60), + 'cyan': (0, 255, 255), + 'darkblue': (0, 0, 139), + 'darkcyan': (0, 139, 139), + 'darkgoldenrod': (184, 134, 11), + 'darkgray': (169, 169, 169), + 'darkgreen': (0, 100, 0), + 'darkgrey': (169, 169, 169), + 'darkkhaki': (189, 183, 107), + 'darkmagenta': (139, 0, 139), + 'darkolivegreen': (85, 107, 47), + 'darkorange': (255, 140, 0), + 'darkorchid': (153, 50, 204), + 'darkred': (139, 0, 0), + 'darksalmon': (233, 150, 122), + 'darkseagreen': (143, 188, 143), + 'darkslateblue': (72, 61, 139), + 'darkslategray': (47, 79, 79), + 'darkslategrey': (47, 79, 79), + 'darkturquoise': (0, 206, 209), + 'darkviolet': (148, 0, 211), + 'deeppink': (255, 20, 147), + 'deepskyblue': (0, 191, 255), + 'dimgray': (105, 105, 105), + 'dimgrey': (105, 105, 105), + 'dodgerblue': (30, 144, 255), + 'firebrick': (178, 34, 34), + 'floralwhite': (255, 250, 240), + 'forestgreen': (34, 139, 34), + 'fuchsia': (255, 0, 255), + 'gainsboro': (220, 220, 220), + 'ghostwhite': (248, 248, 255), + 'gold': (255, 215, 0), + 'goldenrod': (218, 165, 32), + 'gray': (128, 128, 128), + 'green': (0, 128, 0), + 'greenyellow': (173, 255, 47), + 'grey': (128, 128, 128), + 'honeydew': (240, 255, 240), + 'hotpink': (255, 105, 180), + 'indianred': (205, 92, 92), + 'indigo': (75, 0, 130), + 'ivory': (255, 255, 240), + 'khaki': (240, 230, 140), + 'lavender': (230, 230, 250), + 'lavenderblush': (255, 240, 245), + 'lawngreen': (124, 252, 0), + 'lemonchiffon': (255, 250, 205), + 'lightblue': (173, 216, 230), + 'lightcoral': (240, 128, 128), + 'lightcyan': (224, 255, 255), + 'lightgoldenrodyellow': (250, 250, 210), + 'lightgray': (211, 211, 211), + 'lightgreen': (144, 238, 144), + 'lightgrey': (211, 211, 211), + 'lightpink': (255, 182, 193), + 'lightsalmon': (255, 160, 122), + 'lightseagreen': (32, 178, 170), + 'lightskyblue': (135, 206, 250), + 'lightslategray': (119, 136, 153), + 'lightslategrey': (119, 136, 153), + 'lightsteelblue': (176, 196, 222), + 'lightyellow': (255, 255, 224), + 'lime': (0, 255, 0), + 'limegreen': (50, 205, 50), + 'linen': (250, 240, 230), + 'magenta': (255, 0, 255), + 'maroon': (128, 0, 0), + 'mediumaquamarine': (102, 205, 170), + 'mediumblue': (0, 0, 205), + 'mediumorchid': (186, 85, 211), + 'mediumpurple': (147, 112, 219), + 'mediumseagreen': (60, 179, 113), + 'mediumslateblue': (123, 104, 238), + 'mediumspringgreen': (0, 250, 154), + 'mediumturquoise': (72, 209, 204), + 'mediumvioletredred': (199, 21, 133), + 'midnightblue': (25, 25, 112), + 'mintcream': (245, 255, 250), + 'mistyrose': (255, 228, 225), + 'moccasin': (255, 228, 181), + 'navajowhite': (255, 222, 173), + 'navy': (0, 0, 128), + 'navyblue': (0, 0, 128), + 'oldlace': (253, 245, 230), + 'olive': (128, 128, 0), + 'olivedrab': (107, 142, 35), + 'orange': (255, 165, 0), + 'orangered': (255, 69, 0), + 'orchid': (218, 112, 214), + 'palegoldenrod': (238, 232, 170), + 'palegreen': (152, 251, 152), + 'paleturquoise': (175, 238, 238), + 'palevioletred': (219, 112, 147), + 'papayawhip': (255, 239, 213), + 'peachpuff': (255, 218, 185), + 'peru': (205, 133, 63), + 'pink': (255, 192, 203), + 'plum': (221, 160, 221), + 'powderblue': (176, 224, 230), + 'purple': (128, 0, 128), + 'red': (255, 0, 0), + 'rosybrown': (188, 143, 143), + 'royalblue': (65, 105, 225), + 'saddlebrown': (139, 69, 19), + 'salmon': (250, 128, 114), + 'sandybrown': (244, 164, 96), + 'seagreen': (46, 139, 87), + 'seashell': (255, 245, 238), + 'sienna': (160, 82, 45), + 'silver': (192, 192, 192), + 'skyblue': (135, 206, 235), + 'slateblue': (106, 90, 205), + 'slategray': (112, 128, 144), + 'slategrey': (112, 128, 144), + 'snow': (255, 250, 250), + 'springgreen': (0, 255, 127), + 'steelblue': (70, 130, 180), + 'tan': (210, 180, 140), + 'teal': (0, 128, 128), + 'thistle': (216, 191, 216), + 'tomato': (255, 99, 71), + 'turquoise': (64, 224, 208), + 'violet': (238, 130, 238), + 'wheat': (245, 222, 179), + 'white': (255, 255, 255), + 'whitesmoke': (245, 245, 245), + 'yellow': (255, 255, 0), + 'yellowgreen': (154, 205, 50), +} def color_name_to_rgb(color_name): """Convert color name to RGB hex value.""" - hex_value = COLORS.get(color_name.lower()) - + # COLORS map has no spaces in it, so make the color_name have no + # spaces in it as well for matching purposes + hex_value = COLORS.get(color_name.replace(' ', '').lower()) if not hex_value: _LOGGER.error('unknown color supplied %s default to white', color_name) hex_value = COLORS['white'] diff --git a/tests/util/test_color.py b/tests/util/test_color.py index 50bee79283e..e4048cd3cde 100644 --- a/tests/util/test_color.py +++ b/tests/util/test_color.py @@ -67,9 +67,21 @@ class TestColorUtil(unittest.TestCase): self.assertEqual((0, 0, 255), color_util.color_name_to_rgb('blue')) - self.assertEqual((0, 255, 0), + self.assertEqual((0, 128, 0), color_util.color_name_to_rgb('green')) + # spaces in the name + self.assertEqual((72, 61, 139), + color_util.color_name_to_rgb('dark slate blue')) + + # spaces removed from name + self.assertEqual((72, 61, 139), + color_util.color_name_to_rgb('darkslateblue')) + self.assertEqual((72, 61, 139), + color_util.color_name_to_rgb('dark slateblue')) + self.assertEqual((72, 61, 139), + color_util.color_name_to_rgb('darkslate blue')) + def test_color_name_to_rgb_unknown_name_default_white(self): """Test color_name_to_rgb.""" self.assertEqual((255, 255, 255),