summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew Vogel <dvogel@github>2021-10-24 20:35:07 +0100
committerBram Moolenaar <Bram@vim.org>2021-10-24 20:35:07 +0100
commite30d10253fa634c4f60daa798d029245f4eed393 (patch)
tree57aca74b65dc4c3924ef23185b8cb2b6933996c2
parent3c5904d2a5d7861c227a4c3cd4ddcbc51014c838 (diff)
downloadvim-git-e30d10253fa634c4f60daa798d029245f4eed393.tar.gz
patch 8.2.3562: cannot add color namesv8.2.3562
Problem: Cannot add color names. Solution: Add the v:colornames dictionary. (Drew Vogel, closes #8761)
-rw-r--r--Filelist2
-rw-r--r--READMEdir/README_extra.txt1
-rw-r--r--nsis/gvim.nsi3
-rw-r--r--runtime/colors/README.txt3
-rw-r--r--runtime/colors/lists/csscolors.vim166
-rw-r--r--runtime/colors/lists/default.vim801
-rw-r--r--runtime/doc/eval.txt37
-rw-r--r--runtime/doc/gui_w32.txt18
-rw-r--r--runtime/doc/message.txt5
-rw-r--r--runtime/doc/os_haiku.txt5
-rw-r--r--runtime/doc/syntax.txt29
-rw-r--r--runtime/doc/usr_06.txt25
-rw-r--r--src/Makefile11
-rw-r--r--src/errors.h6
-rw-r--r--src/evalvars.c3
-rw-r--r--src/globals.h3
-rw-r--r--src/gui.c2
-rw-r--r--src/gui_haiku.cc159
-rw-r--r--src/highlight.c233
-rw-r--r--src/job.c2
-rw-r--r--src/proto/highlight.pro6
-rw-r--r--src/proto/term.pro2
-rw-r--r--src/term.c199
-rw-r--r--src/testdir/test_highlight.vim36
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h3
26 files changed, 1364 insertions, 398 deletions
diff --git a/Filelist b/Filelist
index 34285eb3b..01c388bd4 100644
--- a/Filelist
+++ b/Filelist
@@ -798,6 +798,7 @@ RT_SCRIPTS = \
runtime/autoload/xml/*.vim \
runtime/colors/*.vim \
runtime/colors/README.txt \
+ runtime/colors/lists/*.vim \
runtime/colors/tools/*.vim \
runtime/compiler/*.vim \
runtime/compiler/README.txt \
@@ -850,7 +851,6 @@ RT_AMI_DOS = \
# DOS runtime (also in the extra archive)
RT_DOS = \
README_dos.txt \
- runtime/rgb.txt \
vimtutor.bat \
# DOS runtime without CR-LF translation (also in the extra archive)
diff --git a/READMEdir/README_extra.txt b/READMEdir/README_extra.txt
index 4f22d1bcc..94d93f986 100644
--- a/READMEdir/README_extra.txt
+++ b/READMEdir/README_extra.txt
@@ -26,7 +26,6 @@ src/os_win32.* Files for the Win32 port.
src/gui_w32.* Files for the Win32 GUI.
src/gui_w48.* Files for the Win32 and Win16 GUI.
src/Make_mvc.mak MS Visual C++ makefile for the Win32 GUI.
-runtime/rgb.txt File with color definitions for the Win32 GUI.
src/if_ole.* OLE automation interface, for MS Windows 95 and NT.
diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi
index fc5713f79..649c6950d 100644
--- a/nsis/gvim.nsi
+++ b/nsis/gvim.nsi
@@ -357,7 +357,6 @@ Section "$(str_section_exe)" id_section_exe
File ..\README.txt
File ..\uninstall.txt
File ${VIMRT}\*.vim
- File ${VIMRT}\rgb.txt
File ${VIMTOOLS}\diff.exe
File ${VIMTOOLS}\winpty${BIT}.dll
@@ -367,6 +366,8 @@ Section "$(str_section_exe)" id_section_exe
File ${VIMRT}\colors\*.*
SetOutPath $0\colors\tools
File ${VIMRT}\colors\tools\*.*
+ SetOutPath $0\colors\lists
+ File ${VIMRT}\colors\lists\*.*
SetOutPath $0\compiler
File ${VIMRT}\compiler\*.*
diff --git a/runtime/colors/README.txt b/runtime/colors/README.txt
index 89501e051..2b3471e39 100644
--- a/runtime/colors/README.txt
+++ b/runtime/colors/README.txt
@@ -87,4 +87,5 @@ please check the following items:
- In the GUI, is it easy to find the cursor, also in a file with lots of
syntax highlighting?
- Do not use hard coded escape sequences, these will not work in other
- terminals. Always use color names or #RRGGBB for the GUI.
+ terminals. Always use color names or #RRGGBB for the GUI. See v:colornames
+ for details on how to define your own color names.
diff --git a/runtime/colors/lists/csscolors.vim b/runtime/colors/lists/csscolors.vim
new file mode 100644
index 000000000..74955226c
--- /dev/null
+++ b/runtime/colors/lists/csscolors.vim
@@ -0,0 +1,166 @@
+" Maintainer: Drew Vogel <dvogel@sidejump.org>
+" Last Change: 2021 Jul 25
+
+" Similar in spirit to rgb.txt, this plugin establishes a human-friendly name
+" for every color listed in the CSS standard:
+"
+" https://www.w3.org/TR/css-color-3/
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+call extend(v:colornames, {
+ \ 'css_black': '#000000',
+ \ 'css_silver': '#c0c0c0',
+ \ 'css_gray': '#808080',
+ \ 'css_white': '#FFFFFF',
+ \ 'css_maroon': '#800000',
+ \ 'css_red': '#FF0000',
+ \ 'css_purple': '#800080',
+ \ 'css_fuchsia': '#FF00FF',
+ \ 'css_green': '#008000',
+ \ 'css_lime': '#00FF00',
+ \ 'css_olive': '#808000',
+ \ 'css_yellow': '#FFFF00',
+ \ 'css_navy': '#000080',
+ \ 'css_blue': '#0000FF',
+ \ 'css_teal': '#008080',
+ \ 'css_aqua': '#00FFFF',
+ \
+ \ 'css_aliceblue': '#f0f8ff',
+ \ 'css_antiquewhite': '#faebd7',
+ \ 'css_aquamarine': '#7fffd4',
+ \ 'css_azure': '#f0ffff',
+ \ 'css_beige': '#f5f5dc',
+ \ 'css_bisque': '#ffe4c4',
+ \ 'css_blanchedalmond': '#ffebcd',
+ \ 'css_blueviolet': '#8a2be2',
+ \ 'css_brown': '#a52a2a',
+ \ 'css_burlywood': '#deb887',
+ \ 'css_cadetblue': '#5f9ea0',
+ \ 'css_chartreuse': '#7fff00',
+ \ 'css_chocolate': '#d2691e',
+ \ 'css_coral': '#ff7f50',
+ \ 'css_cornflowerblue': '#6495ed',
+ \ 'css_cornsilk': '#fff8dc',
+ \ 'css_crimson': '#dc143c',
+ \ 'css_cyan': '#00ffff',
+ \ 'css_darkblue': '#00008b',
+ \ 'css_darkcyan': '#008b8b',
+ \ 'css_darkgoldenrod': '#b8860b',
+ \ 'css_darkgray': '#a9a9a9',
+ \ 'css_darkgreen': '#006400',
+ \ 'css_darkgrey': '#a9a9a9',
+ \ 'css_darkkhaki': '#bdb76b',
+ \ 'css_darkmagenta': '#8b008b',
+ \ 'css_darkolivegreen': '#556b2f',
+ \ 'css_darkorange': '#ff8c00',
+ \ 'css_darkorchid': '#9932cc',
+ \ 'css_darkred': '#8b0000',
+ \ 'css_darksalmon': '#e9967a',
+ \ 'css_darkseagreen': '#8fbc8f',
+ \ 'css_darkslateblue': '#483d8b',
+ \ 'css_darkslategray': '#2f4f4f',
+ \ 'css_darkslategrey': '#2f4f4f',
+ \ 'css_darkturquoise': '#00ced1',
+ \ 'css_darkviolet': '#9400d3',
+ \ 'css_deeppink': '#ff1493',
+ \ 'css_deepskyblue': '#00bfff',
+ \ 'css_dimgray': '#696969',
+ \ 'css_dimgrey': '#696969',
+ \ 'css_dodgerblue': '#1e90ff',
+ \ 'css_firebrick': '#b22222',
+ \ 'css_floralwhite': '#fffaf0',
+ \ 'css_forestgreen': '#228b22',
+ \ 'css_gainsboro': '#dcdcdc',
+ \ 'css_ghostwhite': '#f8f8ff',
+ \ 'css_gold': '#ffd700',
+ \ 'css_goldenrod': '#daa520',
+ \ 'css_greenyellow': '#adff2f',
+ \ 'css_grey': '#808080',
+ \ 'css_honeydew': '#f0fff0',
+ \ 'css_hotpink': '#ff69b4',
+ \ 'css_indianred': '#cd5c5c',
+ \ 'css_indigo': '#4b0082',
+ \ 'css_ivory': '#fffff0',
+ \ 'css_khaki': '#f0e68c',
+ \ 'css_lavender': '#e6e6fa',
+ \ 'css_lavenderblush': '#fff0f5',
+ \ 'css_lawngreen': '#7cfc00',
+ \ 'css_lemonchiffon': '#fffacd',
+ \ 'css_lightblue': '#add8e6',
+ \ 'css_lightcoral': '#f08080',
+ \ 'css_lightcyan': '#e0ffff',
+ \ 'css_lightgoldenrodyellow': '#fafad2',
+ \ 'css_lightgray': '#d3d3d3',
+ \ 'css_lightgreen': '#90ee90',
+ \ 'css_lightgrey': '#d3d3d3',
+ \ 'css_lightpink': '#ffb6c1',
+ \ 'css_lightsalmon': '#ffa07a',
+ \ 'css_lightseagreen': '#20b2aa',
+ \ 'css_lightskyblue': '#87cefa',
+ \ 'css_lightslategray': '#778899',
+ \ 'css_lightslategrey': '#778899',
+ \ 'css_lightsteelblue': '#b0c4de',
+ \ 'css_lightyellow': '#ffffe0',
+ \ 'css_limegreen': '#32cd32',
+ \ 'css_linen': '#faf0e6',
+ \ 'css_magenta': '#ff00ff',
+ \ 'css_mediumaquamarine': '#66cdaa',
+ \ 'css_mediumblue': '#0000cd',
+ \ 'css_mediumorchid': '#ba55d3',
+ \ 'css_mediumpurple': '#9370db',
+ \ 'css_mediumseagreen': '#3cb371',
+ \ 'css_mediumslateblue': '#7b68ee',
+ \ 'css_mediumspringgreen': '#00fa9a',
+ \ 'css_mediumturquoise': '#48d1cc',
+ \ 'css_mediumvioletred': '#c71585',
+ \ 'css_midnightblue': '#191970',
+ \ 'css_mintcream': '#f5fffa',
+ \ 'css_mistyrose': '#ffe4e1',
+ \ 'css_moccasin': '#ffe4b5',
+ \ 'css_navajowhite': '#ffdead',
+ \ 'css_oldlace': '#fdf5e6',
+ \ 'css_olivedrab': '#6b8e23',
+ \ 'css_orange': '#ffa500',
+ \ 'css_orangered': '#ff4500',
+ \ 'css_orchid': '#da70d6',
+ \ 'css_palegoldenrod': '#eee8aa',
+ \ 'css_palegreen': '#98fb98',
+ \ 'css_paleturquoise': '#afeeee',
+ \ 'css_palevioletred': '#db7093',
+ \ 'css_papayawhip': '#ffefd5',
+ \ 'css_peachpuff': '#ffdab9',
+ \ 'css_peru': '#cd853f',
+ \ 'css_pink': '#ffc0cb',
+ \ 'css_plum': '#dda0dd',
+ \ 'css_powderblue': '#b0e0e6',
+ \ 'css_rosybrown': '#bc8f8f',
+ \ 'css_royalblue': '#4169e1',
+ \ 'css_saddlebrown': '#8b4513',
+ \ 'css_salmon': '#fa8072',
+ \ 'css_sandybrown': '#f4a460',
+ \ 'css_seagreen': '#2e8b57',
+ \ 'css_seashell': '#fff5ee',
+ \ 'css_sienna': '#a0522d',
+ \ 'css_skyblue': '#87ceeb',
+ \ 'css_slateblue': '#6a5acd',
+ \ 'css_slategray': '#708090',
+ \ 'css_slategrey': '#708090',
+ \ 'css_snow': '#fffafa',
+ \ 'css_springgreen': '#00ff7f',
+ \ 'css_steelblue': '#4682b4',
+ \ 'css_tan': '#d2b48c',
+ \ 'css_thistle': '#d8bfd8',
+ \ 'css_tomato': '#ff6347',
+ \ 'css_turquoise': '#40e0d0',
+ \ 'css_violet': '#ee82ee',
+ \ 'css_wheat': '#f5deb3',
+ \ 'css_whitesmoke': '#f5f5f5',
+ \ 'css_yellowgreen': '#9acd32',
+ \ }, 'keep')
+
+let &cpo= s:keepcpo
+unlet s:keepcpo
+
+"vim: sw=4
diff --git a/runtime/colors/lists/default.vim b/runtime/colors/lists/default.vim
new file mode 100644
index 000000000..594004812
--- /dev/null
+++ b/runtime/colors/lists/default.vim
@@ -0,0 +1,801 @@
+" Maintainer: Drew Vogel <dvogel@sidejump.org>
+" Last Change: 2021 Jul 25
+"
+" Replaced rgb.txt as the source of de facto standard color names. This is
+" sourced each time the colorscheme command is run. It is also sourced each
+" time the highlight command fails to recognize a gui color. You can override
+" these colors by introducing a new colors/lists/default.vim file earlier in
+" the runtimepath.
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+call extend(v:colornames, {
+ \ 'snow': '#fffafa',
+ \ 'ghost white': '#f8f8ff',
+ \ 'ghostwhite': '#f8f8ff',
+ \ 'white smoke': '#f5f5f5',
+ \ 'whitesmoke': '#f5f5f5',
+ \ 'gainsboro': '#dcdcdc',
+ \ 'floral white': '#fffaf0',
+ \ 'floralwhite': '#fffaf0',
+ \ 'old lace': '#fdf5e6',
+ \ 'oldlace': '#fdf5e6',
+ \ 'linen': '#faf0e6',
+ \ 'antique white': '#faebd7',
+ \ 'antiquewhite': '#faebd7',
+ \ 'papaya whip': '#ffefd5',
+ \ 'papayawhip': '#ffefd5',
+ \ 'blanched almond': '#ffebcd',
+ \ 'blanchedalmond': '#ffebcd',
+ \ 'bisque': '#ffe4c4',
+ \ 'peach puff': '#ffdab9',
+ \ 'peachpuff': '#ffdab9',
+ \ 'navajo white': '#ffdead',
+ \ 'navajowhite': '#ffdead',
+ \ 'moccasin': '#ffe4b5',
+ \ 'cornsilk': '#fff8dc',
+ \ 'ivory': '#fffff0',
+ \ 'lemon chiffon': '#fffacd',
+ \ 'lemonchiffon': '#fffacd',
+ \ 'seashell': '#fff5ee',
+ \ 'honeydew': '#f0fff0',
+ \ 'mint cream': '#f5fffa',
+ \ 'mintcream': '#f5fffa',
+ \ 'azure': '#f0ffff',
+ \ 'alice blue': '#f0f8ff',
+ \ 'aliceblue': '#f0f8ff',
+ \ 'lavender': '#e6e6fa',
+ \ 'lavender blush': '#fff0f5',
+ \ 'lavenderblush': '#fff0f5',
+ \ 'misty rose': '#ffe4e1',
+ \ 'mistyrose': '#ffe4e1',
+ \ 'white': '#ffffff',
+ \ 'black': '#000000',
+ \ 'dark slate gray': '#2f4f4f',
+ \ 'darkslategray': '#2f4f4f',
+ \ 'dark slate grey': '#2f4f4f',
+ \ 'darkslategrey': '#2f4f4f',
+ \ 'dim gray': '#696969',
+ \ 'dimgray': '#696969',
+ \ 'dim grey': '#696969',
+ \ 'dimgrey': '#696969',
+ \ 'slate gray': '#708090',
+ \ 'slategray': '#708090',
+ \ 'slate grey': '#708090',
+ \ 'slategrey': '#708090',
+ \ 'light slate gray': '#778899',
+ \ 'lightslategray': '#778899',
+ \ 'light slate grey': '#778899',
+ \ 'lightslategrey': '#778899',
+ \ 'gray': '#bebebe',
+ \ 'grey': '#bebebe',
+ \ 'x11 gray': '#bebebe',
+ \ 'x11gray': '#bebebe',
+ \ 'x11 grey': '#bebebe',
+ \ 'x11grey': '#bebebe',
+ \ 'web gray': '#808080',
+ \ 'webgray': '#808080',
+ \ 'web grey': '#808080',
+ \ 'webgrey': '#808080',
+ \ 'light grey': '#d3d3d3',
+ \ 'lightgrey': '#d3d3d3',
+ \ 'light gray': '#d3d3d3',
+ \ 'lightgray': '#d3d3d3',
+ \ 'midnight blue': '#191970',
+ \ 'midnightblue': '#191970',
+ \ 'navy': '#000080',
+ \ 'navy blue': '#000080',
+ \ 'navyblue': '#000080',
+ \ 'cornflower blue': '#6495ed',
+ \ 'cornflowerblue': '#6495ed',
+ \ 'dark slate blue': '#483d8b',
+ \ 'darkslateblue': '#483d8b',
+ \ 'slate blue': '#6a5acd',
+ \ 'slateblue': '#6a5acd',
+ \ 'medium slate blue': '#7b68ee',
+ \ 'mediumslateblue': '#7b68ee',
+ \ 'light slate blue': '#8470ff',
+ \ 'lightslateblue': '#8470ff',
+ \ 'medium blue': '#0000cd',
+ \ 'mediumblue': '#0000cd',
+ \ 'royal blue': '#4169e1',
+ \ 'royalblue': '#4169e1',
+ \ 'blue': '#0000ff',
+ \ 'dodger blue': '#1e90ff',
+ \ 'dodgerblue': '#1e90ff',
+ \ 'deep sky blue': '#00bfff',
+ \ 'deepskyblue': '#00bfff',
+ \ 'sky blue': '#87ceeb',
+ \ 'skyblue': '#87ceeb',
+ \ 'light sky blue': '#87cefa',
+ \ 'lightskyblue': '#87cefa',
+ \ 'steel blue': '#4682b4',
+ \ 'steelblue': '#4682b4',
+ \ 'light steel blue': '#b0c4de',
+ \ 'lightsteelblue': '#b0c4de',
+ \ 'light blue': '#add8e6',
+ \ 'lightblue': '#add8e6',
+ \ 'powder blue': '#b0e0e6',
+ \ 'powderblue': '#b0e0e6',
+ \ 'pale turquoise': '#afeeee',
+ \ 'paleturquoise': '#afeeee',
+ \ 'dark turquoise': '#00ced1',
+ \ 'darkturquoise': '#00ced1',
+ \ 'medium turquoise': '#48d1cc',
+ \ 'mediumturquoise': '#48d1cc',
+ \ 'turquoise': '#40e0d0',
+ \ 'cyan': '#00ffff',
+ \ 'aqua': '#00ffff',
+ \ 'light cyan': '#e0ffff',
+ \ 'lightcyan': '#e0ffff',
+ \ 'cadet blue': '#5f9ea0',
+ \ 'cadetblue': '#5f9ea0',
+ \ 'medium aquamarine': '#66cdaa',
+ \ 'mediumaquamarine': '#66cdaa',
+ \ 'aquamarine': '#7fffd4',
+ \ 'dark green': '#006400',
+ \ 'darkgreen': '#006400',
+ \ 'dark olive green': '#556b2f',
+ \ 'darkolivegreen': '#556b2f',
+ \ 'dark sea green': '#8fbc8f',
+ \ 'darkseagreen': '#8fbc8f',
+ \ 'sea green': '#2e8b57',
+ \ 'seagreen': '#2e8b57',
+ \ 'medium sea green': '#3cb371',
+ \ 'mediumseagreen': '#3cb371',
+ \ 'light sea green': '#20b2aa',
+ \ 'lightseagreen': '#20b2aa',
+ \ 'pale green': '#98fb98',
+ \ 'palegreen': '#98fb98',
+ \ 'spring green': '#00ff7f',
+ \ 'springgreen': '#00ff7f',
+ \ 'lawn green': '#7cfc00',
+ \ 'lawngreen': '#7cfc00',
+ \ 'green': '#00ff00',
+ \ 'lime': '#00ff00',
+ \ 'x11 green': '#00ff00',
+ \ 'x11green': '#00ff00',
+ \ 'web green': '#008000',
+ \ 'webgreen': '#008000',
+ \ 'chartreuse': '#7fff00',
+ \ 'medium spring green': '#00fa9a',
+ \ 'mediumspringgreen': '#00fa9a',
+ \ 'green yellow': '#adff2f',
+ \ 'greenyellow': '#adff2f',
+ \ 'lime green': '#32cd32',
+ \ 'limegreen': '#32cd32',
+ \ 'yellow green': '#9acd32',
+ \ 'yellowgreen': '#9acd32',
+ \ 'forest green': '#228b22',
+ \ 'forestgreen': '#228b22',
+ \ 'olive drab': '#6b8e23',
+ \ 'olivedrab': '#6b8e23',
+ \ 'dark khaki': '#bdb76b',
+ \ 'darkkhaki': '#bdb76b',
+ \ 'khaki': '#f0e68c',
+ \ 'pale goldenrod': '#eee8aa',
+ \ 'palegoldenrod': '#eee8aa',
+ \ 'light goldenrod yellow': '#fafad2',
+ \ 'lightgoldenrodyellow': '#fafad2',
+ \ 'light yellow': '#ffffe0',
+ \ 'lightyellow': '#ffffe0',
+ \ 'yellow': '#ffff00',
+ \ 'gold': '#ffd700',
+ \ 'light goldenrod': '#eedd82',
+ \ 'lightgoldenrod': '#eedd82',
+ \ 'goldenrod': '#daa520',
+ \ 'dark goldenrod': '#b8860b',
+ \ 'darkgoldenrod': '#b8860b',
+ \ 'rosy brown': '#bc8f8f',
+ \ 'rosybrown': '#bc8f8f',
+ \ 'indian red': '#cd5c5c',
+ \ 'indianred': '#cd5c5c',
+ \ 'saddle brown': '#8b4513',
+ \ 'saddlebrown': '#8b4513',
+ \ 'sienna': '#a0522d',
+ \ 'peru': '#cd853f',
+ \ 'burlywood': '#deb887',
+ \ 'beige': '#f5f5dc',
+ \ 'wheat': '#f5deb3',
+ \ 'sandy brown': '#f4a460',
+ \ 'sandybrown': '#f4a460',
+ \ 'tan': '#d2b48c',
+ \ 'chocolate': '#d2691e',
+ \ 'firebrick': '#b22222',
+ \ 'brown': '#a52a2a',
+ \ 'dark salmon': '#e9967a',
+ \ 'darksalmon': '#e9967a',
+ \ 'salmon': '#fa8072',
+ \ 'light salmon': '#ffa07a',
+ \ 'lightsalmon': '#ffa07a',
+ \ 'orange': '#ffa500',
+ \ 'dark orange': '#ff8c00',
+ \ 'darkorange': '#ff8c00',
+ \ 'coral': '#ff7f50',
+ \ 'light coral': '#f08080',
+ \ 'lightcoral': '#f08080',
+ \ 'tomato': '#ff6347',
+ \ 'orange red': '#ff4500',
+ \ 'orangered': '#ff4500',
+ \ 'red': '#ff0000',
+ \ 'hot pink': '#ff69b4',
+ \ 'hotpink': '#ff69b4',
+ \ 'deep pink': '#ff1493',
+ \ 'deeppink': '#ff1493',
+ \ 'pink': '#ffc0cb',
+ \ 'light pink': '#ffb6c1',
+ \ 'lightpink': '#ffb6c1',
+ \ 'pale violet red': '#db7093',
+ \ 'palevioletred': '#db7093',
+ \ 'maroon': '#b03060',
+ \ 'x11 maroon': '#b03060',
+ \ 'x11maroon': '#b03060',
+ \ 'web maroon': '#800000',
+ \ 'webmaroon': '#800000',
+ \ 'medium violet red': '#c71585',
+ \ 'mediumvioletred': '#c71585',
+ \ 'violet red': '#d02090',
+ \ 'violetred': '#d02090',
+ \ 'magenta': '#ff00ff',
+ \ 'fuchsia': '#ff00ff',
+ \ 'violet': '#ee82ee',
+ \ 'plum': '#dda0dd',
+ \ 'orchid': '#da70d6',
+ \ 'medium orchid': '#ba55d3',
+ \ 'mediumorchid': '#ba55d3',
+ \ 'dark orchid': '#9932cc',
+ \ 'darkorchid': '#9932cc',
+ \ 'dark violet': '#9400d3',
+ \ 'darkviolet': '#9400d3',
+ \ 'blue violet': '#8a2be2',
+ \ 'blueviolet': '#8a2be2',
+ \ 'purple': '#a020f0',
+ \ 'x11 purple': '#a020f0',
+ \ 'x11purple': '#a020f0',
+ \ 'web purple': '#800080',
+ \ 'webpurple': '#800080',
+ \ 'medium purple': '#9370db',
+ \ 'mediumpurple': '#9370db',
+ \ 'thistle': '#d8bfd8',
+ \ 'snow1': '#fffafa',
+ \ 'snow2': '#eee9e9',
+ \ 'snow3': '#cdc9c9',
+ \ 'snow4': '#8b8989',
+ \ 'seashell1': '#fff5ee',
+ \ 'seashell2': '#eee5de',
+ \ 'seashell3': '#cdc5bf',
+ \ 'seashell4': '#8b8682',
+ \ 'antiquewhite1': '#ffefdb',
+ \ 'antiquewhite2': '#eedfcc',
+ \ 'antiquewhite3': '#cdc0b0',
+ \ 'antiquewhite4': '#8b8378',
+ \ 'bisque1': '#ffe4c4',
+ \ 'bisque2': '#eed5b7',
+ \ 'bisque3': '#cdb79e',
+ \ 'bisque4': '#8b7d6b',
+ \ 'peachpuff1': '#ffdab9',
+ \ 'peachpuff2': '#eecbad',
+ \ 'peachpuff3': '#cdaf95',
+ \ 'peachpuff4': '#8b7765',
+ \ 'navajowhite1': '#ffdead',
+ \ 'navajowhite2': '#eecfa1',
+ \ 'navajowhite3': '#cdb38b',
+ \ 'navajowhite4': '#8b795e',
+ \ 'lemonchiffon1': '#fffacd',
+ \ 'lemonchiffon2': '#eee9bf',
+ \ 'lemonchiffon3': '#cdc9a5',
+ \ 'lemonchiffon4': '#8b8970',
+ \ 'cornsilk1': '#fff8dc',
+ \ 'cornsilk2': '#eee8cd',
+ \ 'cornsilk3': '#cdc8b1',
+ \ 'cornsilk4': '#8b8878',
+ \ 'ivory1': '#fffff0',
+ \ 'ivory2': '#eeeee0',
+ \ 'ivory3': '#cdcdc1',
+ \ 'ivory4': '#8b8b83',
+ \ 'honeydew1': '#f0fff0',
+ \ 'honeydew2': '#e0eee0',
+ \ 'honeydew3': '#c1cdc1',
+ \ 'honeydew4': '#838b83',
+ \ 'lavenderblush1': '#fff0f5',
+ \ 'lavenderblush2': '#eee0e5',
+ \ 'lavenderblush3': '#cdc1c5',
+ \ 'lavenderblush4': '#8b8386',
+ \ 'mistyrose1': '#ffe4e1',
+ \ 'mistyrose2': '#eed5d2',
+ \ 'mistyrose3': '#cdb7b5',
+ \ 'mistyrose4': '#8b7d7b',
+ \ 'azure1': '#f0ffff',
+ \ 'azure2': '#e0eeee',
+ \ 'azure3': '#c1cdcd',
+ \ 'azure4': '#838b8b',
+ \ 'slateblue1': '#836fff',
+ \ 'slateblue2': '#7a67ee',
+ \ 'slateblue3': '#6959cd',
+ \ 'slateblue4': '#473c8b',
+ \ 'royalblue1': '#4876ff',
+ \ 'royalblue2': '#436eee',
+ \ 'royalblue3': '#3a5fcd',
+ \ 'royalblue4': '#27408b',
+ \ 'blue1': '#0000ff',
+ \ 'blue2': '#0000ee',
+ \ 'blue3': '#0000cd',
+ \ 'blue4': '#00008b',
+ \ 'dodgerblue1': '#1e90ff',
+ \ 'dodgerblue2': '#1c86ee',
+ \ 'dodgerblue3': '#1874cd',
+ \ 'dodgerblue4': '#104e8b',
+ \ 'steelblue1': '#63b8ff',
+ \ 'steelblue2': '#5cacee',
+ \ 'steelblue3': '#4f94cd',
+ \ 'steelblue4': '#36648b',
+ \ 'deepskyblue1': '#00bfff',
+ \ 'deepskyblue2': '#00b2ee',
+ \ 'deepskyblue3': '#009acd',
+ \ 'deepskyblue4': '#00688b',
+ \ 'skyblue1': '#87ceff',
+ \ 'skyblue2': '#7ec0ee',
+ \ 'skyblue3': '#6ca6cd',
+ \ 'skyblue4': '#4a708b',
+ \ 'lightskyblue1': '#b0e2ff',
+ \ 'lightskyblue2': '#a4d3ee',
+ \ 'lightskyblue3': '#8db6cd',
+ \ 'lightskyblue4': '#607b8b',
+ \ 'slategray1': '#c6e2ff',
+ \ 'slategray2': '#b9d3ee',
+ \ 'slategray3': '#9fb6cd',
+ \ 'slategray4': '#6c7b8b',
+ \ 'lightsteelblue1': '#cae1ff',
+ \ 'lightsteelblue2': '#bcd2ee',
+ \ 'lightsteelblue3': '#a2b5cd',
+ \ 'lightsteelblue4': '#6e7b8b',
+ \ 'lightblue1': '#bfefff',
+ \ 'lightblue2': '#b2dfee',
+ \ 'lightblue3': '#9ac0cd',
+ \ 'lightblue4': '#68838b',
+ \ 'lightcyan1': '#e0ffff',
+ \ 'lightcyan2': '#d1eeee',
+ \ 'lightcyan3': '#b4cdcd',
+ \ 'lightcyan4': '#7a8b8b',
+ \ 'paleturquoise1': '#bbffff',
+ \ 'paleturquoise2': '#aeeeee',
+ \ 'paleturquoise3': '#96cdcd',
+ \ 'paleturquoise4': '#668b8b',
+ \ 'cadetblue1': '#98f5ff',
+ \ 'cadetblue2': '#8ee5ee',
+ \ 'cadetblue3': '#7ac5cd',
+ \ 'cadetblue4': '#53868b',
+ \ 'turquoise1': '#00f5ff',
+ \ 'turquoise2': '#00e5ee',
+ \ 'turquoise3': '#00c5cd',
+ \ 'turquoise4': '#00868b',
+ \ 'cyan1': '#00ffff',
+ \ 'cyan2': '#00eeee',
+ \ 'cyan3': '#00cdcd',
+ \ 'cyan4': '#008b8b',
+ \ 'darkslategray1': '#97ffff',
+ \ 'darkslategray2': '#8deeee',
+ \ 'darkslategray3': '#79cdcd',
+ \ 'darkslategray4': '#528b8b',
+ \ 'aquamarine1': '#7fffd4',
+ \ 'aquamarine2': '#76eec6',
+ \ 'aquamarine3': '#66cdaa',
+ \ 'aquamarine4': '#458b74',
+ \ 'darkseagreen1': '#c1ffc1',
+ \ 'darkseagreen2': '#b4eeb4',
+ \ 'darkseagreen3': '#9bcd9b',
+ \ 'darkseagreen4': '#698b69',
+ \ 'seagreen1': '#54ff9f',
+ \ 'seagreen2': '#4eee94',
+ \ 'seagreen3': '#43cd80',
+ \ 'seagreen4': '#2e8b57',
+ \ 'palegreen1': '#9aff9a',
+ \ 'palegreen2': '#90ee90',
+ \ 'palegreen3': '#7ccd7c',
+ \ 'palegreen4': '#548b54',
+ \ 'springgreen1': '#00ff7f',
+ \ 'springgreen2': '#00ee76',
+ \ 'springgreen3': '#00cd66',
+ \ 'springgreen4': '#008b45',
+ \ 'green1': '#00ff00',
+ \ 'green2': '#00ee00',
+ \ 'green3': '#00cd00',
+ \ 'green4': '#008b00',
+ \ 'chartreuse1': '#7fff00',
+ \ 'chartreuse2': '#76ee00',
+ \ 'chartreuse3': '#66cd00',
+ \ 'chartreuse4': '#458b00',
+ \ 'olivedrab1': '#c0ff3e',
+ \ 'olivedrab2': '#b3ee3a',
+ \ 'olivedrab3': '#9acd32',
+ \ 'olivedrab4': '#698b22',
+ \ 'darkolivegreen1': '#caff70',
+ \ 'darkolivegreen2': '#bcee68',
+ \ 'darkolivegreen3': '#a2cd5a',
+ \ 'darkolivegreen4': '#6e8b3d',
+ \ 'khaki1': '#fff68f',
+ \ 'khaki2': '#eee685',
+ \ 'khaki3': '#cdc673',
+ \ 'khaki4': '#8b864e',
+ \ 'lightgoldenrod1': '#ffec8b',
+ \ 'lightgoldenrod2': '#eedc82',
+ \ 'lightgoldenrod3': '#cdbe70',
+ \ 'lightgoldenrod4': '#8b814c',
+ \ 'lightyellow1': '#ffffe0',
+ \ 'lightyellow2': '#eeeed1',
+ \ 'lightyellow3': '#cdcdb4',
+ \ 'lightyellow4': '#8b8b7a',
+ \ 'yellow1': '#ffff00',
+ \ 'yellow2': '#eeee00',
+ \ 'yellow3': '#cdcd00',
+ \ 'yellow4': '#8b8b00',
+ \ 'gold1': '#ffd700',
+ \ 'gold2': '#eec900',
+ \ 'gold3': '#cdad00',
+ \ 'gold4': '#8b7500',
+ \ 'goldenrod1': '#ffc125',
+ \ 'goldenrod2': '#eeb422',
+ \ 'goldenrod3': '#cd9b1d',
+ \ 'goldenrod4': '#8b6914',
+ \ 'darkgoldenrod1': '#ffb90f',
+ \ 'darkgoldenrod2': '#eead0e',
+ \ 'darkgoldenrod3': '#cd950c',
+ \ 'darkgoldenrod4': '#8b6508',
+ \ 'rosybrown1': '#ffc1c1',
+ \ 'rosybrown2': '#eeb4b4',
+ \ 'rosybrown3': '#cd9b9b',
+ \ 'rosybrown4': '#8b6969',
+ \ 'indianred1': '#ff6a6a',
+ \ 'indianred2': '#ee6363',
+ \ 'indianred3': '#cd5555',
+ \ 'indianred4': '#8b3a3a',
+ \ 'sienna1': '#ff8247',
+ \ 'sienna2': '#ee7942',
+ \ 'sienna3': '#cd6839',
+ \ 'sienna4': '#8b4726',
+ \ 'burlywood1': '#ffd39b',
+ \ 'burlywood2': '#eec591',
+ \ 'burlywood3': '#cdaa7d',
+ \ 'burlywood4': '#8b7355',
+ \ 'wheat1': '#ffe7ba',
+ \ 'wheat2': '#eed8ae',
+ \ 'wheat3': '#cdba96',
+ \ 'wheat4': '#8b7e66',
+ \ 'tan1': '#ffa54f',
+ \ 'tan2': '#ee9a49',
+ \ 'tan3': '#cd853f',
+ \ 'tan4': '#8b5a2b',
+ \ 'chocolate1': '#ff7f24',
+ \ 'chocolate2': '#ee7621',
+ \ 'chocolate3': '#cd661d',
+ \ 'chocolate4': '#8b4513',
+ \ 'firebrick1': '#ff3030',
+ \ 'firebrick2': '#ee2c2c',
+ \ 'firebrick3': '#cd2626',
+ \ 'firebrick4': '#8b1a1a',
+ \ 'brown1': '#ff4040',
+ \ 'brown2': '#ee3b3b',
+ \ 'brown3': '#cd3333',
+ \ 'brown4': '#8b2323',
+ \ 'salmon1': '#ff8c69',
+ \ 'salmon2': '#ee8262',
+ \ 'salmon3': '#cd7054',
+ \ 'salmon4': '#8b4c39',
+ \ 'lightsalmon1': '#ffa07a',
+ \ 'lightsalmon2': '#ee9572',
+ \ 'lightsalmon3': '#cd8162',
+ \ 'lightsalmon4': '#8b5742',
+ \ 'orange1': '#ffa500',
+ \ 'orange2': '#ee9a00',
+ \ 'orange3': '#cd8500',
+ \ 'orange4': '#8b5a00',
+ \ 'darkorange1': '#ff7f00',
+ \ 'darkorange2': '#ee7600',
+ \ 'darkorange3': '#cd6600',
+ \ 'darkorange4': '#8b4500',
+ \ 'coral1': '#ff7256',
+ \ 'coral2': '#ee6a50',
+ \ 'coral3': '#cd5b45',
+ \ 'coral4': '#8b3e2f',
+ \ 'tomato1': '#ff6347',
+ \ 'tomato2': '#ee5c42',
+ \ 'tomato3': '#cd4f39',
+ \ 'tomato4': '#8b3626',
+ \ 'orangered1': '#ff4500',
+ \ 'orangered2': '#ee4000',
+ \ 'orangered3': '#cd3700',
+ \ 'orangered4': '#8b2500',
+ \ 'red1': '#ff0000',
+ \ 'red2': '#ee0000',
+ \ 'red3': '#cd0000',
+ \ 'red4': '#8b0000',
+ \ 'deeppink1': '#ff1493',
+ \ 'deeppink2': '#ee1289',
+ \ 'deeppink3': '#cd1076',
+ \ 'deeppink4': '#8b0a50',
+ \ 'hotpink1': '#ff6eb4',
+ \ 'hotpink2': '#ee6aa7',
+ \ 'hotpink3': '#cd6090',
+ \ 'hotpink4': '#8b3a62',
+ \ 'pink1': '#ffb5c5',
+ \ 'pink2': '#eea9b8',
+ \ 'pink3': '#cd919e',
+ \ 'pink4': '#8b636c',
+ \ 'lightpink1': '#ffaeb9',
+ \ 'lightpink2': '#eea2ad',
+ \ 'lightpink3': '#cd8c95',
+ \ 'lightpink4': '#8b5f65',
+ \ 'palevioletred1': '#ff82ab',
+ \ 'palevioletred2': '#ee799f',
+ \ 'palevioletred3': '#cd6889',
+ \ 'palevioletred4': '#8b475d',
+ \ 'maroon1': '#ff34b3',
+ \ 'maroon2': '#ee30a7',
+ \ 'maroon3': '#cd2990',
+ \ 'maroon4': '#8b1c62',
+ \ 'violetred1': '#ff3e96',
+ \ 'violetred2': '#ee3a8c',
+ \ 'violetred3': '#cd3278',
+ \ 'violetred4': '#8b2252',
+ \ 'magenta1': '#ff00ff',
+ \ 'magenta2': '#ee00ee',
+ \ 'magenta3': '#cd00cd',
+ \ 'magenta4': '#8b008b',
+ \ 'orchid1': '#ff83fa',
+ \ 'orchid2': '#ee7ae9',
+ \ 'orchid3': '#cd69c9',
+ \ 'orchid4': '#8b4789',
+ \ 'plum1': '#ffbbff',
+ \ 'plum2': '#eeaeee',
+ \ 'plum3': '#cd96cd',
+ \ 'plum4': '#8b668b',
+ \ 'mediumorchid1': '#e066ff',
+ \ 'mediumorchid2': '#d15fee',
+ \ 'mediumorchid3': '#b452cd',
+ \ 'mediumorchid4': '#7a378b',
+ \ 'darkorchid1': '#bf3eff',
+ \ 'darkorchid2': '#b23aee',
+ \ 'darkorchid3': '#9a32cd',
+ \ 'darkorchid4': '#68228b',
+ \ 'purple1': '#9b30ff',
+ \ 'purple2': '#912cee',
+ \ 'purple3': '#7d26cd',
+ \ 'purple4': '#551a8b',
+ \ 'mediumpurple1': '#ab82ff',
+ \ 'mediumpurple2': '#9f79ee',
+ \ 'mediumpurple3': '#8968cd',
+ \ 'mediumpurple4': '#5d478b',
+ \ 'thistle1': '#ffe1ff',
+ \ 'thistle2': '#eed2ee',
+ \ 'thistle3': '#cdb5cd',
+ \ 'thistle4': '#8b7b8b',
+ \ 'gray0': '#000000',
+ \ 'grey0': '#000000',
+ \ 'gray1': '#030303',
+ \ 'grey1': '#030303',
+ \ 'gray2': '#050505',
+ \ 'grey2': '#050505',
+ \ 'gray3': '#080808',
+ \ 'grey3': '#080808',
+ \ 'gray4': '#0a0a0a',
+ \ 'grey4': '#0a0a0a',
+ \ 'gray5': '#0d0d0d',
+ \ 'grey5': '#0d0d0d',
+ \ 'gray6': '#0f0f0f',
+ \ 'grey6': '#0f0f0f',
+ \ 'gray7': '#121212',
+ \ 'grey7': '#121212',
+ \ 'gray8': '#141414',
+ \ 'grey8': '#141414',
+ \ 'gray9': '#171717',
+ \ 'grey9': '#171717',
+ \ 'gray10': '#1a1a1a',
+ \ 'grey10': '#1a1a1a',
+ \ 'gray11': '#1c1c1c',
+ \ 'grey11': '#1c1c1c',
+ \ 'gray12': '#1f1f1f',
+ \ 'grey12': '#1f1f1f',
+ \ 'gray13': '#212121',
+ \ 'grey13': '#212121',
+ \ 'gray14': '#242424',
+ \ 'grey14': '#242424',
+ \ 'gray15': '#262626',
+ \ 'grey15': '#262626',
+ \ 'gray16': '#292929',
+ \ 'grey16': '#292929',
+ \ 'gray17': '#2b2b2b',
+ \ 'grey17': '#2b2b2b',
+ \ 'gray18': '#2e2e2e',
+ \ 'grey18': '#2e2e2e',
+ \ 'gray19': '#303030',
+ \ 'grey19': '#303030',
+ \ 'gray20': '#333333',
+ \ 'grey20': '#333333',
+ \ 'gray21': '#363636',
+ \ 'grey21': '#363636',
+ \ 'gray22': '#383838',
+ \ 'grey22': '#383838',
+ \ 'gray23': '#3b3b3b',
+ \ 'grey23': '#3b3b3b',
+ \ 'gray24': '#3d3d3d',
+ \ 'grey24': '#3d3d3d',
+ \ 'gray25': '#404040',
+ \ 'grey25': '#404040',
+ \ 'gray26': '#424242',
+ \ 'grey26': '#424242',
+ \ 'gray27': '#454545',
+ \ 'grey27': '#454545',
+ \ 'gray28': '#474747',
+ \ 'grey28': '#474747',
+ \ 'gray29': '#4a4a4a',
+ \ 'grey29': '#4a4a4a',
+ \ 'gray30': '#4d4d4d',
+ \ 'grey30': '#4d4d4d',
+ \ 'gray31': '#4f4f4f',
+ \ 'grey31': '#4f4f4f',
+ \ 'gray32': '#525252',
+ \ 'grey32': '#525252',
+ \ 'gray33': '#545454',
+ \ 'grey33': '#545454',
+ \ 'gray34': '#575757',
+ \ 'grey34': '#575757',
+ \ 'gray35': '#595959',
+ \ 'grey35': '#595959',
+ \ 'gray36': '#5c5c5c',
+ \ 'grey36': '#5c5c5c',
+ \ 'gray37': '#5e5e5e',
+ \ 'grey37': '#5e5e5e',
+ \ 'gray38': '#616161',
+ \ 'grey38': '#616161',
+ \ 'gray39': '#636363',
+ \ 'grey39': '#636363',
+ \ 'gray40': '#666666',
+ \ 'grey40': '#666666',
+ \ 'gray41': '#696969',
+ \ 'grey41': '#696969',
+ \ 'gray42': '#6b6b6b',
+ \ 'grey42': '#6b6b6b',
+ \ 'gray43': '#6e6e6e',
+ \ 'grey43': '#6e6e6e',
+ \ 'gray44': '#707070',
+ \ 'grey44': '#707070',
+ \ 'gray45': '#737373',
+ \ 'grey45': '#737373',
+ \ 'gray46': '#757575',
+ \ 'grey46': '#757575',
+ \ 'gray47': '#787878',
+ \ 'grey47': '#787878',
+ \ 'gray48': '#7a7a7a',
+ \ 'grey48': '#7a7a7a',
+ \ 'gray49': '#7d7d7d',
+ \ 'grey49': '#7d7d7d',
+ \ 'gray50': '#7f7f7f',
+ \ 'grey50': '#7f7f7f',
+ \ 'gray51': '#828282',
+ \ 'grey51': '#828282',
+ \ 'gray52': '#858585',
+ \ 'grey52': '#858585',
+ \ 'gray53': '#878787',
+ \ 'grey53': '#878787',
+ \ 'gray54': '#8a8a8a',
+ \ 'grey54': '#8a8a8a',
+ \ 'gray55': '#8c8c8c',
+ \ 'grey55': '#8c8c8c',
+ \ 'gray56': '#8f8f8f',
+ \ 'grey56': '#8f8f8f',
+ \ 'gray57': '#919191',
+ \ 'grey57': '#919191',
+ \ 'gray58': '#949494',
+ \ 'grey58': '#949494',
+ \ 'gray59': '#969696',
+ \ 'grey59': '#969696',
+ \ 'gray60': '#999999',
+ \ 'grey60': '#999999',
+ \ 'gray61': '#9c9c9c',
+ \ 'grey61': '#9c9c9c',
+ \ 'gray62': '#9e9e9e',
+ \ 'grey62': '#9e9e9e',
+ \ 'gray63': '#a1a1a1',
+ \ 'grey63': '#a1a1a1',
+ \ 'gray64': '#a3a3a3',
+ \ 'grey64': '#a3a3a3',
+ \ 'gray65': '#a6a6a6',
+ \ 'grey65': '#a6a6a6',
+ \ 'gray66': '#a8a8a8',
+ \ 'grey66': '#a8a8a8',
+ \ 'gray67': '#ababab',
+ \ 'grey67': '#ababab',
+ \ 'gray68': '#adadad',
+ \ 'grey68': '#adadad',
+ \ 'gray69': '#b0b0b0',
+ \ 'grey69': '#b0b0b0',
+ \ 'gray70': '#b3b3b3',
+ \ 'grey70': '#b3b3b3',
+ \ 'gray71': '#b5b5b5',
+ \ 'grey71': '#b5b5b5',
+ \ 'gray72': '#b8b8b8',
+ \ 'grey72': '#b8b8b8',
+ \ 'gray73': '#bababa',
+ \ 'grey73': '#bababa',
+ \ 'gray74': '#bdbdbd',
+ \ 'grey74': '#bdbdbd',
+ \ 'gray75': '#bfbfbf',
+ \ 'grey75': '#bfbfbf',
+ \ 'gray76': '#c2c2c2',
+ \ 'grey76': '#c2c2c2',
+ \ 'gray77': '#c4c4c4',
+ \ 'grey77': '#c4c4c4',
+ \ 'gray78': '#c7c7c7',
+ \ 'grey78': '#c7c7c7',
+ \ 'gray79': '#c9c9c9',
+ \ 'grey79': '#c9c9c9',
+ \ 'gray80': '#cccccc',
+ \ 'grey80': '#cccccc',
+ \ 'gray81': '#cfcfcf',
+ \ 'grey81': '#cfcfcf',
+ \ 'gray82': '#d1d1d1',
+ \ 'grey82': '#d1d1d1',
+ \ 'gray83': '#d4d4d4',
+ \ 'grey83': '#d4d4d4',
+ \ 'gray84': '#d6d6d6',
+ \ 'grey84': '#d6d6d6',
+ \ 'gray85': '#d9d9d9',
+ \ 'grey85': '#d9d9d9',
+ \ 'gray86': '#dbdbdb',
+ \ 'grey86': '#dbdbdb',
+ \ 'gray87': '#dedede',
+ \ 'grey87': '#dedede',
+ \ 'gray88': '#e0e0e0',
+ \ 'grey88': '#e0e0e0',
+ \ 'gray89': '#e3e3e3',
+ \ 'grey89': '#e3e3e3',
+ \ 'gray90': '#e5e5e5',
+ \ 'grey90': '#e5e5e5',
+ \ 'gray91': '#e8e8e8',
+ \ 'grey91': '#e8e8e8',
+ \ 'gray92': '#ebebeb',
+ \ 'grey92': '#ebebeb',
+ \ 'gray93': '#ededed',
+ \ 'grey93': '#ededed',
+ \ 'gray94': '#f0f0f0',
+ \ 'grey94': '#f0f0f0',
+ \ 'gray95': '#f2f2f2',
+ \ 'grey95': '#f2f2f2',
+ \ 'gray96': '#f5f5f5',
+ \ 'grey96': '#f5f5f5',
+ \ 'gray97': '#f7f7f7',
+ \ 'grey97': '#f7f7f7',
+ \ 'gray98': '#fafafa',
+ \ 'grey98': '#fafafa',
+ \ 'gray99': '#fcfcfc',
+ \ 'grey99': '#fcfcfc',
+ \ 'gray100': '#ffffff',
+ \ 'grey100': '#ffffff',
+ \ 'dark grey': '#a9a9a9',
+ \ 'darkgrey': '#a9a9a9',
+ \ 'dark gray': '#a9a9a9',
+ \ 'darkgray': '#a9a9a9',
+ \ 'dark blue': '#00008b',
+ \ 'darkblue': '#00008b',
+ \ 'dark cyan': '#008b8b',
+ \ 'darkcyan': '#008b8b',
+ \ 'dark magenta': '#8b008b',
+ \ 'darkmagenta': '#8b008b',
+ \ 'dark red': '#8b0000',
+ \ 'darkred': '#8b0000',
+ \ 'light green': '#90ee90',
+ \ 'lightgreen': '#90ee90',
+ \ 'crimson': '#dc143c',
+ \ 'indigo': '#4b0082',
+ \ 'olive': '#808000',
+ \ 'rebecca purple': '#663399',
+ \ 'rebeccapurple': '#663399',
+ \ 'silver': '#c0c0c0',
+ \ 'teal': '#008080'
+ \ }, 'keep')
+
+let &cpo= s:keepcpo
+unlet s:keepcpo
+
+"vim: sw=4
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 8d31483ec..418aee9ce 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1840,6 +1840,43 @@ v:collate The current locale setting for collation order of the runtime
command.
See |multi-lang|.
+ *v:colornames*
+v:colornames A dictionary that maps color names to hex color strings. These
+ color names can be used with the |highlight-guifg|,
+ |highlight-guibg|, and |highlight-guisp| parameters. Updating
+ an entry in v:colornames has no immediate effect on the syntax
+ highlighting. The highlight commands (probably in a
+ colorscheme script) need to be re-evaluated in order to use
+ the updated color values. For example: >
+
+ :let v:colornames['fuscia'] = '#cf3ab4'
+ :let v:colornames['mauve'] = '#915f6d'
+ :highlight Normal guifg=fuscia guibg=mauve
+<
+ This cannot be used to override the |cterm-colors| but it can
+ be used to override other colors. For example, the X11 colors
+ defined in the `colors/lists/default.vim` (previously defined
+ in |rgb.txt|). When defining new color names in a plugin, the
+ recommended practice is to set a color entry only when it does
+ not already exist. For example: >
+
+ :call extend(v:colornames, {
+ \ 'fuscia': '#cf3ab4',
+ \ 'mauve': '#915f6d,
+ \ }, 'keep')
+<
+ Using |extend| with the 'keep' option updates each color only
+ if it did not exist in |v:colornames|. Doing so allows the
+ user to choose the precise color value for a common name
+ by setting it in their |.vimrc|.
+
+ It is possible to remove entries from this dictionary but
+ doing so is *NOT* recommended. Doing so is disruptive to
+ other scripts. It is also unlikely to achieve the desired
+ result because the |colorscheme| and |highlight| commands will
+ both automatically load all `colors/lists/default.vim` color
+ scripts.
+
*v:completed_item* *completed_item-variable*
v:completed_item
|Dictionary| containing the |complete-items| for the most
diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt
index b83df1b98..227d0a271 100644
--- a/runtime/doc/gui_w32.txt
+++ b/runtime/doc/gui_w32.txt
@@ -323,20 +323,10 @@ These extra colors are also available:
Gray, Grey, LightYellow, SeaGreen, Orange, Purple, SlateBlue, Violet,
*rgb.txt*
-Additionally, colors defined by a "rgb.txt" file can be used. This file is
-well known from X11. A few lines from it: >
-
- 255 218 185 peach puff
- 205 133 63 peru
- 255 181 197 pink
-
-This shows the layout of the file: First the R, G and B value as a decimal
-number, followed by the name of the color. The four fields are separated by
-spaces.
-
-You can get an rgb.txt file from any X11 distribution. It is located in a
-directory like "/usr/X11R6/lib/X11/". For Vim it must be located in the
-$VIMRUNTIME directory. Thus the file can be found with "$VIMRUNTIME/rgb.txt".
+Additionally, colors defined by a default color list can be used. For more
+info see |:colorscheme|. These colors used to be defined in
+$VIMRUNTIME/rgb.txt, now they are in |v:colornames| which is initialized from
+$VIMRUNTIME/colors/lists/default.vim.
==============================================================================
*gui-w32-dialogs* *dialog*
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 2dc753546..5334ac00c 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -141,6 +141,11 @@ larger. When it's more there probably is an endless loop. Probably a
The color name {name} is unknown. See |gui-colors| for a list of colors that
are available on most systems.
+ *E1244* >
+ Bad color string: {str}
+
+The provided color did not conform to the pattern #rrggbb
+
*E458* >
Cannot allocate colormap entry, some colors may be incorrect
diff --git a/runtime/doc/os_haiku.txt b/runtime/doc/os_haiku.txt
index 5c520b068..a22b99bf4 100644
--- a/runtime/doc/os_haiku.txt
+++ b/runtime/doc/os_haiku.txt
@@ -194,9 +194,8 @@ $VIM/macros/swapmous.vim for an example. |gui-mouse-mapping|
11. Color names *haiku-colors*
-Vim has a number of color names built-in. Additional names are read from the
-file $VIMRUNTIME/rgb.txt, if present. This file is basically the color
-database from X. Names used from this file are cached for efficiency.
+Vim has a number of color names built-in. Additional names can be defined in
+|v:colornames|. See |:colorscheme| for details.
12. GUI Toolbar Images *haiku-toolbar-images*
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 1ade9e99d..1c20659ac 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -5143,8 +5143,35 @@ guisp={color-name} *highlight-guisp*
"gg" is the Green value
"bb" is the Blue value
All values are hexadecimal, range from "00" to "ff". Examples: >
- :highlight Comment guifg=#11f0c3 guibg=#ff00ff
+ :highlight Comment guifg=#11f0c3 guibg=#ff00ff
<
+ If you are authoring a color scheme and use the same hexademical value
+ repeatedly, you can define a name for it in |v:colornames|. For
+ example: >
+
+ # provide a default value for this color but allow the user to
+ # override it.
+ :call extend(v:colornames, {'alt_turquoise': '#11f0c3'}, 'keep')
+ :highlight Comment guifg=alt_turquoise guibg=magenta
+<
+ If you are using a color scheme that relies on named colors and you
+ would like to adjust the precise appearance of those colors, you can
+ do so by overriding the values in |v:colornames| prior to loading the
+ scheme: >
+
+ let v:colornames['alt_turquoise'] = '#22f0d3'
+ colorscheme alt
+<
+ If you want to develop a color list that can be relied on by others,
+ it is best to prefix your color names. By convention these color lists
+ are placed in the colors/lists directory. You can see an example in
+ '$VIMRUNTIME/colors/lists/csscolors.vim'. This list would be sourced
+ by a color scheme using: >
+
+ :runtime colors/lists/csscolors.vim
+ :highlight Comment guifg=css_turquoise
+<
+
*highlight-groups* *highlight-default*
These are the default highlighting groups. These groups are used by the
'highlight' option default. Note that the highlighting depends on the value
diff --git a/runtime/doc/usr_06.txt b/runtime/doc/usr_06.txt
index 65d69dec5..2cf672e70 100644
--- a/runtime/doc/usr_06.txt
+++ b/runtime/doc/usr_06.txt
@@ -184,7 +184,30 @@ this command: >
:runtime syntax/colortest.vim
You will see text in various color combinations. You can check which ones are
-readable and look nice.
+readable and look nice. These aren't the only colors available to you though.
+You can specify #rrggbb hex colors and you can define new names for hex
+colors in |v:colornames| like so: >
+
+ let v:colornames['mine_red'] = '#aa0000'
+<
+If you are authoring a color scheme for others to use, it is important
+to define these colors only when they do not exist: >
+
+ call extend(v:colornames, {'mine_red': '#aa0000'}, 'keep')
+
+This allows users of the color scheme to override the precise definition of
+that color prior to loading your color scheme. For example, in a |.vimrc|
+file:
+
+ runtime colors/lists/css_colors.vim
+ let v:colornames['your_red'] = v:colornames['css_red']
+ colorscheme yourscheme
+
+As a color scheme author, you should be able to rely on some color names for
+GUI colors. These are defined in `colors/lists/default.vim`. All such files
+found on the |runtimepath| are loaded each time the colorscheme command is
+run. A canonical list is provided by the vim distribution, which should
+include all X11 colors (previously defined in rgb.txt).
==============================================================================
*06.4* With colors or without colors
diff --git a/src/Makefile b/src/Makefile
index 32411d0b8..e5953afdb 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1136,9 +1136,6 @@ SYS_DELMENU_FILE = $(DESTDIR)$(SCRIPTLOC)/delmenu.vim
### Name of the bugreport file target.
SYS_BUGR_FILE = $(DESTDIR)$(SCRIPTLOC)/bugreport.vim
-### Name of the rgb.txt file target.
-SYS_RGB_FILE = $(DESTDIR)$(SCRIPTLOC)/rgb.txt
-
### Name of the file type detection file target.
SYS_FILETYPE_FILE = $(DESTDIR)$(SCRIPTLOC)/filetype.vim
@@ -2449,9 +2446,6 @@ installrtbase: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
chmod $(VIMSCRIPTMOD) $(EVIM_FILE)
$(INSTALL_DATA) $(SCRIPTSOURCE)/mswin.vim $(MSWIN_FILE)
chmod $(VIMSCRIPTMOD) $(MSWIN_FILE)
-# install the rgb.txt file
- $(INSTALL_DATA) $(SCRIPTSOURCE)/rgb.txt $(SYS_RGB_FILE)
- chmod $(VIMSCRIPTMOD) $(SYS_RGB_FILE)
# install the bugreport file
$(INSTALL_DATA) $(SCRIPTSOURCE)/bugreport.vim $(SYS_BUGR_FILE)
chmod $(VIMSCRIPTMOD) $(SYS_BUGR_FILE)
@@ -2481,7 +2475,7 @@ installrtbase: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
cd $(PRINTSOURCE); $(INSTALL_DATA) *.ps $(DEST_PRINT)
cd $(DEST_PRINT); chmod $(FILEMOD) *.ps
# install the colorscheme files
- cd $(COLSOURCE); $(INSTALL_DATA_R) *.vim tools README.txt $(DEST_COL)
+ cd $(COLSOURCE); $(INSTALL_DATA_R) *.vim lists tools README.txt $(DEST_COL)
cd $(DEST_COL); chmod $(DIRMOD) tools
cd $(DEST_COL); chmod $(HELPMOD) *.vim README.txt tools/*.vim
# install the syntax files
@@ -2894,7 +2888,6 @@ uninstall_runtime:
-rm -f $(DEST_MAN_RU)/xxd.1 $(DEST_MAN_RU_U)/xxd.1
-rm -f $(DEST_HELP)/*.txt $(DEST_HELP)/tags $(DEST_HELP)/*.pl
-rm -f $(DEST_HELP)/*.??x $(DEST_HELP)/tags-??
- -rm -f $(SYS_RGB_FILE)
-rm -f $(SYS_MENU_FILE) $(SYS_SYNMENU_FILE) $(SYS_DELMENU_FILE)
-rm -f $(SYS_BUGR_FILE) $(VIM_DEFAULTS_FILE) $(EVIM_FILE) $(MSWIN_FILE)
-rm -f $(DEST_SCRIPT)/gvimrc_example.vim $(DEST_SCRIPT)/vimrc_example.vim
@@ -3666,12 +3659,10 @@ Makefile:
# This rule:
# - add resources to already installed vim binary to avoid
# stripping them during install;
-# - copy rgb.txt to runtime directory;
# - update system MIME database with info about vim application.
#
install_haiku_extra: $(DEST_BIN)/$(VIMTARGET) objects/os_haiku.rsrc
xres -o $(DEST_BIN)/$(VIMTARGET) objects/os_haiku.rsrc
- $(INSTALL_DATA) $(SCRIPTSOURCE)/rgb.txt $(DEST_RT)
mimeset $(DEST_BIN)/$(VIMTARGET)
# List of g*-links that should be replaced with shell script equivalents.
diff --git a/src/errors.h b/src/errors.h
index 7778b3960..537072d7d 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -147,6 +147,10 @@ EXTERN char e_no_such_user_defined_command_str[]
EXTERN char e_no_digraphs_version[]
INIT(= N_("E196: No digraphs in this version"));
#endif
+#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
+EXTERN char e_cannot_allocate_color_str[]
+ INIT(= N_("E254: Cannot allocate color %s"));
+#endif
EXTERN char e_ambiguous_use_of_user_defined_command[]
INIT(= N_("E464: Ambiguous use of user-defined command"));
EXTERN char e_invalid_command[]
@@ -678,3 +682,5 @@ EXTERN char e_no_white_space_allowed_before_separator_str[]
INIT(= N_("E1242: No white space allowed before separator: %s"));
EXTERN char e_ascii_code_not_in_range[]
INIT(= N_("E1243: ASCII code not in 32-127 range"));
+EXTERN char e_bad_color_string_str[]
+ INIT(= N_("E1244: Bad color string: %s"));
diff --git a/src/evalvars.c b/src/evalvars.c
index fbf2d68d1..08736dd8c 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -149,6 +149,7 @@ static struct vimvar
{VV_NAME("argv", VAR_LIST), VV_RO},
{VV_NAME("collate", VAR_STRING), VV_RO},
{VV_NAME("exiting", VAR_SPECIAL), VV_RO},
+ {VV_NAME("colornames", VAR_DICT), VV_RO},
};
// shorthand
@@ -248,6 +249,8 @@ evalvars_init(void)
set_vim_var_nr(VV_ECHOSPACE, sc_col - 1);
+ set_vim_var_dict(VV_COLORNAMES, dict_alloc());
+
// Default for v:register is not 0 but '"'. This is adjusted once the
// clipboard has been setup by calling reset_reg_var().
set_reg_var(0);
diff --git a/src/globals.h b/src/globals.h
index 948c35f84..5c54130eb 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1774,9 +1774,6 @@ EXTERN char e_nowhitespace[] INIT(= N_("E274: No white space allowed before pare
EXTERN char e_lock_unlock[] INIT(= N_("E940: Cannot lock or unlock variable %s"));
#endif
-#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
-EXTERN char e_alloc_color[] INIT(= N_("E254: Cannot allocate color %s"));
-#endif
EXTERN char e_chan_or_job_req[] INIT(= N_("E706: Channel or Job required"));
EXTERN char e_jobreq[] INIT(= N_("E693: Job required"));
diff --git a/src/gui.c b/src/gui.c
index 1edf659dd..68754b3bc 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -4785,7 +4785,7 @@ gui_get_color(char_u *name)
&& gui.in_use
#endif
)
- semsg(_(e_alloc_color), name);
+ semsg(_(e_cannot_allocate_color_str), name);
return t;
}
diff --git a/src/gui_haiku.cc b/src/gui_haiku.cc
index 644c2db66..6d973c565 100644
--- a/src/gui_haiku.cc
+++ b/src/gui_haiku.cc
@@ -4054,164 +4054,7 @@ guicolor_T
gui_mch_get_color(
char_u *name)
{
- typedef struct GuiColourTable
- {
- const char *name;
- guicolor_T colour;
- } GuiColourTable;
-
-#define NSTATIC_COLOURS 50 // 32
-#define NDYNAMIC_COLOURS 33
-#define NCOLOURS (NSTATIC_COLOURS + NDYNAMIC_COLOURS)
-
- static GuiColourTable table[NCOLOURS] =
- {
- {"Black", RGB(0x00, 0x00, 0x00)},
- {"DarkGray", RGB(0x80, 0x80, 0x80)},
- {"DarkGrey", RGB(0x80, 0x80, 0x80)},
- {"Gray", RGB(0xC0, 0xC0, 0xC0)},
- {"Grey", RGB(0xC0, 0xC0, 0xC0)},
- {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
- {"LightGrey", RGB(0xD3, 0xD3, 0xD3)},
- {"Gray10", RGB(0x1A, 0x1A, 0x1A)},
- {"Grey10", RGB(0x1A, 0x1A, 0x1A)},
- {"Gray20", RGB(0x33, 0x33, 0x33)},
- {"Grey20", RGB(0x33, 0x33, 0x33)},
- {"Gray30", RGB(0x4D, 0x4D, 0x4D)},
- {"Grey30", RGB(0x4D, 0x4D, 0x4D)},
- {"Gray40", RGB(0x66, 0x66, 0x66)},
- {"Grey40", RGB(0x66, 0x66, 0x66)},
- {"Gray50", RGB(0x7F, 0x7F, 0x7F)},
- {"Grey50", RGB(0x7F, 0x7F, 0x7F)},
- {"Gray60", RGB(0x99, 0x99, 0x99)},
- {"Grey60", RGB(0x99, 0x99, 0x99)},
- {"Gray70", RGB(0xB3, 0xB3, 0xB3)},
- {"Grey70", RGB(0xB3, 0xB3, 0xB3)},
- {"Gray80", RGB(0xCC, 0xCC, 0xCC)},
- {"Grey80", RGB(0xCC, 0xCC, 0xCC)},
- {"Gray90", RGB(0xE5, 0xE5, 0xE5)},
- {"Grey90", RGB(0xE5, 0xE5, 0xE5)},
- {"White", RGB(0xFF, 0xFF, 0xFF)},
- {"DarkRed", RGB(0x80, 0x00, 0x00)},
- {"Red", RGB(0xFF, 0x00, 0x00)},
- {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
- {"DarkBlue", RGB(0x00, 0x00, 0x80)},
- {"Blue", RGB(0x00, 0x00, 0xFF)},
- {"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
- {"DarkGreen", RGB(0x00, 0x80, 0x00)},
- {"Green", RGB(0x00, 0xFF, 0x00)},
- {"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
- {"DarkCyan", RGB(0x00, 0x80, 0x80)},
- {"Cyan", RGB(0x00, 0xFF, 0xFF)},
- {"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
- {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
- {"Magenta", RGB(0xFF, 0x00, 0xFF)},
- {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
- {"Brown", RGB(0x80, 0x40, 0x40)},
- {"Yellow", RGB(0xFF, 0xFF, 0x00)},
- {"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
- {"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
- {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
- {"Orange", RGB(0xFF, 0xA5, 0x00)},
- {"Purple", RGB(0xA0, 0x20, 0xF0)},
- {"SlateBlue", RGB(0x6A, 0x5A, 0xCD)},
- {"Violet", RGB(0xEE, 0x82, 0xEE)},
- // NOTE: some entries are zero-allocated for NDDYNAMIC_COLORS
- // in this table!
- };
-
- static int endColour = NSTATIC_COLOURS;
- static int newColour = NSTATIC_COLOURS;
-
- int r, g, b;
- int i;
-
- if (name[0] == '#' && STRLEN(name) == 7)
- {
- // Name is in "#rrggbb" format
- r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
- g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
- b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
- if (r < 0 || g < 0 || b < 0)
- return INVALCOLOR;
- return RGB(r, g, b);
- }
- else
- {
- // Check if the name is one of the colours we know
- for (i = 0; i < endColour; i++)
- if (STRICMP(name, table[i].name) == 0)
- return table[i].colour;
- }
-
- /*
- * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
- */
- {
-#define LINE_LEN 100
- FILE *fd;
- char line[LINE_LEN];
- char_u *fname;
-
- fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
- if (fname == NULL)
- return INVALCOLOR;
-
- fd = fopen((char *)fname, "rt");
- vim_free(fname);
- if (fd == NULL)
- return INVALCOLOR;
-
- while (!feof(fd))
- {
- int len;
- int pos;
- char *colour;
-
- fgets(line, LINE_LEN, fd);
- len = strlen(line);
-
- if (len <= 1 || line[len-1] != '\n')
- continue;
-
- line[len-1] = '\0';
-
- i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
- if (i != 3)
- continue;
-
- colour = line + pos;
-
- if (STRICMP(colour, name) == 0)
- {
- fclose(fd);
- /*
- * Now remember this colour in the table.
- * A LRU scheme might be better but this is simpler.
- * Or could use a growing array.
- */
- guicolor_T gcolour = RGB(r,g,b);
-
- // NOTE: see note above in table allocation! We are working here with
- // dynamically allocated names, not constant ones!
- vim_free((char*)table[newColour].name);
- table[newColour].name = (char *)vim_strsave((char_u *)colour);
- table[newColour].colour = gcolour;
-
- newColour++;
- if (newColour >= NCOLOURS)
- newColour = NSTATIC_COLOURS;
- if (endColour < NCOLOURS)
- endColour = newColour;
-
- return gcolour;
- }
- }
-
- fclose(fd);
- }
-
- return INVALCOLOR;
+ return gui_get_color_cmn(name);
}
/*
diff --git a/src/highlight.c b/src/highlight.c
index 76d9a7e82..5dde08b8f 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -475,6 +475,9 @@ load_colors(char_u *name)
buf = alloc(STRLEN(name) + 12);
if (buf != NULL)
{
+#ifdef FEAT_EVAL
+ load_default_colors_lists();
+#endif
apply_autocmds(EVENT_COLORSCHEMEPRE, name,
curbuf->b_fname, FALSE, curbuf);
sprintf((char *)buf, "colors/%s.vim", name);
@@ -1190,7 +1193,7 @@ highlight_set_guibg(
HL_TABLE()[idx].sg_set |= SG_GUI;
# if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
- // In GUI guifg colors are only used when recognized
+ // In GUI guibg colors are only used when recognized
i = color_name2handle(arg);
if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
{
@@ -2231,6 +2234,234 @@ color_name2handle(char_u *name)
return GUI_GET_COLOR(name);
}
+
+// On MS-Windows an RGB macro is available and it produces 0x00bbggrr color
+// values as used by the MS-Windows GDI api. It should be used only for
+// MS-Windows GDI builds.
+# if defined(RGB) && defined(MSWIN) && !defined(FEAT_GUI)
+# undef RGB
+# endif
+# ifndef RGB
+# define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
+# endif
+
+# ifdef VIMDLL
+ static guicolor_T
+gui_adjust_rgb(guicolor_T c)
+{
+ if (gui.in_use)
+ return c;
+ else
+ return ((c & 0xff) << 16) | (c & 0x00ff00) | ((c >> 16) & 0xff);
+}
+# else
+# define gui_adjust_rgb(c) (c)
+# endif
+
+ static int
+hex_digit(int c)
+{
+ if (isdigit(c))
+ return c - '0';
+ c = TOLOWER_ASC(c);
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ return 0x1ffffff;
+}
+
+ guicolor_T
+decode_hex_color(char_u *hex)
+{
+ guicolor_T color;
+
+ if (hex[0] != '#' || STRLEN(hex) != 7)
+ return INVALCOLOR;
+
+ // Name is in "#rrggbb" format
+ color = RGB(((hex_digit(hex[1]) << 4) + hex_digit(hex[2])),
+ ((hex_digit(hex[3]) << 4) + hex_digit(hex[4])),
+ ((hex_digit(hex[5]) << 4) + hex_digit(hex[6])));
+ if (color > 0xffffff)
+ return INVALCOLOR;
+ return gui_adjust_rgb(color);
+}
+
+#if defined(FEAT_EVAL)
+// Returns the color currently mapped to the given name or INVALCOLOR if no
+// such name exists in the color table. The convention is to use lowercase for
+// all keys in the v:colornames dictionary. The value can be either a string in
+// the form #rrggbb or a number, either of which is converted to a guicolor_T.
+ guicolor_T
+colorname2rgb(char_u *name)
+{
+ dict_T *colornames_table = get_vim_var_dict(VV_COLORNAMES);
+ char_u *lc_name;
+ dictitem_T *colentry;
+ char_u *colstr;
+ varnumber_T colnum;
+
+ lc_name = strlow_save(name);
+ if (lc_name == NULL)
+ return INVALCOLOR;
+
+ colentry = dict_find(colornames_table, lc_name, -1);
+ vim_free(lc_name);
+ if (colentry == NULL)
+ return INVALCOLOR;
+
+ if (colentry->di_tv.v_type == VAR_STRING)
+ {
+ colstr = tv_get_string_strict(&colentry->di_tv);
+ if ((STRLEN(colstr) == 7) && (*colstr == '#'))
+ {
+ return decode_hex_color(colstr);
+ }
+ else
+ {
+ semsg(_(e_bad_color_string_str), colstr);
+ return INVALCOLOR;
+ }
+ }
+
+ if (colentry->di_tv.v_type == VAR_NUMBER)
+ {
+ colnum = tv_get_number(&colentry->di_tv);
+ return (guicolor_T)colnum;
+ }
+
+ return INVALCOLOR;
+}
+
+// Maps the given name to the given color value, overwriting any current
+// mapping. If allocation fails the named color will no longer exist in the
+// table and the user will receive an error message.
+ void
+save_colorname_hexstr(int r, int g, int b, char_u *name)
+{
+ int result;
+ dict_T *colornames_table;
+ dictitem_T *existing;
+ char_u hexstr[8];
+
+ if (vim_snprintf((char *)hexstr, sizeof(hexstr),
+ "#%02x%02x%02x", r, g, b) < 0)
+ {
+ semsg(_(e_cannot_allocate_color_str), name);
+ return;
+ }
+
+ colornames_table = get_vim_var_dict(VV_COLORNAMES);
+ // The colornames_table dict is safe to use here because it is allocated at
+ // startup in evalvars.c
+ existing = dict_find(colornames_table, name, -1);
+ if (existing != NULL)
+ {
+ dictitem_remove(colornames_table, existing);
+ existing = NULL; // dictitem_remove freed the item
+ }
+
+ result = dict_add_string(colornames_table, (char *)name, hexstr);
+ if (result == FAIL)
+ semsg(_(e_cannot_allocate_color_str), name);
+}
+
+/*
+ * Load a default color list. Intended to support legacy color names but allows
+ * the user to override the color values. Only loaded once.
+ */
+ void
+load_default_colors_lists()
+{
+ // Lacking a default color list isn't the end of the world but it is likely
+ // an inconvenience so users should know when it is missing.
+ if (source_runtime((char_u *)"colors/lists/default.vim", DIP_ALL) != OK)
+ msg("failed to load colors/lists/default.vim");
+}
+#endif
+
+ guicolor_T
+gui_get_color_cmn(char_u *name)
+{
+ int i;
+ guicolor_T color;
+
+ struct rgbcolor_table_S {
+ char_u *color_name;
+ guicolor_T color;
+ };
+
+ // Only non X11 colors (not present in rgb.txt) and colors in
+ // color_names[], useful when $VIMRUNTIME is not found,.
+ static struct rgbcolor_table_S rgb_table[] = {
+ {(char_u *)"black", RGB(0x00, 0x00, 0x00)},
+ {(char_u *)"blue", RGB(0x00, 0x00, 0xFF)},
+ {(char_u *)"brown", RGB(0xA5, 0x2A, 0x2A)},
+ {(char_u *)"cyan", RGB(0x00, 0xFF, 0xFF)},
+ {(char_u *)"darkblue", RGB(0x00, 0x00, 0x8B)},
+ {(char_u *)"darkcyan", RGB(0x00, 0x8B, 0x8B)},
+ {(char_u *)"darkgray", RGB(0xA9, 0xA9, 0xA9)},
+ {(char_u *)"darkgreen", RGB(0x00, 0x64, 0x00)},
+ {(char_u *)"darkgrey", RGB(0xA9, 0xA9, 0xA9)},
+ {(char_u *)"darkmagenta", RGB(0x8B, 0x00, 0x8B)},
+ {(char_u *)"darkred", RGB(0x8B, 0x00, 0x00)},
+ {(char_u *)"darkyellow", RGB(0x8B, 0x8B, 0x00)}, // No X11
+ {(char_u *)"gray", RGB(0xBE, 0xBE, 0xBE)},
+ {(char_u *)"green", RGB(0x00, 0xFF, 0x00)},
+ {(char_u *)"grey", RGB(0xBE, 0xBE, 0xBE)},
+ {(char_u *)"grey40", RGB(0x66, 0x66, 0x66)},
+ {(char_u *)"grey50", RGB(0x7F, 0x7F, 0x7F)},
+ {(char_u *)"grey90", RGB(0xE5, 0xE5, 0xE5)},
+ {(char_u *)"lightblue", RGB(0xAD, 0xD8, 0xE6)},
+ {(char_u *)"lightcyan", RGB(0xE0, 0xFF, 0xFF)},
+ {(char_u *)"lightgray", RGB(0xD3, 0xD3, 0xD3)},
+ {(char_u *)"lightgreen", RGB(0x90, 0xEE, 0x90)},
+ {(char_u *)"lightgrey", RGB(0xD3, 0xD3, 0xD3)},
+ {(char_u *)"lightmagenta", RGB(0xFF, 0x8B, 0xFF)}, // No X11
+ {(char_u *)"lightred", RGB(0xFF, 0x8B, 0x8B)}, // No X11
+ {(char_u *)"lightyellow", RGB(0xFF, 0xFF, 0xE0)},
+ {(char_u *)"magenta", RGB(0xFF, 0x00, 0xFF)},
+ {(char_u *)"red", RGB(0xFF, 0x00, 0x00)},
+ {(char_u *)"seagreen", RGB(0x2E, 0x8B, 0x57)},
+ {(char_u *)"white", RGB(0xFF, 0xFF, 0xFF)},
+ {(char_u *)"yellow", RGB(0xFF, 0xFF, 0x00)},
+ };
+
+ color = decode_hex_color(name);
+ if (color != INVALCOLOR)
+ return color;
+
+ // Check if the name is one of the colors we know
+ for (i = 0; i < (int)ARRAY_LENGTH(rgb_table); i++)
+ if (STRICMP(name, rgb_table[i].color_name) == 0)
+ return gui_adjust_rgb(rgb_table[i].color);
+
+#if defined(FEAT_EVAL)
+ /*
+ * Not a traditional color. Load additional color aliases and then consult the alias table.
+ */
+
+ color = colorname2rgb(name);
+ if (color == INVALCOLOR)
+ {
+ load_default_colors_lists();
+ color = colorname2rgb(name);
+ }
+
+ return color;
+#else
+ return INVALCOLOR;
+#endif
+}
+
+ guicolor_T
+gui_get_rgb_color_cmn(int r, int g, int b)
+{
+ guicolor_T color = RGB(r, g, b);
+
+ if (color > 0xffffff)
+ return INVALCOLOR;
+ return gui_adjust_rgb(color);
+}
#endif
/*
diff --git a/src/job.c b/src/job.c
index afa9972a7..fcb482c70 100644
--- a/src/job.c
+++ b/src/job.c
@@ -559,7 +559,7 @@ get_job_options(typval_T *tv, jobopt_T *opt, int supported, int supported2)
{
if (called_emsg_before == called_emsg)
// may not get the error if the GUI didn't start
- semsg(_(e_alloc_color), color_name);
+ semsg(_(e_cannot_allocate_color_str), color_name);
return FAIL;
}
diff --git a/src/proto/highlight.pro b/src/proto/highlight.pro
index ca4498140..4c6b2f75c 100644
--- a/src/proto/highlight.pro
+++ b/src/proto/highlight.pro
@@ -14,6 +14,12 @@ void hl_set_font_name(char_u *font_name);
void hl_set_bg_color_name(char_u *name);
void hl_set_fg_color_name(char_u *name);
guicolor_T color_name2handle(char_u *name);
+guicolor_T decode_hex_color(char_u *hex);
+guicolor_T colorname2rgb(char_u *name);
+void save_colorname_hexstr(int r, int g, int b, char_u *name);
+void load_default_colors_lists(void);
+guicolor_T gui_get_color_cmn(char_u *name);
+guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);
int get_cterm_attr_idx(int attr, int fg, int bg);
int get_tgc_attr_idx(int attr, guicolor_T fg, guicolor_T bg);
int get_gui_attr_idx(int attr, guicolor_T fg, guicolor_T bg);
diff --git a/src/proto/term.pro b/src/proto/term.pro
index efb255534..572a41db7 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -83,8 +83,6 @@ void show_termcodes(void);
int show_one_termcode(char_u *name, char_u *code, int printit);
void update_tcap(int attr);
void swap_tcap(void);
-guicolor_T gui_get_color_cmn(char_u *name);
-guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);
void cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx);
void term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len);
/* vim: set ft=c : */
diff --git a/src/term.c b/src/term.c
index b61667de8..cb38b9338 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1353,7 +1353,7 @@ termgui_get_color(char_u *name)
t = termgui_mch_get_color(name);
if (t == INVALCOLOR)
- semsg(_(e_alloc_color), name);
+ semsg(_(e_cannot_allocate_color_str), name);
return t;
}
@@ -6630,203 +6630,6 @@ swap_tcap(void)
#endif
-#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
- static int
-hex_digit(int c)
-{
- if (isdigit(c))
- return c - '0';
- c = TOLOWER_ASC(c);
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- return 0x1ffffff;
-}
-
-# ifdef VIMDLL
- static guicolor_T
-gui_adjust_rgb(guicolor_T c)
-{
- if (gui.in_use)
- return c;
- else
- return ((c & 0xff) << 16) | (c & 0x00ff00) | ((c >> 16) & 0xff);
-}
-# else
-# define gui_adjust_rgb(c) (c)
-# endif
-
- guicolor_T
-gui_get_color_cmn(char_u *name)
-{
- // On MS-Windows an RGB macro is available and it produces 0x00bbggrr color
- // values as used by the MS-Windows GDI api. It should be used only for
- // MS-Windows GDI builds.
-# if defined(RGB) && defined(MSWIN) && !defined(FEAT_GUI)
-# undef RGB
-# endif
-# ifndef RGB
-# define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
-# endif
-# define LINE_LEN 100
- FILE *fd;
- char line[LINE_LEN];
- char_u *fname;
- int r, g, b, i;
- guicolor_T color;
-
- struct rgbcolor_table_S {
- char_u *color_name;
- guicolor_T color;
- };
-
- // Only non X11 colors (not present in rgb.txt) and colors in
- // color_names[], useful when $VIMRUNTIME is not found,.
- static struct rgbcolor_table_S rgb_table[] = {
- {(char_u *)"black", RGB(0x00, 0x00, 0x00)},
- {(char_u *)"blue", RGB(0x00, 0x00, 0xFF)},
- {(char_u *)"brown", RGB(0xA5, 0x2A, 0x2A)},
- {(char_u *)"cyan", RGB(0x00, 0xFF, 0xFF)},
- {(char_u *)"darkblue", RGB(0x00, 0x00, 0x8B)},
- {(char_u *)"darkcyan", RGB(0x00, 0x8B, 0x8B)},
- {(char_u *)"darkgray", RGB(0xA9, 0xA9, 0xA9)},
- {(char_u *)"darkgreen", RGB(0x00, 0x64, 0x00)},
- {(char_u *)"darkgrey", RGB(0xA9, 0xA9, 0xA9)},
- {(char_u *)"darkmagenta", RGB(0x8B, 0x00, 0x8B)},
- {(char_u *)"darkred", RGB(0x8B, 0x00, 0x00)},
- {(char_u *)"darkyellow", RGB(0x8B, 0x8B, 0x00)}, // No X11
- {(char_u *)"gray", RGB(0xBE, 0xBE, 0xBE)},
- {(char_u *)"green", RGB(0x00, 0xFF, 0x00)},
- {(char_u *)"grey", RGB(0xBE, 0xBE, 0xBE)},
- {(char_u *)"grey40", RGB(0x66, 0x66, 0x66)},
- {(char_u *)"grey50", RGB(0x7F, 0x7F, 0x7F)},
- {(char_u *)"grey90", RGB(0xE5, 0xE5, 0xE5)},
- {(char_u *)"lightblue", RGB(0xAD, 0xD8, 0xE6)},
- {(char_u *)"lightcyan", RGB(0xE0, 0xFF, 0xFF)},
- {(char_u *)"lightgray", RGB(0xD3, 0xD3, 0xD3)},
- {(char_u *)"lightgreen", RGB(0x90, 0xEE, 0x90)},
- {(char_u *)"lightgrey", RGB(0xD3, 0xD3, 0xD3)},
- {(char_u *)"lightmagenta", RGB(0xFF, 0x8B, 0xFF)}, // No X11
- {(char_u *)"lightred", RGB(0xFF, 0x8B, 0x8B)}, // No X11
- {(char_u *)"lightyellow", RGB(0xFF, 0xFF, 0xE0)},
- {(char_u *)"magenta", RGB(0xFF, 0x00, 0xFF)},
- {(char_u *)"red", RGB(0xFF, 0x00, 0x00)},
- {(char_u *)"seagreen", RGB(0x2E, 0x8B, 0x57)},
- {(char_u *)"white", RGB(0xFF, 0xFF, 0xFF)},
- {(char_u *)"yellow", RGB(0xFF, 0xFF, 0x00)},
- };
-
- static struct rgbcolor_table_S *colornames_table;
- static int size = 0;
-
- if (name[0] == '#' && STRLEN(name) == 7)
- {
- // Name is in "#rrggbb" format
- color = RGB(((hex_digit(name[1]) << 4) + hex_digit(name[2])),
- ((hex_digit(name[3]) << 4) + hex_digit(name[4])),
- ((hex_digit(name[5]) << 4) + hex_digit(name[6])));
- if (color > 0xffffff)
- return INVALCOLOR;
- return gui_adjust_rgb(color);
- }
-
- // Check if the name is one of the colors we know
- for (i = 0; i < (int)ARRAY_LENGTH(rgb_table); i++)
- if (STRICMP(name, rgb_table[i].color_name) == 0)
- return gui_adjust_rgb(rgb_table[i].color);
-
- /*
- * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
- */
- if (size == 0)
- {
- int counting;
-
- // colornames_table not yet initialized
- fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
- if (fname == NULL)
- return INVALCOLOR;
-
- fd = fopen((char *)fname, "rt");
- vim_free(fname);
- if (fd == NULL)
- {
- if (p_verbose > 1)
- verb_msg(_("Cannot open $VIMRUNTIME/rgb.txt"));
- size = -1; // don't try again
- return INVALCOLOR;
- }
-
- for (counting = 1; counting >= 0; --counting)
- {
- if (!counting)
- {
- colornames_table = ALLOC_MULT(struct rgbcolor_table_S, size);
- if (colornames_table == NULL)
- {
- fclose(fd);
- return INVALCOLOR;
- }
- rewind(fd);
- }
- size = 0;
-
- while (!feof(fd))
- {
- size_t len;
- int pos;
-
- vim_ignoredp = fgets(line, LINE_LEN, fd);
- len = strlen(line);
-
- if (len <= 1 || line[len - 1] != '\n')
- continue;
-
- line[len - 1] = '\0';
-
- i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
- if (i != 3)
- continue;
-
- if (!counting)
- {
- char_u *s = vim_strsave((char_u *)line + pos);
-
- if (s == NULL)
- {
- fclose(fd);
- return INVALCOLOR;
- }
- colornames_table[size].color_name = s;
- colornames_table[size].color = (guicolor_T)RGB(r, g, b);
- }
- size++;
-
- // The distributed rgb.txt has less than 1000 entries. Limit to
- // 10000, just in case the file was messed up.
- if (size == 10000)
- break;
- }
- }
- fclose(fd);
- }
-
- for (i = 0; i < size; i++)
- if (STRICMP(name, colornames_table[i].color_name) == 0)
- return gui_adjust_rgb(colornames_table[i].color);
-
- return INVALCOLOR;
-}
-
- guicolor_T
-gui_get_rgb_color_cmn(int r, int g, int b)
-{
- guicolor_T color = RGB(r, g, b);
-
- if (color > 0xffffff)
- return INVALCOLOR;
- return gui_adjust_rgb(color);
-}
-#endif
#if (defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))) || defined(FEAT_TERMINAL) \
|| defined(PROTO)
diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim
index a4c7a7259..d3734b31f 100644
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -934,4 +934,40 @@ func Test_highlight_default_colorscheme_restores_links()
hi clear
endfunc
+func Test_colornames_assignment_and_lookup()
+ " Ensure highlight command can find custom color.
+ let v:colornames['a redish white'] = '#ffeedd'
+ highlight Normal guifg='a redish white'
+ highlight clear
+endfunc
+
+func Test_colornames_default_list()
+ " Ensure default lists are loaded automatically and can be used for all gui fields.
+ highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
+ highlight clear
+endfunc
+
+func Test_colornames_overwrite_default()
+ " Ensure entries in v:colornames can be overwritten.
+ " Load default color scheme to trigger default color list loading.
+ colorscheme default
+ let old_rebecca_purple = v:colornames['rebecca purple']
+ highlight Normal guifg='rebecca purple' guibg='rebecca purple'
+ let v:colornames['rebecca purple'] = '#550099'
+ highlight Normal guifg='rebecca purple' guibg='rebecca purple'
+ let v:colornames['rebecca purple'] = old_rebecca_purple
+ highlight clear
+endfunc
+
+func Test_colornames_assignment_and_unassignment()
+ " Ensure we cannot overwrite the v:colornames dict.
+ call assert_fails("let v:colornames = {}", 'E46:')
+
+ " Ensure we can delete entries from the v:colornames dict.
+ let v:colornames['x1'] = '#111111'
+ call assert_equal(v:colornames['x1'], '#111111')
+ unlet v:colornames['x1']
+ call assert_fails("echo v:colornames['x1']")
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 7dc55ac95..3bba9728a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3562,
+/**/
3561,
/**/
3560,
diff --git a/src/vim.h b/src/vim.h
index 0ce0e964e..31d4bdefe 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2044,7 +2044,8 @@ typedef int sock_T;
#define VV_ARGV 96
#define VV_COLLATE 97
#define VV_EXITING 98
-#define VV_LEN 99 // number of v: vars
+#define VV_COLORNAMES 99
+#define VV_LEN 100 // number of v: vars
// used for v_number in VAR_BOOL and VAR_SPECIAL
#define VVAL_FALSE 0L // VAR_BOOL