From 71bfe5498d40ff5bf7b512b3ab9e43ead8a3ce51 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sat, 27 Dec 2014 12:09:28 +0000 Subject: [PATCH] Refactor color functions --- src/color.cc | 63 ++++++++++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/src/color.cc b/src/color.cc index 8f1b01c1..3abfd95f 100644 --- a/src/color.cc +++ b/src/color.cc @@ -1,5 +1,6 @@ #include "color.hh" +#include "containers.hh" #include "exception.hh" #include "regex.hh" @@ -8,30 +9,28 @@ namespace Kakoune { +static constexpr const char* color_names[] = { + "default", + "black", + "red", + "green", + "yellow", + "blue", + "magenta", + "cyan", + "white", +}; + bool is_color_name(StringView color) { - return color == "default" or - color == "black" or - color == "red" or - color == "green" or - color == "yellow" or - color == "blue" or - color == "magenta" or - color == "cyan" or - color == "white"; + return contains(color_names, color); } Color str_to_color(StringView color) { - if (color == "default") return Colors::Default; - if (color == "black") return Colors::Black; - if (color == "red") return Colors::Red; - if (color == "green") return Colors::Green; - if (color == "yellow") return Colors::Yellow; - if (color == "blue") return Colors::Blue; - if (color == "magenta") return Colors::Magenta; - if (color == "cyan") return Colors::Cyan; - if (color == "white") return Colors::White; + auto it = find_if(color_names, [&](const char* c){ return color == c; }); + if (it != std::end(color_names)) + return static_cast(it - color_names); static const Regex rgb_regex{"rgb:[0-9a-fA-F]{6}"}; if (regex_match(color.begin(), color.end(), rgb_regex)) @@ -48,26 +47,18 @@ Color str_to_color(StringView color) String color_to_str(Color color) { - switch (color.color) + if (color.color == Colors::RGB) { - case Colors::Default: return "default"; - case Colors::Black: return "black"; - case Colors::Red: return "red"; - case Colors::Green: return "green"; - case Colors::Yellow: return "yellow"; - case Colors::Blue: return "blue"; - case Colors::Magenta: return "magenta"; - case Colors::Cyan: return "cyan"; - case Colors::White: return "white"; - case Colors::RGB: - { - char buffer[11]; - sprintf(buffer, "rgb:%02x%02x%02x", color.r, color.g, color.b); - return buffer; - } + char buffer[11]; + sprintf(buffer, "rgb:%02x%02x%02x", color.r, color.g, color.b); + return buffer; + } + else + { + size_t index = static_cast(color.color); + kak_assert(index < std::end(color_names) - std::begin(color_names)); + return color_names[index]; } - kak_assert(false); - return "default"; } String option_to_string(Color color)