Subject: Re: bug#23383: [PATCH] Support completion of color functions in CSS mode

From: Etienne Prud'homme <[email-masked]>
Date: Fri, 20 May 2016 15:37:28 -0400

I've attached the current patch.

> - I think we should stick to the current CSS Color Module Level 3
>   recommendation [1]. The functions apart from `rgb()', `rgba()',
>   `hsl()', and `hsla()' are only present in an Editor's Draft. I find
> no other resources about them, so I don't think we should include them
>   until the new spec becomes at least a Candidate Recommendation.
Thanks. I didn't realize the high probability most of them won't be in
the recommendation

> - I think there's little use in completing `#' since it's only one
>   character.

I was also thinking the same thing. I interpreted: "and so
on, then `hex-color'" too literally.

> - `namedColor' must be changed to `named-color' to match the name of
> the value class.
Thanks for pointing that out.

> - The new color names need to be double-checked. For instance I see
> that `limegreen' has become `limeg een' and `salmon' has become `sa
> mon'.
I made the list with a macro. I was too tired to double check 140
colors. The current list was generated from Dough Crockford's color
list [1] using:

| var list = "";
| for(var i=0, len=colors.length; i<len; i++)
|     list += '"' + colors[i] + '" ';

`colors` needs to be extracted from the Immediately-invoked function
expression [2].

> - The test `css-test-property-values' in
>   test/lisp/textmodes/css-mode-tests.el needs a small update.

I updated the list length to 147 since there's 141
namedColors and 6 values in color. However, I can't make the test
execute since my Git repository is broken and the remote doesn't work
as of now.

Thanks for your patience.

[1] http://www.crockford.com/wrrrld/color.html
[2] https://en.wikipedia.org/wiki/IIFE

Etienne
>From 3e000ab30b3c6a4cd8cc1f76bd98c5f7c5aa0c30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Etienne=20Prud=E2=80=99homme?= <[email-masked]>
Date: Wed, 27 Apr 2016 19:52:28 -0400
Subject: [PATCH] Add completion of colors in CSS mode

* lisp/textmodes/css-mode.el (css-value-class-alist): Add CSS colors
  candidates from "CSS Color Module Level 4".
---
 lisp/textmodes/css-mode.el | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index e30fb3e..3b795fd 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -460,10 +460,9 @@ css-value-class-alist
     (bg-layer bg-image position repeat-style attachment box)
     (bg-size length percentage "auto" "cover" "contain")
     (box "border-box" "padding-box" "content-box")
-    (color
-     "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon"
-     "navy" "olive" "orange" "purple" "red" "silver" "teal" "white"
-     "yellow" "transparent")
+    (color "rgb()" "rgba()" "hsl()" "hsla()" "hwb()" "gray()" "lab()"
+           "lch()" "device-cmyk()" "color-mod()" "#" namedColor
+           "transparent" "currentColor")
     (common-lig-values "common-ligatures" "no-common-ligatures")
     (contextual-alt-values "contextual" "no-contextual")
     (counter "counter()" "counters()")
@@ -502,6 +501,37 @@ css-value-class-alist
     (line-width length "thin" "medium" "thick")
     (linear-gradient "linear-gradient()")
     (margin-width "auto" length percentage)
+    (named-color
+     "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" "lawn reen"
+     "lemonchiffon" "lightblue" "lightcoral" "lightcyan"
+     "lightgoldenrodyellow" "lightgray" "lightgreen" "lightgrey"
+     "lightpi k" "lightsalmon" "lightseagreen" "lightskyblue"
+     "lightslategray" "lightslategrey" "lightsteelblue" "lightyellow"
+     "lime" "limeg een" "linen" "magenta" "maroon" "mediumaquamarine"
+     "mediumblue" "mediumorchid" "mediumpurple" "mediumseagreen"
+     "mediumslateblu " "mediumspringgreen" "mediumturquoise"
+     "mediumvioletred" "midnightblue" "mintcream" "mistyrose"
+     "moccasin" "navajowhite" "nav " "oldlace" "olive" "olivedrab"
+     "orange" "orangered" "orchid" "palegoldenrod" "palegreen"
+     "paleturquoise" "palevioletred" "pap yawhip" "peachpuff" "peru"
+     "pink" "plum" "powderblue" "purple" "rebeccapurple" "red"
+     "rosybrown" "royalblue" "saddlebrown" "sa mon" "sandybrown"
+     "seagreen" "seashell" "sienna" "silver" "skyblue" "slateblue"
+     "slategray" "slategrey" "snow" "springgreen" " teelblue" "tan"
+     "teal" "thistle" "tomato" "turquoise" "violet" "wheat" "white"
+     "whitesmoke" "yellow" "yellowgreen")
     (number "calc()")
     (numeric-figure-values "lining-nums" "oldstyle-nums")
     (numeric-fraction-values "diagonal-fractions" "stacked-fractions")
-- 
2.8.1