From 889a27da7e532cfff95c684cc137b009545288c7 Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sun, 5 Feb 2023 00:41:47 +0100
Subject: lib.types.svg.color-keyword: init

---
 lib/svg-colors.json | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/types.nix       |  17 +++++-
 2 files changed, 164 insertions(+), 2 deletions(-)
 create mode 100644 lib/svg-colors.json

(limited to 'lib')

diff --git a/lib/svg-colors.json b/lib/svg-colors.json
new file mode 100644
index 0000000..834bf14
--- /dev/null
+++ b/lib/svg-colors.json
@@ -0,0 +1,149 @@
+[
+  "aliceblue",
+  "antiquewhite",
+  "aqua",
+  "aquamarine",
+  "azure",
+  "beige",
+  "bisque",
+  "black",
+  "blanchedalmond",
+  "blue",
+  "blueviolet",
+  "brown",
+  "burlywood",
+  "cadetblue",
+  "chartreuse",
+  "chocolate",
+  "coral",
+  "cornflowerblue",
+  "cornsilk",
+  "crimson",
+  "cyan",
+  "darkblue",
+  "darkcyan",
+  "darkgoldenrod",
+  "darkgray",
+  "darkgreen",
+  "darkgrey",
+  "darkkhaki",
+  "darkmagenta",
+  "darkolivegreen",
+  "darkorange",
+  "darkorchid",
+  "darkred",
+  "darksalmon",
+  "darkseagreen",
+  "darkslateblue",
+  "darkslategray",
+  "darkslategrey",
+  "darkturquoise",
+  "darkviolet",
+  "deeppink",
+  "deepskyblue",
+  "dimgray",
+  "dimgrey",
+  "dodgerblue",
+  "firebrick",
+  "floralwhite",
+  "forestgreen",
+  "fuchsia",
+  "gainsboro",
+  "ghostwhite",
+  "gold",
+  "goldenrod",
+  "gray",
+  "green",
+  "greenyellow",
+  "grey",
+  "honeydew",
+  "hotpink",
+  "indianred",
+  "indigo",
+  "ivory",
+  "khaki",
+  "lavender",
+  "lavenderblush",
+  "lawngreen",
+  "lemonchiffon",
+  "lightblue",
+  "lightcoral",
+  "lightcyan",
+  "lightgoldenrodyellow",
+  "lightgray",
+  "lightgreen",
+  "lightgrey",
+  "lightpink",
+  "lightsalmon",
+  "lightseagreen",
+  "lightskyblue",
+  "lightslategray",
+  "lightslategrey",
+  "lightsteelblue",
+  "lightyellow",
+  "lime",
+  "limegreen",
+  "linen",
+  "magenta",
+  "maroon",
+  "mediumaquamarine",
+  "mediumblue",
+  "mediumorchid",
+  "mediumpurple",
+  "mediumseagreen",
+  "mediumslateblue",
+  "mediumspringgreen",
+  "mediumturquoise",
+  "mediumvioletred",
+  "midnightblue",
+  "mintcream",
+  "mistyrose",
+  "moccasin",
+  "navajowhite",
+  "navy",
+  "oldlace",
+  "olive",
+  "olivedrab",
+  "orange",
+  "orangered",
+  "orchid",
+  "palegoldenrod",
+  "palegreen",
+  "paleturquoise",
+  "palevioletred",
+  "papayawhip",
+  "peachpuff",
+  "peru",
+  "pink",
+  "plum",
+  "powderblue",
+  "purple",
+  "red",
+  "rosybrown",
+  "royalblue",
+  "saddlebrown",
+  "salmon",
+  "sandybrown",
+  "seagreen",
+  "seashell",
+  "sienna",
+  "silver",
+  "skyblue",
+  "slateblue",
+  "slategray",
+  "slategrey",
+  "snow",
+  "springgreen",
+  "steelblue",
+  "tan",
+  "teal",
+  "thistle",
+  "tomato",
+  "turquoise",
+  "violet",
+  "wheat",
+  "white",
+  "whitesmoke",
+  "yellow",
+  "yellowgreen"
+]
diff --git a/lib/types.nix b/lib/types.nix
index f7c4916..4bb8c17 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -3,8 +3,8 @@
 let
   inherit (lib)
     all any attrNames concatMapStringsSep concatStringsSep const filter flip
-    genid_uint31 hasSuffix head isInt isString length mergeOneOption mkOption
-    mkOptionType optional optionalAttrs optionals range splitString
+    genid_uint31 hasSuffix head importJSON isInt isString length mergeOneOption
+    mkOption mkOptionType optional optionalAttrs optionals range splitString
     stringLength substring test testString typeOf;
   inherit (lib.types)
     attrsOf bool either enum int lines listOf nullOr path str submodule;
@@ -613,6 +613,19 @@ rec {
     merge = mergeOneOption;
   };
 
+  # SVG 1.1, 4.4 Recognized color keyword names
+  #
+  # svg-colors.json has been generated with:
+  #   curl -sS https://www.w3.org/TR/SVG11/types.html#ColorKeywords |
+  #   fq -d html '[
+  #     grep_by(.["@class"]=="color-keywords") |
+  #     grep_by(.["@class"]=="prop-value"and.["#text"]!="").["#text"]
+  #   ] | sort'
+  #
+  svg.color-keyword = enum (importJSON ./svg-colors.json) // {
+    name = "SVG 1.1 recognized color keyword";
+  };
+
   systemd.unit-name = mkOptionType {
     name = "systemd unit name";
     check = x:
-- 
cgit v1.2.3