changeset 9591:201773c00b96 v7.4.2073

commit https://github.com/vim/vim/commit/68015bbd846181d49842d6ef60246c4195d20b89 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jul 19 21:05:21 2016 +0200 patch 7.4.2073 Problem: rgb.txt is read for every color name. Solution: Load rgb.txt once. (Christian Brabandt) Add a test.
author Christian Brabandt <cb@256bit.org>
date Tue, 19 Jul 2016 21:15:05 +0200
parents 628cf2af3da0
children 3e42d947b5ad
files runtime/rgb.txt src/term.c src/testdir/test_syn_attr.vim src/version.c
diffstat 4 files changed, 884 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/rgb.txt
+++ b/runtime/rgb.txt
@@ -1,4 +1,3 @@
-! $XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp $
 255 250 250		snow
 248 248 255		ghost white
 248 248 255		GhostWhite
@@ -58,6 +57,14 @@ 119 136 153		light slate grey
 119 136 153		LightSlateGrey
 190 190 190		gray
 190 190 190		grey
+190 190 190		x11 gray
+190 190 190		X11Gray
+190 190 190		x11 grey
+190 190 190		X11Grey
+128 128 128		web gray
+128 128 128		WebGray
+128 128 128		web grey
+128 128 128		WebGrey
 211 211 211		light grey
 211 211 211		LightGrey
 211 211 211		light gray
@@ -106,6 +113,7 @@ 175 238 238		PaleTurquoise
  72 209 204		MediumTurquoise
  64 224 208		turquoise
   0 255 255		cyan
+  0 255 255		aqua
 224 255 255		light cyan
 224 255 255		LightCyan
  95 158 160		cadet blue
@@ -132,6 +140,11 @@ 152 251 152		PaleGreen
 124 252   0		lawn green
 124 252   0		LawnGreen
   0 255   0		green
+  0 255   0		lime
+  0 255   0		x11 green
+  0 255   0		X11Green
+  0 128   0		web green
+  0 128   0		WebGreen
 127 255   0		chartreuse
   0 250 154		medium spring green
   0 250 154		MediumSpringGreen
@@ -203,11 +216,16 @@ 255 182 193		LightPink
 219 112 147		pale violet red
 219 112 147		PaleVioletRed
 176  48  96		maroon
+176  48  96		x11 maroon
+176  48  96		X11Maroon
+128   0   0		web maroon
+128   0   0		WebMaroon
 199  21 133		medium violet red
 199  21 133		MediumVioletRed
 208  32 144		violet red
 208  32 144		VioletRed
 255   0 255		magenta
+255   0 255		fuchsia
 238 130 238		violet
 221 160 221		plum
 218 112 214		orchid
@@ -220,6 +238,10 @@ 148   0 211		DarkViolet
 138  43 226		blue violet
 138  43 226		BlueViolet
 160  32 240		purple
+160  32 240		x11 purple
+160  32 240		X11Purple
+128   0 128		web purple
+128   0 128		WebPurple
 147 112 219		medium purple
 147 112 219		MediumPurple
 216 191 216		thistle
@@ -751,3 +773,10 @@ 139   0   0		dark red
 139   0   0		DarkRed
 144 238 144		light green
 144 238 144		LightGreen
+220  20  60		crimson
+ 75   0 130		indigo
+128 128   0		olive
+102  51 153		rebecca purple
+102  51 153		RebeccaPurple
+192 192 192		silver
+  0 128 128		teal
--- a/src/term.c
+++ b/src/term.c
@@ -6086,6 +6086,8 @@ gui_get_color_cmn(char_u *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)},
@@ -6100,26 +6102,8 @@ gui_get_color_cmn(char_u *name)
 	    {(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 *)"gray10",	RGB(0x1A, 0x1A, 0x1A)},
-	    {(char_u *)"gray20",	RGB(0x33, 0x33, 0x33)},
-	    {(char_u *)"gray30",	RGB(0x4D, 0x4D, 0x4D)},
-	    {(char_u *)"gray40",	RGB(0x66, 0x66, 0x66)},
-	    {(char_u *)"gray50",	RGB(0x7F, 0x7F, 0x7F)},
-	    {(char_u *)"gray60",	RGB(0x99, 0x99, 0x99)},
-	    {(char_u *)"gray70",	RGB(0xB3, 0xB3, 0xB3)},
-	    {(char_u *)"gray80",	RGB(0xCC, 0xCC, 0xCC)},
-	    {(char_u *)"gray90",	RGB(0xE5, 0xE5, 0xE5)},
 	    {(char_u *)"green",		RGB(0x00, 0xFF, 0x00)},
 	    {(char_u *)"grey",		RGB(0xBE, 0xBE, 0xBE)},
-	    {(char_u *)"grey10",	RGB(0x1A, 0x1A, 0x1A)},
-	    {(char_u *)"grey20",	RGB(0x33, 0x33, 0x33)},
-	    {(char_u *)"grey30",	RGB(0x4D, 0x4D, 0x4D)},
-	    {(char_u *)"grey40",	RGB(0x66, 0x66, 0x66)},
-	    {(char_u *)"grey50",	RGB(0x7F, 0x7F, 0x7F)},
-	    {(char_u *)"grey60",	RGB(0x99, 0x99, 0x99)},
-	    {(char_u *)"grey70",	RGB(0xB3, 0xB3, 0xB3)},
-	    {(char_u *)"grey80",	RGB(0xCC, 0xCC, 0xCC)},
-	    {(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)},
@@ -6129,16 +6113,13 @@ gui_get_color_cmn(char_u *name)
 	    {(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 *)"orange",	RGB(0xFF, 0xA5, 0x00)},
-	    {(char_u *)"purple",	RGB(0xA0, 0x20, 0xF0)},
 	    {(char_u *)"red",		RGB(0xFF, 0x00, 0x00)},
-	    {(char_u *)"seagreen",	RGB(0x2E, 0x8B, 0x57)},
-	    {(char_u *)"slateblue",	RGB(0x6A, 0x5A, 0xCD)},
-	    {(char_u *)"violet",	RGB(0xEE, 0x82, 0xEE)},
 	    {(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)
     {
@@ -6159,44 +6140,75 @@ gui_get_color_cmn(char_u *name)
     /*
      * Last attempt. Look in the file "$VIM/rgb.txt".
      */
-
-    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((char_u *)_("Cannot open $VIMRUNTIME/rgb.txt"));
-	return INVALCOLOR;
-    }
-
-    while (!feof(fd))
+    if (size == 0)
     {
-	size_t		len;
-	int		pos;
-
-	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 (STRICMP(line + pos, name) == 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((char_u *)_("Cannot open $VIMRUNTIME/rgb.txt"));
+	    return INVALCOLOR;
+	}
+
+	for (counting = 1; counting >= 0; --counting)
 	{
-	    fclose(fd);
-	    return (guicolor_T)RGB(r, g, b);
+	    if (!counting)
+	    {
+		colornames_table = (struct rgbcolor_table_S *)alloc(
+			   (unsigned)(sizeof(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;
+
+		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)
+			return INVALCOLOR;
+		    colornames_table[size].color_name = s;
+		    colornames_table[size].color = (guicolor_T)RGB(r, g, b);
+		}
+		size++;
+	    }
 	}
+	fclose(fd);
     }
-    fclose(fd);
+
+    for (i = 0; i < size; i++)
+	if (STRICMP(name, colornames_table[i].color_name) == 0)
+	    return colornames_table[i].color;
+
     return INVALCOLOR;
 }
 #endif
--- a/src/testdir/test_syn_attr.vim
+++ b/src/testdir/test_syn_attr.vim
@@ -33,3 +33,786 @@ func Test_missing_attr()
     call assert_equal(fontname, synIDattr(hlID("Mine"), "font", 'gui'))
   endif
 endfunc
+
+func Test_color_names()
+  let colors = [
+	\ 'AliceBlue',
+	\ 'AntiqueWhite',
+	\ 'AntiqueWhite1',
+	\ 'AntiqueWhite2',
+	\ 'AntiqueWhite3',
+	\ 'AntiqueWhite4',
+	\ 'BlanchedAlmond',
+	\ 'BlueViolet',
+	\ 'CadetBlue',
+	\ 'CadetBlue1',
+	\ 'CadetBlue2',
+	\ 'CadetBlue3',
+	\ 'CadetBlue4',
+	\ 'CornflowerBlue',
+	\ 'DarkBlue',
+	\ 'DarkCyan',
+	\ 'DarkGoldenrod',
+	\ 'DarkGoldenrod1',
+	\ 'DarkGoldenrod2',
+	\ 'DarkGoldenrod3',
+	\ 'DarkGoldenrod4',
+	\ 'DarkGray',
+	\ 'DarkGreen',
+	\ 'DarkGrey',
+	\ 'DarkKhaki',
+	\ 'DarkMagenta',
+	\ 'DarkOliveGreen',
+	\ 'DarkOliveGreen1',
+	\ 'DarkOliveGreen2',
+	\ 'DarkOliveGreen3',
+	\ 'DarkOliveGreen4',
+	\ 'DarkOrange',
+	\ 'DarkOrange1',
+	\ 'DarkOrange2',
+	\ 'DarkOrange3',
+	\ 'DarkOrange4',
+	\ 'DarkOrchid',
+	\ 'DarkOrchid1',
+	\ 'DarkOrchid2',
+	\ 'DarkOrchid3',
+	\ 'DarkOrchid4',
+	\ 'DarkRed',
+	\ 'DarkSalmon',
+	\ 'DarkSeaGreen',
+	\ 'DarkSeaGreen1',
+	\ 'DarkSeaGreen2',
+	\ 'DarkSeaGreen3',
+	\ 'DarkSeaGreen4',
+	\ 'DarkSlateBlue',
+	\ 'DarkSlateGray',
+	\ 'DarkSlateGray1',
+	\ 'DarkSlateGray2',
+	\ 'DarkSlateGray3',
+	\ 'DarkSlateGray4',
+	\ 'DarkSlateGrey',
+	\ 'DarkTurquoise',
+	\ 'DarkViolet',
+	\ 'DeepPink',
+	\ 'DeepPink1',
+	\ 'DeepPink2',
+	\ 'DeepPink3',
+	\ 'DeepPink4',
+	\ 'DeepSkyBlue',
+	\ 'DeepSkyBlue1',
+	\ 'DeepSkyBlue2',
+	\ 'DeepSkyBlue3',
+	\ 'DeepSkyBlue4',
+	\ 'DimGray',
+	\ 'DimGrey',
+	\ 'DodgerBlue',
+	\ 'DodgerBlue1',
+	\ 'DodgerBlue2',
+	\ 'DodgerBlue3',
+	\ 'DodgerBlue4',
+	\ 'FloralWhite',
+	\ 'ForestGreen',
+	\ 'GhostWhite',
+	\ 'GreenYellow',
+	\ 'HotPink',
+	\ 'HotPink1',
+	\ 'HotPink2',
+	\ 'HotPink3',
+	\ 'HotPink4',
+	\ 'IndianRed',
+	\ 'IndianRed1',
+	\ 'IndianRed2',
+	\ 'IndianRed3',
+	\ 'IndianRed4',
+	\ 'LavenderBlush',
+	\ 'LavenderBlush1',
+	\ 'LavenderBlush2',
+	\ 'LavenderBlush3',
+	\ 'LavenderBlush4',
+	\ 'LawnGreen',
+	\ 'LemonChiffon',
+	\ 'LemonChiffon1',
+	\ 'LemonChiffon2',
+	\ 'LemonChiffon3',
+	\ 'LemonChiffon4',
+	\ 'LightBlue',
+	\ 'LightBlue1',
+	\ 'LightBlue2',
+	\ 'LightBlue3',
+	\ 'LightBlue4',
+	\ 'LightCoral',
+	\ 'LightCyan',
+	\ 'LightCyan1',
+	\ 'LightCyan2',
+	\ 'LightCyan3',
+	\ 'LightCyan4',
+	\ 'LightGoldenrod',
+	\ 'LightGoldenrod1',
+	\ 'LightGoldenrod2',
+	\ 'LightGoldenrod3',
+	\ 'LightGoldenrod4',
+	\ 'LightGoldenrodYellow',
+	\ 'LightGray',
+	\ 'LightGreen',
+	\ 'LightGrey',
+	\ 'LightPink',
+	\ 'LightPink1',
+	\ 'LightPink2',
+	\ 'LightPink3',
+	\ 'LightPink4',
+	\ 'LightSalmon',
+	\ 'LightSalmon1',
+	\ 'LightSalmon2',
+	\ 'LightSalmon3',
+	\ 'LightSalmon4',
+	\ 'LightSeaGreen',
+	\ 'LightSkyBlue',
+	\ 'LightSkyBlue1',
+	\ 'LightSkyBlue2',
+	\ 'LightSkyBlue3',
+	\ 'LightSkyBlue4',
+	\ 'LightSlateBlue',
+	\ 'LightSlateGray',
+	\ 'LightSlateGrey',
+	\ 'LightSteelBlue',
+	\ 'LightSteelBlue1',
+	\ 'LightSteelBlue2',
+	\ 'LightSteelBlue3',
+	\ 'LightSteelBlue4',
+	\ 'LightYellow',
+	\ 'LightYellow1',
+	\ 'LightYellow2',
+	\ 'LightYellow3',
+	\ 'LightYellow4',
+	\ 'LimeGreen',
+	\ 'MediumAquamarine',
+	\ 'MediumBlue',
+	\ 'MediumOrchid',
+	\ 'MediumOrchid1',
+	\ 'MediumOrchid2',
+	\ 'MediumOrchid3',
+	\ 'MediumOrchid4',
+	\ 'MediumPurple',
+	\ 'MediumPurple1',
+	\ 'MediumPurple2',
+	\ 'MediumPurple3',
+	\ 'MediumPurple4',
+	\ 'MediumSeaGreen',
+	\ 'MediumSlateBlue',
+	\ 'MediumSpringGreen',
+	\ 'MediumTurquoise',
+	\ 'MediumVioletRed',
+	\ 'MidnightBlue',
+	\ 'MintCream',
+	\ 'MistyRose',
+	\ 'MistyRose1',
+	\ 'MistyRose2',
+	\ 'MistyRose3',
+	\ 'MistyRose4',
+	\ 'NavajoWhite',
+	\ 'NavajoWhite1',
+	\ 'NavajoWhite2',
+	\ 'NavajoWhite3',
+	\ 'NavajoWhite4',
+	\ 'NavyBlue',
+	\ 'OldLace',
+	\ 'OliveDrab',
+	\ 'OliveDrab1',
+	\ 'OliveDrab2',
+	\ 'OliveDrab3',
+	\ 'OliveDrab4',
+	\ 'OrangeRed',
+	\ 'OrangeRed1',
+	\ 'OrangeRed2',
+	\ 'OrangeRed3',
+	\ 'OrangeRed4',
+	\ 'PaleGoldenrod',
+	\ 'PaleGreen',
+	\ 'PaleGreen1',
+	\ 'PaleGreen2',
+	\ 'PaleGreen3',
+	\ 'PaleGreen4',
+	\ 'PaleTurquoise',
+	\ 'PaleTurquoise1',
+	\ 'PaleTurquoise2',
+	\ 'PaleTurquoise3',
+	\ 'PaleTurquoise4',
+	\ 'PaleVioletRed',
+	\ 'PaleVioletRed1',
+	\ 'PaleVioletRed2',
+	\ 'PaleVioletRed3',
+	\ 'PaleVioletRed4',
+	\ 'PapayaWhip',
+	\ 'PeachPuff',
+	\ 'PeachPuff1',
+	\ 'PeachPuff2',
+	\ 'PeachPuff3',
+	\ 'PeachPuff4',
+	\ 'PowderBlue',
+	\ 'RosyBrown',
+	\ 'RosyBrown1',
+	\ 'RosyBrown2',
+	\ 'RosyBrown3',
+	\ 'RosyBrown4',
+	\ 'RoyalBlue',
+	\ 'RoyalBlue1',
+	\ 'RoyalBlue2',
+	\ 'RoyalBlue3',
+	\ 'RoyalBlue4',
+	\ 'SaddleBrown',
+	\ 'SandyBrown',
+	\ 'SeaGreen',
+	\ 'SeaGreen1',
+	\ 'SeaGreen2',
+	\ 'SeaGreen3',
+	\ 'SeaGreen4',
+	\ 'SkyBlue',
+	\ 'SkyBlue1',
+	\ 'SkyBlue2',
+	\ 'SkyBlue3',
+	\ 'SkyBlue4',
+	\ 'SlateBlue',
+	\ 'SlateBlue1',
+	\ 'SlateBlue2',
+	\ 'SlateBlue3',
+	\ 'SlateBlue4',
+	\ 'SlateGray',
+	\ 'SlateGray1',
+	\ 'SlateGray2',
+	\ 'SlateGray3',
+	\ 'SlateGray4',
+	\ 'SlateGrey',
+	\ 'SpringGreen',
+	\ 'SpringGreen1',
+	\ 'SpringGreen2',
+	\ 'SpringGreen3',
+	\ 'SpringGreen4',
+	\ 'SteelBlue',
+	\ 'SteelBlue1',
+	\ 'SteelBlue2',
+	\ 'SteelBlue3',
+	\ 'SteelBlue4',
+	\ 'VioletRed',
+	\ 'VioletRed1',
+	\ 'VioletRed2',
+	\ 'VioletRed3',
+	\ 'VioletRed4',
+	\ 'WhiteSmoke',
+	\ 'YellowGreen',
+	\ 'alice blue',
+	\ 'antique white',
+	\ 'aquamarine',
+	\ 'aquamarine1',
+	\ 'aquamarine2',
+	\ 'aquamarine3',
+	\ 'aquamarine4',
+	\ 'azure',
+	\ 'azure1',
+	\ 'azure2',
+	\ 'azure3',
+	\ 'azure4',
+	\ 'beige',
+	\ 'bisque',
+	\ 'bisque1',
+	\ 'bisque2',
+	\ 'bisque3',
+	\ 'bisque4',
+	\ 'black',
+	\ 'blanched almond',
+	\ 'blue violet',
+	\ 'blue',
+	\ 'blue1',
+	\ 'blue2',
+	\ 'blue3',
+	\ 'blue4',
+	\ 'brown',
+	\ 'brown1',
+	\ 'brown2',
+	\ 'brown3',
+	\ 'brown4',
+	\ 'burlywood',
+	\ 'burlywood1',
+	\ 'burlywood2',
+	\ 'burlywood3',
+	\ 'burlywood4',
+	\ 'cadet blue',
+	\ 'chartreuse',
+	\ 'chartreuse1',
+	\ 'chartreuse2',
+	\ 'chartreuse3',
+	\ 'chartreuse4',
+	\ 'chocolate',
+	\ 'chocolate1',
+	\ 'chocolate2',
+	\ 'chocolate3',
+	\ 'chocolate4',
+	\ 'coral',
+	\ 'coral1',
+	\ 'coral2',
+	\ 'coral3',
+	\ 'coral4',
+	\ 'cornflower blue',
+	\ 'cornsilk',
+	\ 'cornsilk1',
+	\ 'cornsilk2',
+	\ 'cornsilk3',
+	\ 'cornsilk4',
+	\ 'cyan',
+	\ 'cyan1',
+	\ 'cyan2',
+	\ 'cyan3',
+	\ 'cyan4',
+	\ 'dark blue',
+	\ 'dark cyan',
+	\ 'dark goldenrod',
+	\ 'dark gray',
+	\ 'dark green',
+	\ 'dark grey',
+	\ 'dark khaki',
+	\ 'dark magenta',
+	\ 'dark olive green',
+	\ 'dark orange',
+	\ 'dark orchid',
+	\ 'dark red',
+	\ 'dark salmon',
+	\ 'dark sea green',
+	\ 'dark slate blue',
+	\ 'dark slate gray',
+	\ 'dark slate grey',
+	\ 'dark turquoise',
+	\ 'dark violet',
+	\ 'darkblue',
+	\ 'darkcyan',
+	\ 'darkgray',
+	\ 'darkgreen',
+	\ 'darkgrey',
+	\ 'darkmagenta',
+	\ 'darkred',
+	\ 'darkyellow',
+	\ 'deep pink',
+	\ 'deep sky blue',
+	\ 'dim gray',
+	\ 'dim grey',
+	\ 'dodger blue',
+	\ 'firebrick',
+	\ 'firebrick1',
+	\ 'firebrick2',
+	\ 'firebrick3',
+	\ 'firebrick4',
+	\ 'floral white',
+	\ 'forest green',
+	\ 'gainsboro',
+	\ 'ghost white',
+	\ 'gold',
+	\ 'gold1',
+	\ 'gold2',
+	\ 'gold3',
+	\ 'gold4',
+	\ 'goldenrod',
+	\ 'goldenrod1',
+	\ 'goldenrod2',
+	\ 'goldenrod3',
+	\ 'goldenrod4',
+	\ 'gray',
+	\ 'gray0',
+	\ 'gray1',
+	\ 'gray10',
+	\ 'gray100',
+	\ 'gray11',
+	\ 'gray12',
+	\ 'gray13',
+	\ 'gray14',
+	\ 'gray15',
+	\ 'gray16',
+	\ 'gray17',
+	\ 'gray18',
+	\ 'gray19',
+	\ 'gray2',
+	\ 'gray20',
+	\ 'gray21',
+	\ 'gray22',
+	\ 'gray23',
+	\ 'gray24',
+	\ 'gray25',
+	\ 'gray26',
+	\ 'gray27',
+	\ 'gray28',
+	\ 'gray29',
+	\ 'gray3',
+	\ 'gray30',
+	\ 'gray31',
+	\ 'gray32',
+	\ 'gray33',
+	\ 'gray34',
+	\ 'gray35',
+	\ 'gray36',
+	\ 'gray37',
+	\ 'gray38',
+	\ 'gray39',
+	\ 'gray4',
+	\ 'gray40',
+	\ 'gray41',
+	\ 'gray42',
+	\ 'gray43',
+	\ 'gray44',
+	\ 'gray45',
+	\ 'gray46',
+	\ 'gray47',
+	\ 'gray48',
+	\ 'gray49',
+	\ 'gray5',
+	\ 'gray50',
+	\ 'gray51',
+	\ 'gray52',
+	\ 'gray53',
+	\ 'gray54',
+	\ 'gray55',
+	\ 'gray56',
+	\ 'gray57',
+	\ 'gray58',
+	\ 'gray59',
+	\ 'gray6',
+	\ 'gray60',
+	\ 'gray61',
+	\ 'gray62',
+	\ 'gray63',
+	\ 'gray64',
+	\ 'gray65',
+	\ 'gray66',
+	\ 'gray67',
+	\ 'gray68',
+	\ 'gray69',
+	\ 'gray7',
+	\ 'gray70',
+	\ 'gray71',
+	\ 'gray72',
+	\ 'gray73',
+	\ 'gray74',
+	\ 'gray75',
+	\ 'gray76',
+	\ 'gray77',
+	\ 'gray78',
+	\ 'gray79',
+	\ 'gray8',
+	\ 'gray80',
+	\ 'gray81',
+	\ 'gray82',
+	\ 'gray83',
+	\ 'gray84',
+	\ 'gray85',
+	\ 'gray86',
+	\ 'gray87',
+	\ 'gray88',
+	\ 'gray89',
+	\ 'gray9',
+	\ 'gray90',
+	\ 'gray91',
+	\ 'gray92',
+	\ 'gray93',
+	\ 'gray94',
+	\ 'gray95',
+	\ 'gray96',
+	\ 'gray97',
+	\ 'gray98',
+	\ 'gray99',
+	\ 'green yellow',
+	\ 'green',
+	\ 'green1',
+	\ 'green2',
+	\ 'green3',
+	\ 'green4',
+	\ 'grey',
+	\ 'grey0',
+	\ 'grey1',
+	\ 'grey10',
+	\ 'grey100',
+	\ 'grey11',
+	\ 'grey12',
+	\ 'grey13',
+	\ 'grey14',
+	\ 'grey15',
+	\ 'grey16',
+	\ 'grey17',
+	\ 'grey18',
+	\ 'grey19',
+	\ 'grey2',
+	\ 'grey20',
+	\ 'grey21',
+	\ 'grey22',
+	\ 'grey23',
+	\ 'grey24',
+	\ 'grey25',
+	\ 'grey26',
+	\ 'grey27',
+	\ 'grey28',
+	\ 'grey29',
+	\ 'grey3',
+	\ 'grey30',
+	\ 'grey31',
+	\ 'grey32',
+	\ 'grey33',
+	\ 'grey34',
+	\ 'grey35',
+	\ 'grey36',
+	\ 'grey37',
+	\ 'grey38',
+	\ 'grey39',
+	\ 'grey4',
+	\ 'grey40',
+	\ 'grey41',
+	\ 'grey42',
+	\ 'grey43',
+	\ 'grey44',
+	\ 'grey45',
+	\ 'grey46',
+	\ 'grey47',
+	\ 'grey48',
+	\ 'grey49',
+	\ 'grey5',
+	\ 'grey50',
+	\ 'grey51',
+	\ 'grey52',
+	\ 'grey53',
+	\ 'grey54',
+	\ 'grey55',
+	\ 'grey56',
+	\ 'grey57',
+	\ 'grey58',
+	\ 'grey59',
+	\ 'grey6',
+	\ 'grey60',
+	\ 'grey61',
+	\ 'grey62',
+	\ 'grey63',
+	\ 'grey64',
+	\ 'grey65',
+	\ 'grey66',
+	\ 'grey67',
+	\ 'grey68',
+	\ 'grey69',
+	\ 'grey7',
+	\ 'grey70',
+	\ 'grey71',
+	\ 'grey72',
+	\ 'grey73',
+	\ 'grey74',
+	\ 'grey75',
+	\ 'grey76',
+	\ 'grey77',
+	\ 'grey78',
+	\ 'grey79',
+	\ 'grey8',
+	\ 'grey80',
+	\ 'grey81',
+	\ 'grey82',
+	\ 'grey83',
+	\ 'grey84',
+	\ 'grey85',
+	\ 'grey86',
+	\ 'grey87',
+	\ 'grey88',
+	\ 'grey89',
+	\ 'grey9',
+	\ 'grey90',
+	\ 'grey91',
+	\ 'grey92',
+	\ 'grey93',
+	\ 'grey94',
+	\ 'grey95',
+	\ 'grey96',
+	\ 'grey97',
+	\ 'grey98',
+	\ 'grey99',
+	\ 'honeydew',
+	\ 'honeydew1',
+	\ 'honeydew2',
+	\ 'honeydew3',
+	\ 'honeydew4',
+	\ 'hot pink',
+	\ 'indian red',
+	\ 'ivory',
+	\ 'ivory1',
+	\ 'ivory2',
+	\ 'ivory3',
+	\ 'ivory4',
+	\ 'khaki',
+	\ 'khaki1',
+	\ 'khaki2',
+	\ 'khaki3',
+	\ 'khaki4',
+	\ 'lavender blush',
+	\ 'lavender',
+	\ 'lawn green',
+	\ 'lemon chiffon',
+	\ 'light blue',
+	\ 'light coral',
+	\ 'light cyan',
+	\ 'light goldenrod yellow',
+	\ 'light goldenrod',
+	\ 'light gray',
+	\ 'light green',
+	\ 'light grey',
+	\ 'light pink',
+	\ 'light salmon',
+	\ 'light sea green',
+	\ 'light sky blue',
+	\ 'light slate blue',
+	\ 'light slate gray',
+	\ 'light slate grey',
+	\ 'light steel blue',
+	\ 'light yellow',
+	\ 'lightblue',
+	\ 'lightcyan',
+	\ 'lightgray',
+	\ 'lightgreen',
+	\ 'lightgrey',
+	\ 'lightmagenta',
+	\ 'lightred',
+	\ 'lightyellow',
+	\ 'lime green',
+	\ 'linen',
+	\ 'magenta',
+	\ 'magenta1',
+	\ 'magenta2',
+	\ 'magenta3',
+	\ 'magenta4',
+	\ 'maroon',
+	\ 'maroon1',
+	\ 'maroon2',
+	\ 'maroon3',
+	\ 'maroon4',
+	\ 'medium aquamarine',
+	\ 'medium blue',
+	\ 'medium orchid',
+	\ 'medium purple',
+	\ 'medium sea green',
+	\ 'medium slate blue',
+	\ 'medium spring green',
+	\ 'medium turquoise',
+	\ 'medium violet red',
+	\ 'midnight blue',
+	\ 'mint cream',
+	\ 'misty rose',
+	\ 'moccasin',
+	\ 'navajo white',
+	\ 'navy blue',
+	\ 'navy',
+	\ 'old lace',
+	\ 'olive drab',
+	\ 'orange red',
+	\ 'orange',
+	\ 'orange1',
+	\ 'orange2',
+	\ 'orange3',
+	\ 'orange4',
+	\ 'orchid',
+	\ 'orchid1',
+	\ 'orchid2',
+	\ 'orchid3',
+	\ 'orchid4',
+	\ 'pale goldenrod',
+	\ 'pale green',
+	\ 'pale turquoise',
+	\ 'pale violet red',
+	\ 'papaya whip',
+	\ 'peach puff',
+	\ 'peru',
+	\ 'pink',
+	\ 'pink1',
+	\ 'pink2',
+	\ 'pink3',
+	\ 'pink4',
+	\ 'plum',
+	\ 'plum1',
+	\ 'plum2',
+	\ 'plum3',
+	\ 'plum4',
+	\ 'powder blue',
+	\ 'purple',
+	\ 'purple1',
+	\ 'purple2',
+	\ 'purple3',
+	\ 'purple4',
+	\ 'red',
+	\ 'red1',
+	\ 'red2',
+	\ 'red3',
+	\ 'red4',
+	\ 'rosy brown',
+	\ 'royal blue',
+	\ 'saddle brown',
+	\ 'salmon',
+	\ 'salmon1',
+	\ 'salmon2',
+	\ 'salmon3',
+	\ 'salmon4',
+	\ 'sandy brown',
+	\ 'sea green',
+	\ 'seagreen',
+	\ 'seashell',
+	\ 'seashell1',
+	\ 'seashell2',
+	\ 'seashell3',
+	\ 'seashell4',
+	\ 'sienna',
+	\ 'sienna1',
+	\ 'sienna2',
+	\ 'sienna3',
+	\ 'sienna4',
+	\ 'sky blue',
+	\ 'slate blue',
+	\ 'slate gray',
+	\ 'slate grey',
+	\ 'slateblue',
+	\ 'snow',
+	\ 'snow1',
+	\ 'snow2',
+	\ 'snow3',
+	\ 'snow4',
+	\ 'spring green',
+	\ 'steel blue',
+	\ 'tan',
+	\ 'tan1',
+	\ 'tan2',
+	\ 'tan3',
+	\ 'tan4',
+	\ 'thistle',
+	\ 'thistle1',
+	\ 'thistle2',
+	\ 'thistle3',
+	\ 'thistle4',
+	\ 'tomato',
+	\ 'tomato1',
+	\ 'tomato2',
+	\ 'tomato3',
+	\ 'tomato4',
+	\ 'turquoise',
+	\ 'turquoise1',
+	\ 'turquoise2',
+	\ 'turquoise3',
+	\ 'turquoise4',
+	\ 'violet red',
+	\ 'violet',
+	\ 'wheat',
+	\ 'wheat1',
+	\ 'wheat2',
+	\ 'wheat3',
+	\ 'wheat4',
+	\ 'white smoke',
+	\ 'white',
+	\ 'yellow green',
+	\ 'yellow',
+	\ 'yellow1',
+	\ 'yellow2',
+	\ 'yellow3',
+	\ 'yellow4',
+	\ ]
+  for color in colors
+    " just test that the color name can be found.
+    exe "hi Mine guifg='" . color . "'"
+  endfor
+
+  " case is ignored
+  hi Mine guifg=blanchedalmond
+  hi Mine guifg=BLANCHEDALMOND
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -759,6 +759,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2073,
+/**/
     2072,
 /**/
     2071,