diff --git a/src/internal/HtmlColor.cpp b/src/internal/HtmlColor.cpp
index 43750d6a..a921089c 100644
--- a/src/internal/HtmlColor.cpp
+++ b/src/internal/HtmlColor.cpp
@@ -25,389 +25,455 @@ License along with NeoPixel. If not, see
-------------------------------------------------------------------------*/
#include "HtmlColor.h"
+// ------------------------------------------------------------------------
+// HtmlColorPair represents an association between a name and a HTML color code
+// ------------------------------------------------------------------------
+struct HtmlColorPair
+{
+ PGM_P Name;
+ uint32_t Color;
+};
+
/* HTML4 color names */
-static const char name_aqua[] PROGMEM = "aqua";
-static const char name_black[] PROGMEM = "black";
-static const char name_blue[] PROGMEM = "blue";
-static const char name_fuchsia[] PROGMEM = "fuchsia";
-static const char name_gray[] PROGMEM = "gray";
-static const char name_green[] PROGMEM = "green";
-static const char name_lime[] PROGMEM = "lime";
-static const char name_maroon[] PROGMEM = "maroon";
-static const char name_navy[] PROGMEM = "navy";
-static const char name_olive[] PROGMEM = "olive";
-static const char name_orange[] PROGMEM = "orange";
-static const char name_purple[] PROGMEM = "purple";
-static const char name_red[] PROGMEM = "red";
-static const char name_silver[] PROGMEM = "silver";
-static const char name_teal[] PROGMEM = "teal";
-static const char name_white[] PROGMEM = "white";
-static const char name_yellow[] PROGMEM = "yellow";
+static const char c_HtmlNameAqua[] PROGMEM = "aqua";
+static const char c_HtmlNameBlack[] PROGMEM = "black";
+static const char c_HtmlNameBlue[] PROGMEM = "blue";
+static const char c_HtmlNameFuchsia[] PROGMEM = "fuchsia";
+static const char c_HtmlNameGray[] PROGMEM = "gray";
+static const char c_HtmlNameGreen[] PROGMEM = "green";
+static const char c_HtmlNameLime[] PROGMEM = "lime";
+static const char c_HtmlNameMaroon[] PROGMEM = "maroon";
+static const char c_HtmlNameNavy[] PROGMEM = "navy";
+static const char c_HtmlNameOlive[] PROGMEM = "olive";
+static const char c_HtmlNameOrange[] PROGMEM = "orange";
+static const char c_HtmlNamePurple[] PROGMEM = "purple";
+static const char c_HtmlNameRed[] PROGMEM = "red";
+static const char c_HtmlNameSilver[] PROGMEM = "silver";
+static const char c_HtmlNameTeal[] PROGMEM = "teal";
+static const char c_HtmlNameWhite[] PROGMEM = "white";
+static const char c_HtmlNameYellow[] PROGMEM = "yellow";
#if defined(USE_CSS3_COLORS)
/* Additional CSS3 color names */
-static const char name_aliceblue[] PROGMEM = "aliceblue";
-static const char name_antiquewhite[] PROGMEM = "antiquewhite";
-static const char name_aquamarine[] PROGMEM = "aquamarine";
-static const char name_azure[] PROGMEM = "azure";
-static const char name_beige[] PROGMEM = "beige";
-static const char name_bisque[] PROGMEM = "bisque";
-static const char name_blanchedalmond[] PROGMEM = "blanchedalmond";
-static const char name_blueviolet[] PROGMEM = "blueviolet";
-static const char name_brown[] PROGMEM = "brown";
-static const char name_burlywood[] PROGMEM = "burlywood";
-static const char name_cadetblue[] PROGMEM = "cadetblue";
-static const char name_chartreuse[] PROGMEM = "chartreuse";
-static const char name_chocolate[] PROGMEM = "chocolate";
-static const char name_coral[] PROGMEM = "coral";
-static const char name_cornflowerblue[] PROGMEM = "cornflowerblue";
-static const char name_cornsilk[] PROGMEM = "cornsilk";
-static const char name_crimson[] PROGMEM = "crimson";
-static const char name_cyan[] PROGMEM = "cyan";
-static const char name_darkblue[] PROGMEM = "darkblue";
-static const char name_darkcyan[] PROGMEM = "darkcyan";
-static const char name_darkgoldenrod[] PROGMEM = "darkgoldenrod";
-static const char name_darkgray[] PROGMEM = "darkgray";
-static const char name_darkgreen[] PROGMEM = "darkgreen";
-static const char name_darkgrey[] PROGMEM = "darkgrey";
-static const char name_darkkhaki[] PROGMEM = "darkkhaki";
-static const char name_darkmagenta[] PROGMEM = "darkmagenta";
-static const char name_darkolivegreen[] PROGMEM = "darkolivegreen";
-static const char name_darkorange[] PROGMEM = "darkorange";
-static const char name_darkorchid[] PROGMEM = "darkorchid";
-static const char name_darkred[] PROGMEM = "darkred";
-static const char name_darksalmon[] PROGMEM = "darksalmon";
-static const char name_darkseagreen[] PROGMEM = "darkseagreen";
-static const char name_darkslateblue[] PROGMEM = "darkslateblue";
-static const char name_darkslategray[] PROGMEM = "darkslategray";
-static const char name_darkslategrey[] PROGMEM = "darkslategrey";
-static const char name_darkturquoise[] PROGMEM = "darkturquoise";
-static const char name_darkviolet[] PROGMEM = "darkviolet";
-static const char name_deeppink[] PROGMEM = "deeppink";
-static const char name_deepskyblue[] PROGMEM = "deepskyblue";
-static const char name_dimgray[] PROGMEM = "dimgray";
-static const char name_dimgrey[] PROGMEM = "dimgrey";
-static const char name_dodgerblue[] PROGMEM = "dodgerblue";
-static const char name_firebrick[] PROGMEM = "firebrick";
-static const char name_floralwhite[] PROGMEM = "floralwhite";
-static const char name_forestgreen[] PROGMEM = "forestgreen";
-static const char name_gainsboro[] PROGMEM = "gainsboro";
-static const char name_ghostwhite[] PROGMEM = "ghostwhite";
-static const char name_gold[] PROGMEM = "gold";
-static const char name_goldenrod[] PROGMEM = "goldenrod";
-static const char name_greenyellow[] PROGMEM = "greenyellow";
-static const char name_grey[] PROGMEM = "grey";
-static const char name_honeydew[] PROGMEM = "honeydew";
-static const char name_hotpink[] PROGMEM = "hotpink";
-static const char name_indianred[] PROGMEM = "indianred";
-static const char name_indigo[] PROGMEM = "indigo";
-static const char name_ivory[] PROGMEM = "ivory";
-static const char name_khaki[] PROGMEM = "khaki";
-static const char name_lavender[] PROGMEM = "lavender";
-static const char name_lavenderblush[] PROGMEM = "lavenderblush";
-static const char name_lawngreen[] PROGMEM = "lawngreen";
-static const char name_lemonchiffon[] PROGMEM = "lemonchiffon";
-static const char name_lightblue[] PROGMEM = "lightblue";
-static const char name_lightcoral[] PROGMEM = "lightcoral";
-static const char name_lightcyan[] PROGMEM = "lightcyan";
-static const char name_lightgoldenrodyellow[] PROGMEM = "lightgoldenrodyellow";
-static const char name_lightgray[] PROGMEM = "lightgray";
-static const char name_lightgreen[] PROGMEM = "lightgreen";
-static const char name_lightgrey[] PROGMEM = "lightgrey";
-static const char name_lightpink[] PROGMEM = "lightpink";
-static const char name_lightsalmon[] PROGMEM = "lightsalmon";
-static const char name_lightseagreen[] PROGMEM = "lightseagreen";
-static const char name_lightskyblue[] PROGMEM = "lightskyblue";
-static const char name_lightslategray[] PROGMEM = "lightslategray";
-static const char name_lightslategrey[] PROGMEM = "lightslategrey";
-static const char name_lightsteelblue[] PROGMEM = "lightsteelblue";
-static const char name_lightyellow[] PROGMEM = "lightyellow";
-static const char name_limegreen[] PROGMEM = "limegreen";
-static const char name_linen[] PROGMEM = "linen";
-static const char name_magenta[] PROGMEM = "magenta";
-static const char name_mediumaquamarine[] PROGMEM = "mediumaquamarine";
-static const char name_mediumblue[] PROGMEM = "mediumblue";
-static const char name_mediumorchid[] PROGMEM = "mediumorchid";
-static const char name_mediumpurple[] PROGMEM = "mediumpurple";
-static const char name_mediumseagreen[] PROGMEM = "mediumseagreen";
-static const char name_mediumslateblue[] PROGMEM = "mediumslateblue";
-static const char name_mediumspringgreen[] PROGMEM = "mediumspringgreen";
-static const char name_mediumturquoise[] PROGMEM = "mediumturquoise";
-static const char name_mediumvioletred[] PROGMEM = "mediumvioletred";
-static const char name_midnightblue[] PROGMEM = "midnightblue";
-static const char name_mintcream[] PROGMEM = "mintcream";
-static const char name_mistyrose[] PROGMEM = "mistyrose";
-static const char name_moccasin[] PROGMEM = "moccasin";
-static const char name_navajowhite[] PROGMEM = "navajowhite";
-static const char name_oldlace[] PROGMEM = "oldlace";
-static const char name_olivedrab[] PROGMEM = "olivedrab";
-static const char name_orangered[] PROGMEM = "orangered";
-static const char name_orchid[] PROGMEM = "orchid";
-static const char name_palegoldenrod[] PROGMEM = "palegoldenrod";
-static const char name_palegreen[] PROGMEM = "palegreen";
-static const char name_paleturquoise[] PROGMEM = "paleturquoise";
-static const char name_palevioletred[] PROGMEM = "palevioletred";
-static const char name_papayawhip[] PROGMEM = "papayawhip";
-static const char name_peachpuff[] PROGMEM = "peachpuff";
-static const char name_peru[] PROGMEM = "peru";
-static const char name_pink[] PROGMEM = "pink";
-static const char name_plum[] PROGMEM = "plum";
-static const char name_powderblue[] PROGMEM = "powderblue";
-static const char name_rosybrown[] PROGMEM = "rosybrown";
-static const char name_royalblue[] PROGMEM = "royalblue";
-static const char name_saddlebrown[] PROGMEM = "saddlebrown";
-static const char name_salmon[] PROGMEM = "salmon";
-static const char name_sandybrown[] PROGMEM = "sandybrown";
-static const char name_seagreen[] PROGMEM = "seagreen";
-static const char name_seashell[] PROGMEM = "seashell";
-static const char name_sienna[] PROGMEM = "sienna";
-static const char name_skyblue[] PROGMEM = "skyblue";
-static const char name_slateblue[] PROGMEM = "slateblue";
-static const char name_slategray[] PROGMEM = "slategray";
-static const char name_slategrey[] PROGMEM = "slategrey";
-static const char name_snow[] PROGMEM = "snow";
-static const char name_springgreen[] PROGMEM = "springgreen";
-static const char name_steelblue[] PROGMEM = "steelblue";
-static const char name_tan[] PROGMEM = "tan";
-static const char name_thistle[] PROGMEM = "thistle";
-static const char name_tomato[] PROGMEM = "tomato";
-static const char name_turquoise[] PROGMEM = "turquoise";
-static const char name_violet[] PROGMEM = "violet";
-static const char name_wheat[] PROGMEM = "wheat";
-static const char name_whitesmoke[] PROGMEM = "whitesmoke";
-static const char name_yellowgreen[] PROGMEM = "yellowgreen";
+static const char c_HtmlNameAliceBlue[] PROGMEM = "aliceblue";
+static const char c_HtmlNameAntiqueWhite[] PROGMEM = "antiquewhite";
+static const char c_HtmlNameAquamarine[] PROGMEM = "aquamarine";
+static const char c_HtmlNameAzure[] PROGMEM = "azure";
+static const char c_HtmlNameBeige[] PROGMEM = "beige";
+static const char c_HtmlNameBisque[] PROGMEM = "bisque";
+static const char c_HtmlNameBlanchedAlmond[] PROGMEM = "blanchedalmond";
+static const char c_HtmlNameBlueViolet[] PROGMEM = "blueviolet";
+static const char c_HtmlNameBrown[] PROGMEM = "brown";
+static const char c_HtmlNameBurlyWood[] PROGMEM = "burlywood";
+static const char c_HtmlNameCadetBlue[] PROGMEM = "cadetblue";
+static const char c_HtmlNameChartreuse[] PROGMEM = "chartreuse";
+static const char c_HtmlNameChocolate[] PROGMEM = "chocolate";
+static const char c_HtmlNameCoral[] PROGMEM = "coral";
+static const char c_HtmlNameCornflowerBlue[] PROGMEM = "cornflowerblue";
+static const char c_HtmlNameCornsilk[] PROGMEM = "cornsilk";
+static const char c_HtmlNameCrimson[] PROGMEM = "crimson";
+static const char c_HtmlNameCyan[] PROGMEM = "cyan";
+static const char c_HtmlNameDarkBlue[] PROGMEM = "darkblue";
+static const char c_HtmlNameDarkCyan[] PROGMEM = "darkcyan";
+static const char c_HtmlNameDarkGoldenrod[] PROGMEM = "darkgoldenrod";
+static const char c_HtmlNameDarkGray[] PROGMEM = "darkgray";
+static const char c_HtmlNameDarkGreen[] PROGMEM = "darkgreen";
+static const char c_HtmlNameDarkGrey[] PROGMEM = "darkgrey";
+static const char c_HtmlNameDarkKhaki[] PROGMEM = "darkkhaki";
+static const char c_HtmlNameDarkMagenta[] PROGMEM = "darkmagenta";
+static const char c_HtmlNameDarkOliveGreen[] PROGMEM = "darkolivegreen";
+static const char c_HtmlNameDarkOrange[] PROGMEM = "darkorange";
+static const char c_HtmlNameDarkOrchid[] PROGMEM = "darkorchid";
+static const char c_HtmlNameDarkRed[] PROGMEM = "darkred";
+static const char c_HtmlNameDarkSalmon[] PROGMEM = "darksalmon";
+static const char c_HtmlNameDarkSeaGreen[] PROGMEM = "darkseagreen";
+static const char c_HtmlNameDarkSlateBlue[] PROGMEM = "darkslateblue";
+static const char c_HtmlNameDarkSlateGray[] PROGMEM = "darkslategray";
+static const char c_HtmlNameDarkSlateGrey[] PROGMEM = "darkslategrey";
+static const char c_HtmlNameDarkTurquoise[] PROGMEM = "darkturquoise";
+static const char c_HtmlNameDarkViolet[] PROGMEM = "darkviolet";
+static const char c_HtmlNameDeepPink[] PROGMEM = "deeppink";
+static const char c_HtmlNameDeepSkyBlue[] PROGMEM = "deepskyblue";
+static const char c_HtmlNameDimGray[] PROGMEM = "dimgray";
+static const char c_HtmlNameDimGrey[] PROGMEM = "dimgrey";
+static const char c_HtmlNameDodgerBlue[] PROGMEM = "dodgerblue";
+static const char c_HtmlNameFirebrick[] PROGMEM = "firebrick";
+static const char c_HtmlNameFloralWhite[] PROGMEM = "floralwhite";
+static const char c_HtmlNameForestGreen[] PROGMEM = "forestgreen";
+static const char c_HtmlNameGainsboro[] PROGMEM = "gainsboro";
+static const char c_HtmlNameGhostWhite[] PROGMEM = "ghostwhite";
+static const char c_HtmlNameGold[] PROGMEM = "gold";
+static const char c_HtmlNameGoldenrod[] PROGMEM = "goldenrod";
+static const char c_HtmlNameGreenYellow[] PROGMEM = "greenyellow";
+static const char c_HtmlNameGrey[] PROGMEM = "grey";
+static const char c_HtmlNameHoneydew[] PROGMEM = "honeydew";
+static const char c_HtmlNameHotPink[] PROGMEM = "hotpink";
+static const char c_HtmlNameIndianRed[] PROGMEM = "indianred";
+static const char c_HtmlNameIndigo[] PROGMEM = "indigo";
+static const char c_HtmlNameIvory[] PROGMEM = "ivory";
+static const char c_HtmlNameKhaki[] PROGMEM = "khaki";
+static const char c_HtmlNameLavender[] PROGMEM = "lavender";
+static const char c_HtmlNameLavenderBlush[] PROGMEM = "lavenderblush";
+static const char c_HtmlNameLawnGreen[] PROGMEM = "lawngreen";
+static const char c_HtmlNameLemonChiffon[] PROGMEM = "lemonchiffon";
+static const char c_HtmlNameLightBlue[] PROGMEM = "lightblue";
+static const char c_HtmlNameLightCoral[] PROGMEM = "lightcoral";
+static const char c_HtmlNameLightCyan[] PROGMEM = "lightcyan";
+static const char c_HtmlNameLightGoldenrodYellow[] PROGMEM = "lightgoldenrodyellow";
+static const char c_HtmlNameLightGray[] PROGMEM = "lightgray";
+static const char c_HtmlNameLightGreen[] PROGMEM = "lightgreen";
+static const char c_HtmlNameLightGrey[] PROGMEM = "lightgrey";
+static const char c_HtmlNameLightPink[] PROGMEM = "lightpink";
+static const char c_HtmlNameLightSalmon[] PROGMEM = "lightsalmon";
+static const char c_HtmlNameLightSeaGreen[] PROGMEM = "lightseagreen";
+static const char c_HtmlNameLightSkyBlue[] PROGMEM = "lightskyblue";
+static const char c_HtmlNameLightSlateGray[] PROGMEM = "lightslategray";
+static const char c_HtmlNameLightSlateGrey[] PROGMEM = "lightslategrey";
+static const char c_HtmlNameLightSteelBlue[] PROGMEM = "lightsteelblue";
+static const char c_HtmlNameLightYellow[] PROGMEM = "lightyellow";
+static const char c_HtmlNameLimeGreen[] PROGMEM = "limegreen";
+static const char c_HtmlNameLinen[] PROGMEM = "linen";
+static const char c_HtmlNameMagenta[] PROGMEM = "magenta";
+static const char c_HtmlNameMediumAquamarine[] PROGMEM = "mediumaquamarine";
+static const char c_HtmlNameMediumBlue[] PROGMEM = "mediumblue";
+static const char c_HtmlNameMediumOrchid[] PROGMEM = "mediumorchid";
+static const char c_HtmlNameMediumPurple[] PROGMEM = "mediumpurple";
+static const char c_HtmlNameMediumSeagreen[] PROGMEM = "mediumseagreen";
+static const char c_HtmlNameMediumSlateBlue[] PROGMEM = "mediumslateblue";
+static const char c_HtmlNameMediumSpringGreen[] PROGMEM = "mediumspringgreen";
+static const char c_HtmlNameMediumTurquoise[] PROGMEM = "mediumturquoise";
+static const char c_HtmlNameMediumVioletRed[] PROGMEM = "mediumvioletred";
+static const char c_HtmlNameMidnightBlue[] PROGMEM = "midnightblue";
+static const char c_HtmlNameMintCream[] PROGMEM = "mintcream";
+static const char c_HtmlNameMistyRose[] PROGMEM = "mistyrose";
+static const char c_HtmlNameMoccasin[] PROGMEM = "moccasin";
+static const char c_HtmlNameNavajoWhite[] PROGMEM = "navajowhite";
+static const char c_HtmlNameOldLace[] PROGMEM = "oldlace";
+static const char c_HtmlNameOliveDrab[] PROGMEM = "olivedrab";
+static const char c_HtmlNameOrangeRed[] PROGMEM = "orangered";
+static const char c_HtmlNameOrchid[] PROGMEM = "orchid";
+static const char c_HtmlNamePaleGoldenrod[] PROGMEM = "palegoldenrod";
+static const char c_HtmlNamePaleGreen[] PROGMEM = "palegreen";
+static const char c_HtmlNamePaleTurquoise[] PROGMEM = "paleturquoise";
+static const char c_HtmlNamePaleVioletRed[] PROGMEM = "palevioletred";
+static const char c_HtmlNamePapayaWhip[] PROGMEM = "papayawhip";
+static const char c_HtmlNamePeachPuff[] PROGMEM = "peachpuff";
+static const char c_HtmlNamePeru[] PROGMEM = "peru";
+static const char c_HtmlNamePink[] PROGMEM = "pink";
+static const char c_HtmlNamePlum[] PROGMEM = "plum";
+static const char c_HtmlNamePowderBlue[] PROGMEM = "powderblue";
+static const char c_HtmlNameRosyBrown[] PROGMEM = "rosybrown";
+static const char c_HtmlNameRoyalBlue[] PROGMEM = "royalblue";
+static const char c_HtmlNameSaddleBrown[] PROGMEM = "saddlebrown";
+static const char c_HtmlNameSalmon[] PROGMEM = "salmon";
+static const char c_HtmlNameSandyBrown[] PROGMEM = "sandybrown";
+static const char c_HtmlNameSeaGreen[] PROGMEM = "seagreen";
+static const char c_HtmlNameSeaShell[] PROGMEM = "seashell";
+static const char c_HtmlNameSienna[] PROGMEM = "sienna";
+static const char c_HtmlNameSkyBlue[] PROGMEM = "skyblue";
+static const char c_HtmlNameSlateBlue[] PROGMEM = "slateblue";
+static const char c_HtmlNameSlateGray[] PROGMEM = "slategray";
+static const char c_HtmlNameSlateGrey[] PROGMEM = "slategrey";
+static const char c_HtmlNameSnow[] PROGMEM = "snow";
+static const char c_HtmlNameSpringGreen[] PROGMEM = "springgreen";
+static const char c_HtmlNameSteelBlue[] PROGMEM = "steelblue";
+static const char c_HtmlNameTan[] PROGMEM = "tan";
+static const char c_HtmlNameThistle[] PROGMEM = "thistle";
+static const char c_HtmlNameTomato[] PROGMEM = "tomato";
+static const char c_HtmlNameTurquoise[] PROGMEM = "turquoise";
+static const char c_HtmlNameViolet[] PROGMEM = "violet";
+static const char c_HtmlNameWheat[] PROGMEM = "wheat";
+static const char c_HtmlNameWhiteSmoke[] PROGMEM = "whitesmoke";
+static const char c_HtmlNameYellowGreen[] PROGMEM = "yellowgreen";
#endif
-const HtmlColorName HtmlColor::ColorNames[] PROGMEM = {
+const HtmlColorPair c_ColorNames[] PROGMEM = {
#if defined(USE_CSS3_COLORS)
- { name_aliceblue, 0xf0f8ff},
- { name_antiquewhite, 0xfaebd7},
- { name_aqua, 0xffff},
- { name_aquamarine, 0x7fffd4},
- { name_azure, 0xf0ffff},
- { name_beige, 0xf5f5dc},
- { name_bisque, 0xffe4c4},
- { name_black, 0x0},
- { name_blanchedalmond, 0xffebcd},
- { name_blue, 0xff},
- { name_blueviolet, 0x8a2be2},
- { name_brown, 0xa52a2a},
- { name_burlywood, 0xdeb887},
- { name_cadetblue, 0x5f9ea0},
- { name_chartreuse, 0x7fff00},
- { name_chocolate, 0xd2691e},
- { name_coral, 0xff7f50},
- { name_cornflowerblue, 0x6495ed},
- { name_cornsilk, 0xfff8dc},
- { name_crimson, 0xdc143c},
- { name_cyan, 0xffff},
- { name_darkblue, 0x8b},
- { name_darkcyan, 0x8b8b},
- { name_darkgoldenrod, 0xb8860b},
- { name_darkgray, 0xa9a9a9},
- { name_darkgreen, 0x6400},
- { name_darkgrey, 0xa9a9a9},
- { name_darkkhaki, 0xbdb76b},
- { name_darkmagenta, 0x8b008b},
- { name_darkolivegreen, 0x556b2f},
- { name_darkorange, 0xff8c00},
- { name_darkorchid, 0x9932cc},
- { name_darkred, 0x8b0000},
- { name_darksalmon, 0xe9967a},
- { name_darkseagreen, 0x8fbc8f},
- { name_darkslateblue, 0x483d8b},
- { name_darkslategray, 0x2f4f4f},
- { name_darkslategrey, 0x2f4f4f},
- { name_darkturquoise, 0xced1},
- { name_darkviolet, 0x9400d3},
- { name_deeppink, 0xff1493},
- { name_deepskyblue, 0xbfff},
- { name_dimgray, 0x696969},
- { name_dimgrey, 0x696969},
- { name_dodgerblue, 0x1e90ff},
- { name_firebrick, 0xb22222},
- { name_floralwhite, 0xfffaf0},
- { name_forestgreen, 0x228b22},
- { name_fuchsia, 0xff00ff},
- { name_gainsboro, 0xdcdcdc},
- { name_ghostwhite, 0xf8f8ff},
- { name_gold, 0xffd700},
- { name_goldenrod, 0xdaa520},
- { name_gray, 0x808080},
- { name_green, 0x8000},
- { name_greenyellow, 0xadff2f},
- { name_grey, 0x808080},
- { name_honeydew, 0xf0fff0},
- { name_hotpink, 0xff69b4},
- { name_indianred, 0xcd5c5c},
- { name_indigo, 0x4b0082},
- { name_ivory, 0xfffff0},
- { name_khaki, 0xf0e68c},
- { name_lavender, 0xe6e6fa},
- { name_lavenderblush, 0xfff0f5},
- { name_lawngreen, 0x7cfc00},
- { name_lemonchiffon, 0xfffacd},
- { name_lightblue, 0xadd8e6},
- { name_lightcoral, 0xf08080},
- { name_lightcyan, 0xe0ffff},
- { name_lightgoldenrodyellow, 0xfafad2},
- { name_lightgray, 0xd3d3d3},
- { name_lightgreen, 0x90ee90},
- { name_lightgrey, 0xd3d3d3},
- { name_lightpink, 0xffb6c1},
- { name_lightsalmon, 0xffa07a},
- { name_lightseagreen, 0x20b2aa},
- { name_lightskyblue, 0x87cefa},
- { name_lightslategray, 0x778899},
- { name_lightslategrey, 0x778899},
- { name_lightsteelblue, 0xb0c4de},
- { name_lightyellow, 0xffffe0},
- { name_lime, 0xff00},
- { name_limegreen, 0x32cd32},
- { name_linen, 0xfaf0e6},
- { name_magenta, 0xff00ff},
- { name_maroon, 0x800000},
- { name_mediumaquamarine, 0x66cdaa},
- { name_mediumblue, 0xcd},
- { name_mediumorchid, 0xba55d3},
- { name_mediumpurple, 0x9370d8},
- { name_mediumseagreen, 0x3cb371},
- { name_mediumslateblue, 0x7b68ee},
- { name_mediumspringgreen, 0xfa9a},
- { name_mediumturquoise, 0x48d1cc},
- { name_mediumvioletred, 0xc71585},
- { name_midnightblue, 0x191970},
- { name_mintcream, 0xf5fffa},
- { name_mistyrose, 0xffe4e1},
- { name_moccasin, 0xffe4b5},
- { name_navajowhite, 0xffdead},
- { name_navy, 0x80},
- { name_oldlace, 0xfdf5e6},
- { name_olive, 0x808000},
- { name_olivedrab, 0x6b8e23},
- { name_orange, 0xffa500},
- { name_orangered, 0xff4500},
- { name_orchid, 0xda70d6},
- { name_palegoldenrod, 0xeee8aa},
- { name_palegreen, 0x98fb98},
- { name_paleturquoise, 0xafeeee},
- { name_palevioletred, 0xd87093},
- { name_papayawhip, 0xffefd5},
- { name_peachpuff, 0xffdab9},
- { name_peru, 0xcd853f},
- { name_pink, 0xffc0cb},
- { name_plum, 0xdda0dd},
- { name_powderblue, 0xb0e0e6},
- { name_purple, 0x800080},
- { name_red, 0xff0000},
- { name_rosybrown, 0xbc8f8f},
- { name_royalblue, 0x4169e1},
- { name_saddlebrown, 0x8b4513},
- { name_salmon, 0xfa8072},
- { name_sandybrown, 0xf4a460},
- { name_seagreen, 0x2e8b57},
- { name_seashell, 0xfff5ee},
- { name_sienna, 0xa0522d},
- { name_silver, 0xc0c0c0},
- { name_skyblue, 0x87ceeb},
- { name_slateblue, 0x6a5acd},
- { name_slategray, 0x708090},
- { name_slategrey, 0x708090},
- { name_snow, 0xfffafa},
- { name_springgreen, 0xff7f},
- { name_steelblue, 0x4682b4},
- { name_tan, 0xd2b48c},
- { name_teal, 0x8080},
- { name_thistle, 0xd8bfd8},
- { name_tomato, 0xff6347},
- { name_turquoise, 0x40e0d0},
- { name_violet, 0xee82ee},
- { name_wheat, 0xf5deb3},
- { name_white, 0xffffff},
- { name_whitesmoke, 0xf5f5f5},
- { name_yellow, 0xffff00},
- { name_yellowgreen, 0x9acd32},
+ { c_HtmlNameAliceBlue, 0xf0f8ff},
+ { c_HtmlNameAntiqueWhite, 0xfaebd7},
+ { c_HtmlNameAqua, 0xffff},
+ { c_HtmlNameAquamarine, 0x7fffd4},
+ { c_HtmlNameAzure, 0xf0ffff},
+ { c_HtmlNameBeige, 0xf5f5dc},
+ { c_HtmlNameBisque, 0xffe4c4},
+ { c_HtmlNameBlack, 0x0},
+ { c_HtmlNameBlanchedAlmond, 0xffebcd},
+ { c_HtmlNameBlue, 0xff},
+ { c_HtmlNameBlueViolet, 0x8a2be2},
+ { c_HtmlNameBrown, 0xa52a2a},
+ { c_HtmlNameBurlyWood, 0xdeb887},
+ { c_HtmlNameCadetBlue, 0x5f9ea0},
+ { c_HtmlNameChartreuse, 0x7fff00},
+ { c_HtmlNameChocolate, 0xd2691e},
+ { c_HtmlNameCoral, 0xff7f50},
+ { c_HtmlNameCornflowerBlue, 0x6495ed},
+ { c_HtmlNameCornsilk, 0xfff8dc},
+ { c_HtmlNameCrimson, 0xdc143c},
+ { c_HtmlNameCyan, 0xffff},
+ { c_HtmlNameDarkBlue, 0x8b},
+ { c_HtmlNameDarkCyan, 0x8b8b},
+ { c_HtmlNameDarkGoldenrod, 0xb8860b},
+ { c_HtmlNameDarkGray, 0xa9a9a9},
+ { c_HtmlNameDarkGreen, 0x6400},
+ { c_HtmlNameDarkGrey, 0xa9a9a9},
+ { c_HtmlNameDarkKhaki, 0xbdb76b},
+ { c_HtmlNameDarkMagenta, 0x8b008b},
+ { c_HtmlNameDarkOliveGreen, 0x556b2f},
+ { c_HtmlNameDarkOrange, 0xff8c00},
+ { c_HtmlNameDarkOrchid, 0x9932cc},
+ { c_HtmlNameDarkRed, 0x8b0000},
+ { c_HtmlNameDarkSalmon, 0xe9967a},
+ { c_HtmlNameDarkSeaGreen, 0x8fbc8f},
+ { c_HtmlNameDarkSlateBlue, 0x483d8b},
+ { c_HtmlNameDarkSlateGray, 0x2f4f4f},
+ { c_HtmlNameDarkSlateGrey, 0x2f4f4f},
+ { c_HtmlNameDarkTurquoise, 0xced1},
+ { c_HtmlNameDarkViolet, 0x9400d3},
+ { c_HtmlNameDeepPink, 0xff1493},
+ { c_HtmlNameDeepSkyBlue, 0xbfff},
+ { c_HtmlNameDimGray, 0x696969},
+ { c_HtmlNameDimGrey, 0x696969},
+ { c_HtmlNameDodgerBlue, 0x1e90ff},
+ { c_HtmlNameFirebrick, 0xb22222},
+ { c_HtmlNameFloralWhite, 0xfffaf0},
+ { c_HtmlNameForestGreen, 0x228b22},
+ { c_HtmlNameFuchsia, 0xff00ff},
+ { c_HtmlNameGainsboro, 0xdcdcdc},
+ { c_HtmlNameGhostWhite, 0xf8f8ff},
+ { c_HtmlNameGold, 0xffd700},
+ { c_HtmlNameGoldenrod, 0xdaa520},
+ { c_HtmlNameGray, 0x808080},
+ { c_HtmlNameGreen, 0x8000},
+ { c_HtmlNameGreenYellow, 0xadff2f},
+ { c_HtmlNameGrey, 0x808080},
+ { c_HtmlNameHoneydew, 0xf0fff0},
+ { c_HtmlNameHotPink, 0xff69b4},
+ { c_HtmlNameIndianRed, 0xcd5c5c},
+ { c_HtmlNameIndigo, 0x4b0082},
+ { c_HtmlNameIvory, 0xfffff0},
+ { c_HtmlNameKhaki, 0xf0e68c},
+ { c_HtmlNameLavender, 0xe6e6fa},
+ { c_HtmlNameLavenderBlush, 0xfff0f5},
+ { c_HtmlNameLawnGreen, 0x7cfc00},
+ { c_HtmlNameLemonChiffon, 0xfffacd},
+ { c_HtmlNameLightBlue, 0xadd8e6},
+ { c_HtmlNameLightCoral, 0xf08080},
+ { c_HtmlNameLightCyan, 0xe0ffff},
+ { c_HtmlNameLightGoldenrodYellow, 0xfafad2},
+ { c_HtmlNameLightGray, 0xd3d3d3},
+ { c_HtmlNameLightGreen, 0x90ee90},
+ { c_HtmlNameLightGrey, 0xd3d3d3},
+ { c_HtmlNameLightPink, 0xffb6c1},
+ { c_HtmlNameLightSalmon, 0xffa07a},
+ { c_HtmlNameLightSeaGreen, 0x20b2aa},
+ { c_HtmlNameLightSkyBlue, 0x87cefa},
+ { c_HtmlNameLightSlateGray, 0x778899},
+ { c_HtmlNameLightSlateGrey, 0x778899},
+ { c_HtmlNameLightSteelBlue, 0xb0c4de},
+ { c_HtmlNameLightYellow, 0xffffe0},
+ { c_HtmlNameLime, 0xff00},
+ { c_HtmlNameLimeGreen, 0x32cd32},
+ { c_HtmlNameLinen, 0xfaf0e6},
+ { c_HtmlNameMagenta, 0xff00ff},
+ { c_HtmlNameMaroon, 0x800000},
+ { c_HtmlNameMediumAquamarine, 0x66cdaa},
+ { c_HtmlNameMediumBlue, 0xcd},
+ { c_HtmlNameMediumOrchid, 0xba55d3},
+ { c_HtmlNameMediumPurple, 0x9370d8},
+ { c_HtmlNameMediumSeagreen, 0x3cb371},
+ { c_HtmlNameMediumSlateBlue, 0x7b68ee},
+ { c_HtmlNameMediumSpringGreen, 0xfa9a},
+ { c_HtmlNameMediumTurquoise, 0x48d1cc},
+ { c_HtmlNameMediumVioletRed, 0xc71585},
+ { c_HtmlNameMidnightBlue, 0x191970},
+ { c_HtmlNameMintCream, 0xf5fffa},
+ { c_HtmlNameMistyRose, 0xffe4e1},
+ { c_HtmlNameMoccasin, 0xffe4b5},
+ { c_HtmlNameNavajoWhite, 0xffdead},
+ { c_HtmlNameNavy, 0x80},
+ { c_HtmlNameOldLace, 0xfdf5e6},
+ { c_HtmlNameOlive, 0x808000},
+ { c_HtmlNameOliveDrab, 0x6b8e23},
+ { c_HtmlNameOrange, 0xffa500},
+ { c_HtmlNameOrangeRed, 0xff4500},
+ { c_HtmlNameOrchid, 0xda70d6},
+ { c_HtmlNamePaleGoldenrod, 0xeee8aa},
+ { c_HtmlNamePaleGreen, 0x98fb98},
+ { c_HtmlNamePaleTurquoise, 0xafeeee},
+ { c_HtmlNamePaleVioletRed, 0xd87093},
+ { c_HtmlNamePapayaWhip, 0xffefd5},
+ { c_HtmlNamePeachPuff, 0xffdab9},
+ { c_HtmlNamePeru, 0xcd853f},
+ { c_HtmlNamePink, 0xffc0cb},
+ { c_HtmlNamePlum, 0xdda0dd},
+ { c_HtmlNamePowderBlue, 0xb0e0e6},
+ { c_HtmlNamePurple, 0x800080},
+ { c_HtmlNameRed, 0xff0000},
+ { c_HtmlNameRosyBrown, 0xbc8f8f},
+ { c_HtmlNameRoyalBlue, 0x4169e1},
+ { c_HtmlNameSaddleBrown, 0x8b4513},
+ { c_HtmlNameSalmon, 0xfa8072},
+ { c_HtmlNameSandyBrown, 0xf4a460},
+ { c_HtmlNameSeaGreen, 0x2e8b57},
+ { c_HtmlNameSeaShell, 0xfff5ee},
+ { c_HtmlNameSienna, 0xa0522d},
+ { c_HtmlNameSilver, 0xc0c0c0},
+ { c_HtmlNameSkyBlue, 0x87ceeb},
+ { c_HtmlNameSlateBlue, 0x6a5acd},
+ { c_HtmlNameSlateGray, 0x708090},
+ { c_HtmlNameSlateGrey, 0x708090},
+ { c_HtmlNameSnow, 0xfffafa},
+ { c_HtmlNameSpringGreen, 0xff7f},
+ { c_HtmlNameSteelBlue, 0x4682b4},
+ { c_HtmlNameTan, 0xd2b48c},
+ { c_HtmlNameTeal, 0x8080},
+ { c_HtmlNameThistle, 0xd8bfd8},
+ { c_HtmlNameTomato, 0xff6347},
+ { c_HtmlNameTurquoise, 0x40e0d0},
+ { c_HtmlNameViolet, 0xee82ee},
+ { c_HtmlNameWheat, 0xf5deb3},
+ { c_HtmlNameWhite, 0xffffff},
+ { c_HtmlNameWhiteSmoke, 0xf5f5f5},
+ { c_HtmlNameYellow, 0xffff00},
+ { c_HtmlNameYellowGreen, 0x9acd32},
#else
- { name_aqua, 0xffff},
- { name_black, 0x0},
- { name_blue, 0xff},
- { name_fuchsia, 0xff00ff},
- { name_gray, 0x808080},
- { name_green, 0x8000},
- { name_lime, 0xff00},
- { name_maroon, 0x800000},
- { name_navy, 0x80},
- { name_olive, 0x808000},
- { name_orange, 0xffa500},
- { name_purple, 0x800080},
- { name_red, 0xff0000},
- { name_silver, 0xc0c0c0},
- { name_teal, 0x8080},
- { name_white, 0xffffff},
- { name_yellow, 0xffff00},
+ { c_HtmlNameAqua, 0xffff},
+ { c_HtmlNameBlack, 0x0},
+ { c_HtmlNameBlue, 0xff},
+ { c_HtmlNameFuchsia, 0xff00ff},
+ { c_HtmlNameGray, 0x808080},
+ { c_HtmlNameGreen, 0x8000},
+ { c_HtmlNameLime, 0xff00},
+ { c_HtmlNameMaroon, 0x800000},
+ { c_HtmlNameNavy, 0x80},
+ { c_HtmlNameOlive, 0x808000},
+ { c_HtmlNameOrange, 0xffa500},
+ { c_HtmlNamePurple, 0x800080},
+ { c_HtmlNameRed, 0xff0000},
+ { c_HtmlNameSilver, 0xc0c0c0},
+ { c_HtmlNameTeal, 0x8080},
+ { c_HtmlNameWhite, 0xffffff},
+ { c_HtmlNameYellow, 0xffff00},
#endif
};
#ifndef pgm_read_ptr
-// ESP8266 doesn't define this macro, but it doesn't need it either.
+// ESP8266 doesn't define this macro
#define pgm_read_ptr(addr) (*reinterpret_cast(addr))
#endif
-bool HtmlColor::Parse(const char* name, size_t namelen)
+#ifndef countof
+#define countof(array) (sizeof(array)/sizeof(array[0]))
+#endif
+
+size_t HtmlColor::Parse(const char* name, size_t nameSize)
{
- if (name[0] == '#')
+ if (nameSize > 0)
{
- // Parse an hexadecimal notation "#rrbbgg" or "#rgb"
- if (namelen != 4 && namelen != 7)
+ if (name[0] == '#')
{
- return false;
- }
+ // Parse an hexadecimal notation "#rrbbgg" or "#rgb"
+ //
+ uint8_t temp[6]; // stores preconverted chars to hex values
+ uint8_t tempSize = 0;
- uint32_t color = 0;
- for (uint8_t i = 1; i < namelen; ++i)
- {
- char c = name[i];
- if (c >= '0' && c <= '9')
- {
- c -= '0';
- }
- else
+ for (uint8_t indexChar = 1; indexChar < nameSize && indexChar < 8; ++indexChar)
{
- // Convert a letter to lower case (only for ASCII letters)
- // It's faster & smaller than tolower()
- c |= 32;
- if (c >= 'a' && c <= 'f')
+ char c = name[indexChar];
+ if (c >= '0' && c <= '9')
{
- c = c - 'a' + 10;
+ c -= '0';
}
else
{
- return false;
+ // Convert a letter to lower case (only for ASCII letters)
+ // It's faster & smaller than tolower()
+ c |= 32;
+ if (c >= 'a' && c <= 'f')
+ {
+ c = c - 'a' + 10;
+ }
+ else
+ {
+ // we found an non hexidecimal char
+ // which could be null, deliminator, or other spacing
+ break;
+ }
}
+
+ temp[tempSize] = c;
+ tempSize++;
}
- color = color * 16 + c;
- if (namelen == 4)
+
+ if (tempSize != 3 && tempSize != 6)
{
- // 3 digit hexadecimal notation can be supported easily
- // duplicating digits.
- color = color * 16 + c;
+ // invalid count of numerical chars
+ return 0;
}
- }
- Color = color;
- return true;
- }
+ else
+ {
+ uint32_t color = 0;
+ for (uint8_t indexChar = 0; indexChar < tempSize; ++indexChar)
+ {
+ color = color * 16 + temp[indexChar];
+ if (tempSize == 3)
+ {
+ // 3 digit hexadecimal notation can be supported easily
+ // duplicating digits.
+ color = color * 16 + temp[indexChar];
+ }
+ }
- for (uint8_t i = 0; i < sizeof(ColorNames)/sizeof(ColorNames[0]); ++i)
- {
- const HtmlColorName* cptr = &ColorNames[i];
- PGM_P cname = (PGM_P)pgm_read_ptr(&cptr->Name);
- if (strncasecmp_P(name, cname, namelen) == 0 && strlen_P(cname) == namelen)
+ Color = color;
+ return tempSize;
+ }
+ }
+ else
{
- Color = pgm_read_dword(&cptr->Color);
- return true;
+ // parse a standard name for the color
+ //
+
+ // the normal list is small enough a binary search isn't interesting,
+ for (uint8_t indexName = 0; indexName < countof(c_ColorNames); ++indexName)
+ {
+ const HtmlColorPair* colorPair = &c_ColorNames[indexName];
+ PGM_P searchName = (PGM_P)pgm_read_ptr(&colorPair->Name);
+ size_t str1Size = nameSize;
+ const char* str1 = name;
+ const char* str2P = searchName;
+
+ uint16_t result;
+
+ while (str1Size > 0)
+ {
+ char ch1 = tolower(*str1++);
+ char ch2 = tolower(pgm_read_byte(str2P++));
+ result = ch1 - ch2;
+ if (result != 0 || ch2 == '\0')
+ {
+ if (ch2 == '\0' && !isalnum(ch1))
+ {
+ // the string continues but is not part of a
+ // valid color name,
+ // ends in white space, deliminator, etc
+ result = 0;
+ }
+ break;
+ }
+ result = -1; // have not reached the end of searchName;
+ str1Size--;
+ }
+
+ if (result == 0)
+ {
+ Color = pgm_read_dword(&colorPair->Color);
+ return nameSize - str1Size;
+ }
+ }
}
}
- return false;
+
+ return 0;
}
static inline char hexdigit(uint8_t v)
@@ -415,41 +481,46 @@ static inline char hexdigit(uint8_t v)
return v + (v < 10 ? '0' : 'a' - 10);
}
-size_t HtmlColor::ToString(char* buf, size_t buflen) const
+size_t HtmlColor::ToString(char* buf, size_t bufSize) const
{
- for (uint8_t i = 0; i < sizeof(ColorNames) / sizeof(ColorNames[0]); ++i)
+ // search for a color value/name pairs first
+ for (uint8_t indexName = 0; indexName < countof(c_ColorNames); ++indexName)
{
- const HtmlColorName* cptr = &ColorNames[i];
- if (pgm_read_dword(&cptr->Color) == Color)
+ const HtmlColorPair* colorPair = &c_ColorNames[indexName];
+ if (pgm_read_dword(&colorPair->Color) == Color)
{
- PGM_P name = (PGM_P)pgm_read_ptr(&cptr->Name);
- size_t namelen = strlen_P(name);
- if (buflen-- > 0)
- {
- buflen = min(buflen, namelen);
- memcpy_P(buf, name, buflen);
- buf[buflen] = 0;
- }
- return namelen;
+ PGM_P name = (PGM_P)pgm_read_ptr(&colorPair->Name);
+ strncpy_P(buf, name, bufSize);
+ return strlen_P(name);
}
}
- if (buflen-- > 0)
+ // no color name pair match, convert using numerical format
+ return ToNumericalString(buf, bufSize);
+}
+
+size_t HtmlColor::ToNumericalString(char* buf, size_t bufSize) const
+{
+ size_t bufLen = bufSize - 1;
+
+ if (bufLen-- > 0)
{
- if (buflen > 0)
+ if (bufLen > 0)
{
buf[0] = '#';
}
+
uint32_t color = Color;
- for (uint8_t i = 6; i > 0; i--)
+ for (uint8_t indexDigit = 6; indexDigit > 0; indexDigit--)
{
- if (buflen > i)
+ if (bufLen > indexDigit)
{
- buf[i] = hexdigit(color & 0x0000000f);
+ buf[indexDigit] = hexdigit(color & 0x0000000f);
}
color >>= 4;
}
- buf[min(buflen, 7)] = 0;
+
+ buf[min(bufLen, 7)] = 0;
}
return 7;
}
diff --git a/src/internal/HtmlColor.h b/src/internal/HtmlColor.h
index 2bf743f1..51a132b8 100644
--- a/src/internal/HtmlColor.h
+++ b/src/internal/HtmlColor.h
@@ -28,20 +28,9 @@ License along with NeoPixel. If not, see
#include
#include "RgbColor.h"
-#if defined(USE_CSS3_COLORS)
-#define MAX_HTML_COLOR_NAME_LEN 21
-#else
-#define MAX_HTML_COLOR_NAME_LEN 8
-#endif
-
-// ------------------------------------------------------------------------
-// HtmlColor represents an association between a name and a HTML color code
-// ------------------------------------------------------------------------
-struct HtmlColorName
-{
- PGM_P Name;
- uint32_t Color;
-};
+// Due to Arduino's lack of Project settings for symbols, library code (c,cpp)
+// files can't react to defines in sketch, so this must be defined here
+// #define USE_CSS3_COLORS 1
// ------------------------------------------------------------------------
// HtmlColor represents a color object that is represented by a single uint32
@@ -93,7 +82,13 @@ struct HtmlColor
// Parse a HTML4/CSS3 color name
//
// name - the color name
- // namelen - length of the name string
+ // nameSize - the max size of name to check
+ //
+ // returns - zero if failed, or the number of chars parsed
+ //
+ // It will stop parsing name when a null terminator is reached,
+ // nameSize is reached, no match is found in the name/color pair table, or
+ // a non-alphanumeric is read like seperators or whitespace.
//
// It accepts all standard HTML4 names and, if USE_CSS3_COLORS macro is
// defined, the extended color names defined in CSS3 standard also.
@@ -103,27 +98,48 @@ struct HtmlColor
//
// See https://www.w3.org/TR/css3-color/#SRGB
//
- // Name MUST be stripped of any leading or tailing whitespace.
+ // name must point to the first non-whitespace character to be parsed
+ // parsing will stop at the first non-alpha numeric
//
// Name MUST NOT be a PROGMEM pointer
// ------------------------------------------------------------------------
- bool Parse(const char* name, size_t namelen);
- bool Parse(const char* name) { return Parse(name, strlen(name)); }
- bool Parse(String const &name) { return Parse(name.c_str(), name.length()); }
+ size_t Parse(const char* name, size_t nameSize);
+
+ size_t Parse(const char* name)
+ {
+ return Parse(name, strlen(name) + 1);
+ }
+
+ size_t Parse(String const &name)
+ {
+ return Parse(name.c_str(), name.length() + 1);
+ }
// ------------------------------------------------------------------------
// Converts this color code to its HTML4/CSS3 name
//
- // buf - array of at least MAX_HTML_COLOR_NAME_LEN chars to store the name
- // len - actual length of buf array
+ // buf - buffer to write the string
+ // bufSize - actual size of buf array
//
- // It returns the space needed to write the color name not including the
- // final NUL char.
+ // It returns the number of chars required not including the NUL terminator.
//
// If there is not enough space in the buffer, it will write as many
// characters as allowed and will always finish the buffer with a NUL char
// ------------------------------------------------------------------------
- size_t ToString(char *buf, size_t len) const;
+ size_t ToString(char *buf, size_t bufSize) const;
+
+ // ------------------------------------------------------------------------
+ // Converts this color code to its HTML4/CSS3 numerical name
+ //
+ // buf - buffer to write the string
+ // bufSize - actual size of buf array
+ //
+ // It returns the number of chars required not including the NUL terminator.
+ //
+ // If there is not enough space in the buffer, it will write as many
+ // characters as allowed and will always finish the buffer with a NUL char
+ // ------------------------------------------------------------------------
+ size_t ToNumericalString(char* buf, size_t bufSize) const;
// ------------------------------------------------------------------------
// BilinearBlend between four colors by the amount defined by 2d variable
@@ -151,12 +167,5 @@ struct HtmlColor
// 0x0000ff is blue
// ------------------------------------------------------------------------
uint32_t Color;
-
-private:
- // ------------------------------------------------------------------------
- // Array with all color names and its corresponding color codes
- // The array ends with a NULL color name.
- // ------------------------------------------------------------------------
- static const HtmlColorName ColorNames[] PROGMEM;
};