branch: externals/colorful-mode commit 2767f253e9ddf5e5701b50c9f9ea54b1fad5b9da Author: Elijah Gabe P. <eg642...@gmail.com> Commit: Elijah Gabe P. <eg642...@gmail.com>
Add support for CSS var() colors * README.org: Remove `(WIP)' from var() in Features header. * colorful-mode.el (colorful-convert-and-change-color): Use mark-active instead `beg' and `end' variables (colorful--get-css-variable-color): New macro. (colorful--colorize): Use new macro. (colorful-css-variables-keywords): Add var() regexp, * test/css.css (foo): Add var() tests. * test/latex.tex: Formatting. --- README.org | 2 +- colorful-mode.el | 59 +++++++---- test/css.css | 307 ++++++++++++++++++++++++++++--------------------------- test/latex.tex | 9 +- 4 files changed, 194 insertions(+), 183 deletions(-) diff --git a/README.org b/README.org index 455b89d805..800d9ee77d 100644 --- a/README.org +++ b/README.org @@ -31,7 +31,7 @@ in real time and in a user friendly way based/inspired on 🌈[[https://elpa.gnu - Color names (Emacs, HTML, CSS). - CSS rgb/rgba, hsl/hsla and user-defined colors variables: - @define_color - - var() (WIP) + - var() - LaTex colors (gray, rbg, RGB, HTML) - Convert current color at point or in region to other formats such as hexadecimal or color names *(only available for some colors)* diff --git a/colorful-mode.el b/colorful-mode.el index 72dae1e2c2..9fdce09728 100644 --- a/colorful-mode.el +++ b/colorful-mode.el @@ -470,7 +470,7 @@ BEG is the position to check for the overlay." "Convert color to other format and replace color at point or active mark. If mark is active, convert colors in mark." (interactive "*r") - (if (and beg end) + (if mark-active (let* ((choices '(("Hexadecimal color format" . hex) ("Emacs color name" . name))) ;; Start prompt. @@ -670,6 +670,21 @@ from `readable-foreground-color'." (:background ,color) (:inherit colorful-base))))))) +(defmacro colorful--get-css-variable-color (regexp) + "Get color value from CSS variable REGEXP. +REGEXP must have a group that contains the color value." + (declare (indent 0)) + `(save-excursion + (goto-char (point-max)) + (when (re-search-backward ,regexp nil t) + ;; Get color value from colorful overlay. + ;; if not color value found, use the one from REGEXP 1st group. + (setq color (or (ignore-errors + (overlay-get (colorful--find-overlay + (match-beginning 1)) + 'colorful--overlay-color)) + (match-string-no-properties 1)))))) + (defun colorful--colorize (kind &optional match) "Helper function for Colorize each KIND of MATCH with itself." @@ -733,24 +748,22 @@ from `readable-foreground-color'." ;; Otherwise, just pass it. (t (string-replace "0x" "#" color))))) - ((and 'css-color-variable - (guard (not (string= match-1 "define_color")))) - ;; Find whole buffer for last @define-color match-1 found - ;; and get its color value. - (save-excursion - (goto-char (point-max)) - (when (re-search-backward - (rx (seq "@define_color" - (one-or-more space) - (literal match-1) - (one-or-more space) - (group (opt "#") (one-or-more (any "0-9A-Za-z"))))) - nil t) - ;; Get color value from colorful overlay. - (setq color (ignore-errors ; nil if no overlay found - (overlay-get (colorful--find-overlay - (match-beginning 1)) - 'colorful--overlay-color))))))) + ('css-color-variable + (cond + ((and (string= match-1 "@") + (not (string= match-2 "define_color"))) + ;; Find whole buffer for last @define-color match-1 found + ;; and get its color value. + (colorful--get-css-variable-color + (rx (seq "@define_color" + (one-or-more space) + (literal match-2) + (one-or-more space) + (group (opt "#") (one-or-more (any "0-9A-Za-z"))))))) + ((string= match-1 "var") + (colorful--get-css-variable-color + (rx (seq (literal match-2) ":" (zero-or-more space) + (group (opt "#") (one-or-more (any "0-9A-Za-z")))))))))) ;; Ensure that string is a valid color and that string is non-nil (if (and color (color-defined-p color)) @@ -829,8 +842,12 @@ This is intended to be used with `colorful-extra-color-keyword-functions'." (cl-pushnew colors colorful-color-keywords))) (defvar colorful-css-variables-keywords - `((,(rx "@" (group (one-or-more (any "A-Za-z_")))) - (1 (colorful--colorize 'css-color-variable))))) + `((,(rx (group "@") (group (one-or-more (any "A-Za-z_")))) + (0 (colorful--colorize 'css-color-variable))) + (,(rx (group "var") "(" (zero-or-more space) + (group (one-or-more (any "A-Za-z" "-"))) + (zero-or-more space) ")") + (0 (colorful--colorize 'css-color-variable))))) (defun colorful-add-css-variables-colors () "Add CSS user-defined color variables to `colorful-color-keywords'. diff --git a/test/css.css b/test/css.css index 37af6870be..e04d9ebebc 100644 --- a/test/css.css +++ b/test/css.css @@ -2,21 +2,22 @@ * Color test for colorful-mode */ +--color: #ffff00; /* yellow */ + + @define_color base_color #ff0000; /* red */ @define_color highlight_color blue; @define_color base_color rgb(255, 0, 0); /* red */ @define_color highlight_color rgb(0, 0, 255); /* blue */ -foo +vars { - border-color: 1px solid @base_color; /* must be red */ + foreground: var(--color); /* must be yellow */ + border-color: 1px solid @base_color; /* must be red */ + background: @highlight_color; /* must be blue */ } -.bar -{ - background: @highlight_color; /* must be blue */ -} rgb(245, 224, 220) hsl(360, 47%, 63%) rgb(232,100,0) hsl(23deg, 55, 67) @@ -35,151 +36,151 @@ rgba(250 , 179 , 135 , 0.3) hsla(287, 24%, 66%, 0.8) .color_names { - lightsalmon = #FFA07A, - salmon = #FA8072, - darksalmon = #E9967A, - lightcoral = #F08080, - indianred = #CD5C5C, - crimson = #DC143C, - firebrick = #B22222, - red = #FF0000, - darkred = #8B0000, - coral = #FF7F50, - tomato = #FF6347, - orangered = #FF4500, - gold = #FFD700, - orange = #FFA500, - darkorange = #FF8C00, - lightyellow = #FFFFE0, - lemonchiffon = #FFFACD, - lightgoldenrodyellow = #FAFAD2, - papayawhip = #FFEFD5, - moccasin = #FFE4B5, - peachpuff = #FFDAB9, - palegoldenrod = #EEE8AA, - khaki = #F0E68C, - darkkhaki = #BDB76B, - yellow = #FFFF00, - lawngreen = #7CFC00, - chartreuse = #7FFF00, - limegreen = #32CD32, - lime = #00FF00, - forestgreen = #228B22, - green = #008000, - darkgreen = #006400, - greenyellow = #ADFF2F, - yellowgreen = #9ACD32, - springgreen = #00FF7F, - mediumspringgreen = #00FA9A, - lightgreen = #90EE90, - palegreen = #98FB98, - darkseagreen = #8FBC8F, - mediumseagreen = #3CB371, - seagreen = #2E8B57, - olive = #808000, - darkolivegreen = #556B2F, - olivedrab = #6B8E23, - lightcyan = #E0FFFF, - cyan = #00FFFF, - aqua = #00FFFF, - aquamarine = #7FFFD4, - mediumaquamarine = #66CDAA, - paleturquoise = #AFEEEE, - turquoise = #40E0D0, - mediumturquoise = #48D1CC, - darkturquoise = #00CED1, - lightseagreen = #20B2AA, - cadetblue = #5F9EA0, - darkcyan = #008B8B, - teal = #008080, - powderblue = #B0E0E6, - lightblue = #ADD8E6, - lightskyblue = #87CEFA, - skyblue = #87CEEB, - deepskyblue = #00BFFF, - lightsteelblue = #B0C4DE, - dodgerblue = #1E90FF, - cornflowerblue = #6495ED, - steelblue = #4682B4, - royalblue = #4169E1, - blue = #0000FF, - mediumblue = #0000CD, - darkblue = #00008B, - navy = #000080, - midnightblue = #191970, - mediumslateblue = #7B68EE, - slateblue = #6A5ACD, - darkslateblue = #483D8B, - lavender = #E6E6FA, - thistle = #D8BFD8, - plum = #DDA0DD, - violet = #EE82EE, - orchid = #DA70D6, - fuchsia = #FF00FF, - magenta = #FF00FF, - mediumorchid = #BA55D3, - rebeccapurple = #663399, - mediumpurple = #9370DB, - blueviolet = #8A2BE2, - darkviolet = #9400D3, - darkorchid = #9932CC, - darkmagenta = #8B008B, - purple = #800080, - indigo = #4B0082, - pink = #FFC0CB, - lightpink = #FFB6C1, - hotpink = #FF69B4, - deeppink = #FF1493, - palevioletred = #DB7093, - mediumvioletred = #C71585, - white = #FFFFFF, - snow = #FFFAFA, - honeydew = #F0FFF0, - mintcream = #F5FFFA, - azure = #F0FFFF, - aliceblue = #F0F8FF, - ghostwhite = #F8F8FF, - whitesmoke = #F5F5F5, - seashell = #FFF5EE, - beige = #F5F5DC, - oldlace = #FDF5E6, - floralwhite = #FFFAF0, - ivory = #FFFFF0, - antiquewhite = #FAEBD7, - linen = #FAF0E6, - lavenderblush = #FFF0F5, - mistyrose = #FFE4E1, - gainsboro = #DCDCDC, - lightgray = #D3D3D3, - lightgrey = #D3D3D3, - silver = #C0C0C0, - darkgray = #A9A9A9, - darkgrey = #A9A9A9, - gray = #808080, - grey = #808080, - dimgray = #696969, - dimgrey = #696969, - lightslategray = #778899, - lightslategrey = #778899, - slategray = #708090, - slategrey = #708090, - darkslategray = #2F4F4F, - darkslategrey = #2F4F4F, - black = #000000, - cornsilk = #FFF8DC, - blanchedalmond = #FFEBCD, - bisque = #FFE4C4, - navajowhite = #FFDEAD, - wheat = #F5DEB3, - burlywood = #DEB887, - tan = #D2B48C, - rosybrown = #BC8F8F, - sandybrown = #F4A460, - goldenrod = #DAA520, - peru = #CD853F, - chocolate = #D2691E, - saddlebrown = #8B4513, - sienna = #A0522D, - brown = #A52A2A, - maroon = #800000 + lightsalmon: #FFA07A; + salmon: #FA8072; + darksalmon: #E9967A; + lightcoral: #F08080; + indianred: #CD5C5C; + crimson: #DC143C; + firebrick: #B22222; + red: #FF0000; + darkred: #8B0000; + coral: #FF7F50; + tomato: #FF6347; + orangered: #FF4500; + gold: #FFD700; + orange: #FFA500; + darkorange: #FF8C00; + lightyellow: #FFFFE0; + lemonchiffon: #FFFACD; + lightgoldenrodyellow: #FAFAD2; + papayawhip: #FFEFD5; + moccasin: #FFE4B5; + peachpuff: #FFDAB9; + palegoldenrod: #EEE8AA; + khaki: #F0E68C; + darkkhaki: #BDB76B; + yellow: #FFFF00; + lawngreen: #7CFC00; + chartreuse: #7FFF00; + limegreen: #32CD32; + lime: #00FF00; + forestgreen: #228B22; + green: #008000; + darkgreen: #006400; + greenyellow: #ADFF2F; + yellowgreen: #9ACD32; + springgreen: #00FF7F; + mediumspringgreen: #00FA9A; + lightgreen: #90EE90; + palegreen: #98FB98; + darkseagreen: #8FBC8F; + mediumseagreen: #3CB371; + seagreen: #2E8B57; + olive: #808000; + darkolivegreen: #556B2F; + olivedrab: #6B8E23; + lightcyan: #E0FFFF; + cyan: #00FFFF; + aqua: #00FFFF; + aquamarine: #7FFFD4; + mediumaquamarine: #66CDAA; + paleturquoise: #AFEEEE; + turquoise: #40E0D0; + mediumturquoise: #48D1CC; + darkturquoise: #00CED1; + lightseagreen: #20B2AA; + cadetblue: #5F9EA0; + darkcyan: #008B8B; + teal: #008080; + powderblue: #B0E0E6; + lightblue: #ADD8E6; + lightskyblue: #87CEFA; + skyblue: #87CEEB; + deepskyblue: #00BFFF; + lightsteelblue: #B0C4DE; + dodgerblue: #1E90FF; + cornflowerblue: #6495ED; + steelblue: #4682B4; + royalblue: #4169E1; + blue: #0000FF; + mediumblue: #0000CD; + darkblue: #00008B; + navy: #000080; + midnightblue: #191970; + mediumslateblue: #7B68EE; + slateblue: #6A5ACD; + darkslateblue: #483D8B; + lavender: #E6E6FA; + thistle: #D8BFD8; + plum: #DDA0DD; + violet: #EE82EE; + orchid: #DA70D6; + fuchsia: #FF00FF; + magenta: #FF00FF; + mediumorchid: #BA55D3; + rebeccapurple: #663399; + mediumpurple: #9370DB; + blueviolet: #8A2BE2; + darkviolet: #9400D3; + darkorchid: #9932CC; + darkmagenta: #8B008B; + purple: #800080; + indigo: #4B0082; + pink: #FFC0CB; + lightpink: #FFB6C1; + hotpink: #FF69B4; + deeppink: #FF1493; + palevioletred: #DB7093; + mediumvioletred: #C71585; + white: #FFFFFF; + snow: #FFFAFA; + honeydew: #F0FFF0; + mintcream: #F5FFFA; + azure: #F0FFFF; + aliceblue: #F0F8FF; + ghostwhite: #F8F8FF; + whitesmoke: #F5F5F5; + seashell: #FFF5EE; + beige: #F5F5DC; + oldlace: #FDF5E6; + floralwhite: #FFFAF0; + ivory: #FFFFF0; + antiquewhite: #FAEBD7; + linen: #FAF0E6; + lavenderblush: #FFF0F5; + mistyrose: #FFE4E1; + gainsboro: #DCDCDC; + lightgray: #D3D3D3; + lightgrey: #D3D3D3; + silver: #C0C0C0; + darkgray: #A9A9A9; + darkgrey: #A9A9A9; + gray: #808080; + grey: #808080; + dimgray: #696969; + dimgrey: #696969; + lightslategray: #778899; + lightslategrey: #778899; + slategray: #708090; + slategrey: #708090; + darkslategray: #2F4F4F; + darkslategrey: #2F4F4F; + black: #000000; + cornsilk: #FFF8DC; + blanchedalmond: #FFEBCD; + bisque: #FFE4C4; + navajowhite: #FFDEAD; + wheat: #F5DEB3; + burlywood: #DEB887; + tan: #D2B48C; + rosybrown: #BC8F8F; + sandybrown: #F4A460; + goldenrod: #DAA520; + peru: #CD853F; + chocolate: #D2691E; + saddlebrown: #8B4513; + sienna: #A0522D; + brown: #A52A2A; + maroon: #800000 } diff --git a/test/latex.tex b/test/latex.tex index 86a6edbe86..da1c762e75 100644 --- a/test/latex.tex +++ b/test/latex.tex @@ -1,12 +1,5 @@ -*- mode: latex -*- -\usepackage{comment} -\begin{document} -\section{Multi-line comments}} -\begin{comment} -(La)Tex Color Test for colorful-mode -\end{comment} -\end{document} - +(La)TeX Color Tests for colorful-mode \definecolor{light-gray}{gray}{0.95}