diff options
-rw-r--r-- | src/csscolorparser/csscolorparser.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/csscolorparser/csscolorparser.cpp b/src/csscolorparser/csscolorparser.cpp index d52c6280cf..938470f192 100644 --- a/src/csscolorparser/csscolorparser.cpp +++ b/src/csscolorparser/csscolorparser.cpp @@ -29,12 +29,12 @@ #include <sstream> #include <cmath> #include <algorithm> -#include <map> using namespace CSSColorParser; // http://www.w3.org/TR/css3-color/ -const std::map<std::string, Color> kCSSColorTable = { +struct NamedColor { const char *const name; const Color color; }; +const NamedColor namedColors[] = { { "transparent", { 0, 0, 0, 0 } }, { "aliceblue", { 240, 248, 255, 1 } }, { "antiquewhite", { 250, 235, 215, 1 } }, { "aqua", { 0, 255, 255, 1 } }, { "aquamarine", { 127, 255, 212, 1 } }, { "azure", { 240, 255, 255, 1 } }, @@ -111,6 +111,8 @@ const std::map<std::string, Color> kCSSColorTable = { { "yellow", { 255, 255, 0, 1 } }, { "yellowgreen", { 154, 205, 50, 1 } } }; +const size_t namedColorCount = sizeof (namedColors) / sizeof (NamedColor); + template <typename T> uint8_t clamp_css_byte(T i) { // Clamp to integer 0 .. 255. @@ -187,10 +189,11 @@ Color CSSColorParser::parse(const std::string& css_str) { // Convert to lowercase. std::transform(str.begin(), str.end(), str.begin(), ::tolower); - // Color keywords (and transparent) lookup. - auto it = kCSSColorTable.find(str); - if (it != kCSSColorTable.end()) { - return it->second; + + for (size_t i = 0; i < namedColorCount; i++) { + if (str == namedColors[i].name) { + return namedColors[i].color; + } } // #abc and #abc123 syntax. |