Merge PR #1883 'More work on highlight tests + update documentation'

This commit is contained in:
Thiago de Arruda 2015-02-02 14:57:11 -03:00
commit 3d167c49d2
6 changed files with 287 additions and 226 deletions

View File

@ -552,6 +552,18 @@ Integer vim_name_to_color(String name)
return name_to_color((uint8_t *)name.data); return name_to_color((uint8_t *)name.data);
} }
Dictionary vim_get_color_map(void)
{
Dictionary colors = ARRAY_DICT_INIT;
for (int i = 0; color_name_table[i].name != NULL; i++) {
PUT(colors, color_name_table[i].name,
INTEGER_OBJ(color_name_table[i].color));
}
return colors;
}
Array vim_get_api_info(uint64_t channel_id) Array vim_get_api_info(uint64_t channel_id)
{ {
Array rv = ARRAY_DICT_INIT; Array rv = ARRAY_DICT_INIT;

View File

@ -7645,184 +7645,181 @@ char_u *get_highlight_name(expand_T *xp, int idx)
return HL_TABLE()[idx].sg_name; return HL_TABLE()[idx].sg_name;
} }
#define RGB(r, g, b) ((r << 16) | (g << 8) | b)
color_name_table_T color_name_table[] = {
// Color names taken from
// http://www.rapidtables.com/web/color/RGB_Color.htm
{"Maroon", RGB(0x80, 0x00, 0x00)},
{"DarkRed", RGB(0x8b, 0x00, 0x00)},
{"Brown", RGB(0xa5, 0x2a, 0x2a)},
{"Firebrick", RGB(0xb2, 0x22, 0x22)},
{"Crimson", RGB(0xdc, 0x14, 0x3c)},
{"Red", RGB(0xff, 0x00, 0x00)},
{"Tomato", RGB(0xff, 0x63, 0x47)},
{"Coral", RGB(0xff, 0x7f, 0x50)},
{"IndianRed", RGB(0xcd, 0x5c, 0x5c)},
{"LightCoral", RGB(0xf0, 0x80, 0x80)},
{"DarkSalmon", RGB(0xe9, 0x96, 0x7a)},
{"Salmon", RGB(0xfa, 0x80, 0x72)},
{"LightSalmon", RGB(0xff, 0xa0, 0x7a)},
{"OrangeRed", RGB(0xff, 0x45, 0x00)},
{"DarkOrange", RGB(0xff, 0x8c, 0x00)},
{"Orange", RGB(0xff, 0xa5, 0x00)},
{"Gold", RGB(0xff, 0xd7, 0x00)},
{"DarkGoldenRod", RGB(0xb8, 0x86, 0x0b)},
{"GoldenRod", RGB(0xda, 0xa5, 0x20)},
{"PaleGoldenRod", RGB(0xee, 0xe8, 0xaa)},
{"DarkKhaki", RGB(0xbd, 0xb7, 0x6b)},
{"Khaki", RGB(0xf0, 0xe6, 0x8c)},
{"Olive", RGB(0x80, 0x80, 0x00)},
{"Yellow", RGB(0xff, 0xff, 0x00)},
{"YellowGreen", RGB(0x9a, 0xcd, 0x32)},
{"DarkOliveGreen", RGB(0x55, 0x6b, 0x2f)},
{"OliveDrab", RGB(0x6b, 0x8e, 0x23)},
{"LawnGreen", RGB(0x7c, 0xfc, 0x00)},
{"ChartReuse", RGB(0x7f, 0xff, 0x00)},
{"GreenYellow", RGB(0xad, 0xff, 0x2f)},
{"DarkGreen", RGB(0x00, 0x64, 0x00)},
{"Green", RGB(0x00, 0x80, 0x00)},
{"ForestGreen", RGB(0x22, 0x8b, 0x22)},
{"Lime", RGB(0x00, 0xff, 0x00)},
{"LimeGreen", RGB(0x32, 0xcd, 0x32)},
{"LightGreen", RGB(0x90, 0xee, 0x90)},
{"PaleGreen", RGB(0x98, 0xfb, 0x98)},
{"DarkSeaGreen", RGB(0x8f, 0xbc, 0x8f)},
{"MediumSpringGreen", RGB(0x00, 0xfa, 0x9a)},
{"SpringGreen", RGB(0x00, 0xff, 0x7f)},
{"SeaGreen", RGB(0x2e, 0x8b, 0x57)},
{"MediumAquamarine", RGB(0x66, 0xcd, 0xaa)},
{"MediumSeaGreen", RGB(0x3c, 0xb3, 0x71)},
{"LightSeaGreen", RGB(0x20, 0xb2, 0xaa)},
{"DarkSlateGray", RGB(0x2f, 0x4f, 0x4f)},
{"Teal", RGB(0x00, 0x80, 0x80)},
{"DarkCyan", RGB(0x00, 0x8b, 0x8b)},
{"Aqua", RGB(0x00, 0xff, 0xff)},
{"Cyan", RGB(0x00, 0xff, 0xff)},
{"LightCyan", RGB(0xe0, 0xff, 0xff)},
{"DarkTurquoise", RGB(0x00, 0xce, 0xd1)},
{"Turquoise", RGB(0x40, 0xe0, 0xd0)},
{"MediumTurquoise", RGB(0x48, 0xd1, 0xcc)},
{"PaleTurquoise", RGB(0xaf, 0xee, 0xee)},
{"Aquamarine", RGB(0x7f, 0xff, 0xd4)},
{"PowderBlue", RGB(0xb0, 0xe0, 0xe6)},
{"CadetBlue", RGB(0x5f, 0x9e, 0xa0)},
{"SteelBlue", RGB(0x46, 0x82, 0xb4)},
{"CornFlowerBlue", RGB(0x64, 0x95, 0xed)},
{"DeepSkyBlue", RGB(0x00, 0xbf, 0xff)},
{"DodgerBlue", RGB(0x1e, 0x90, 0xff)},
{"LightBlue", RGB(0xad, 0xd8, 0xe6)},
{"SkyBlue", RGB(0x87, 0xce, 0xeb)},
{"LightSkyBlue", RGB(0x87, 0xce, 0xfa)},
{"MidnightBlue", RGB(0x19, 0x19, 0x70)},
{"Navy", RGB(0x00, 0x00, 0x80)},
{"DarkBlue", RGB(0x00, 0x00, 0x8b)},
{"MediumBlue", RGB(0x00, 0x00, 0xcd)},
{"Blue", RGB(0x00, 0x00, 0xff)},
{"RoyalBlue", RGB(0x41, 0x69, 0xe1)},
{"BlueViolet", RGB(0x8a, 0x2b, 0xe2)},
{"Indigo", RGB(0x4b, 0x00, 0x82)},
{"DarkSlateBlue", RGB(0x48, 0x3d, 0x8b)},
{"SlateBlue", RGB(0x6a, 0x5a, 0xcd)},
{"MediumSlateBlue", RGB(0x7b, 0x68, 0xee)},
{"MediumPurple", RGB(0x93, 0x70, 0xdb)},
{"DarkMagenta", RGB(0x8b, 0x00, 0x8b)},
{"DarkViolet", RGB(0x94, 0x00, 0xd3)},
{"DarkOrchid", RGB(0x99, 0x32, 0xcc)},
{"MediumOrchid", RGB(0xba, 0x55, 0xd3)},
{"Purple", RGB(0x80, 0x00, 0x80)},
{"Thistle", RGB(0xd8, 0xbf, 0xd8)},
{"Plum", RGB(0xdd, 0xa0, 0xdd)},
{"Violet", RGB(0xee, 0x82, 0xee)},
{"Magenta", RGB(0xff, 0x00, 0xff)},
{"Fuchsia", RGB(0xff, 0x00, 0xff)},
{"Orchid", RGB(0xda, 0x70, 0xd6)},
{"MediumVioletRed", RGB(0xc7, 0x15, 0x85)},
{"PaleVioletRed", RGB(0xdb, 0x70, 0x93)},
{"DeepPink", RGB(0xff, 0x14, 0x93)},
{"HotPink", RGB(0xff, 0x69, 0xb4)},
{"LightPink", RGB(0xff, 0xb6, 0xc1)},
{"Pink", RGB(0xff, 0xc0, 0xcb)},
{"AntiqueWhite", RGB(0xfa, 0xeb, 0xd7)},
{"Beige", RGB(0xf5, 0xf5, 0xdc)},
{"Bisque", RGB(0xff, 0xe4, 0xc4)},
{"BlanchedAlmond", RGB(0xff, 0xeb, 0xcd)},
{"Wheat", RGB(0xf5, 0xde, 0xb3)},
{"Cornsilk", RGB(0xff, 0xf8, 0xdc)},
{"LemonChiffon", RGB(0xff, 0xfa, 0xcd)},
{"LightGoldenRodYellow", RGB(0xfa, 0xfa, 0xd2)},
{"LightYellow", RGB(0xff, 0xff, 0xe0)},
{"SaddleBrown", RGB(0x8b, 0x45, 0x13)},
{"Sienna", RGB(0xa0, 0x52, 0x2d)},
{"Chocolate", RGB(0xd2, 0x69, 0x1e)},
{"Peru", RGB(0xcd, 0x85, 0x3f)},
{"SandyBrown", RGB(0xf4, 0xa4, 0x60)},
{"BurlyWood", RGB(0xde, 0xb8, 0x87)},
{"Tan", RGB(0xd2, 0xb4, 0x8c)},
{"RosyBrown", RGB(0xbc, 0x8f, 0x8f)},
{"Moccasin", RGB(0xff, 0xe4, 0xb5)},
{"NavajoWhite", RGB(0xff, 0xde, 0xad)},
{"PeachPuff", RGB(0xff, 0xda, 0xb9)},
{"MistyRose", RGB(0xff, 0xe4, 0xe1)},
{"LavenderBlush", RGB(0xff, 0xf0, 0xf5)},
{"Linen", RGB(0xfa, 0xf0, 0xe6)},
{"Oldlace", RGB(0xfd, 0xf5, 0xe6)},
{"PapayaWhip", RGB(0xff, 0xef, 0xd5)},
{"SeaShell", RGB(0xff, 0xf5, 0xee)},
{"MintCream", RGB(0xf5, 0xff, 0xfa)},
{"SlateGray", RGB(0x70, 0x80, 0x90)},
{"LightSlateGray", RGB(0x77, 0x88, 0x99)},
{"LightSteelBlue", RGB(0xb0, 0xc4, 0xde)},
{"Lavender", RGB(0xe6, 0xe6, 0xfa)},
{"FloralWhite", RGB(0xff, 0xfa, 0xf0)},
{"AliceBlue", RGB(0xf0, 0xf8, 0xff)},
{"GhostWhite", RGB(0xf8, 0xf8, 0xff)},
{"Honeydew", RGB(0xf0, 0xff, 0xf0)},
{"Ivory", RGB(0xff, 0xff, 0xf0)},
{"Azure", RGB(0xf0, 0xff, 0xff)},
{"Snow", RGB(0xff, 0xfa, 0xfa)},
{"Black", RGB(0x00, 0x00, 0x00)},
{"DimGray", RGB(0x69, 0x69, 0x69)},
{"DimGrey", RGB(0x69, 0x69, 0x69)},
{"Gray", RGB(0x80, 0x80, 0x80)},
{"Grey", RGB(0x80, 0x80, 0x80)},
{"DarkGray", RGB(0xa9, 0xa9, 0xa9)},
{"DarkGrey", RGB(0xa9, 0xa9, 0xa9)},
{"Silver", RGB(0xc0, 0xc0, 0xc0)},
{"LightGray", RGB(0xd3, 0xd3, 0xd3)},
{"LightGrey", RGB(0xd3, 0xd3, 0xd3)},
{"Gainsboro", RGB(0xdc, 0xdc, 0xdc)},
{"WhiteSmoke", RGB(0xf5, 0xf5, 0xf5)},
{"White", RGB(0xff, 0xff, 0xff)},
// The color names below were taken from gui_x11.c in vim source
{"LightRed", RGB(0xff, 0xbb, 0xbb)},
{"LightMagenta",RGB(0xff, 0xbb, 0xff)},
{"DarkYellow", RGB(0xbb, 0xbb, 0x00)},
{"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)},
{NULL, 0},
};
RgbValue name_to_color(uint8_t *name) RgbValue name_to_color(uint8_t *name)
{ {
#define RGB(r, g, b) ((r << 16) | (g << 8) | b)
static struct {
char *name;
RgbValue color;
} color_name_table[] = {
// Color names taken from
// http://www.rapidtables.com/web/color/RGB_Color.htm
{"Maroon", RGB(0x80, 0x00, 0x00)},
{"DarkRed", RGB(0x8b, 0x00, 0x00)},
{"Brown", RGB(0xa5, 0x2a, 0x2a)},
{"Firebrick", RGB(0xb2, 0x22, 0x22)},
{"Crimson", RGB(0xdc, 0x14, 0x3c)},
{"Red", RGB(0xff, 0x00, 0x00)},
{"Tomato", RGB(0xff, 0x63, 0x47)},
{"Coral", RGB(0xff, 0x7f, 0x50)},
{"IndianRed", RGB(0xcd, 0x5c, 0x5c)},
{"LightCoral", RGB(0xf0, 0x80, 0x80)},
{"DarkSalmon", RGB(0xe9, 0x96, 0x7a)},
{"Salmon", RGB(0xfa, 0x80, 0x72)},
{"LightSalmon", RGB(0xff, 0xa0, 0x7a)},
{"OrangeRed", RGB(0xff, 0x45, 0x00)},
{"DarkOrange", RGB(0xff, 0x8c, 0x00)},
{"Orange", RGB(0xff, 0xa5, 0x00)},
{"Gold", RGB(0xff, 0xd7, 0x00)},
{"DarkGoldenRod", RGB(0xb8, 0x86, 0x0b)},
{"GoldenRod", RGB(0xda, 0xa5, 0x20)},
{"PaleGoldenRod", RGB(0xee, 0xe8, 0xaa)},
{"DarkKhaki", RGB(0xbd, 0xb7, 0x6b)},
{"Khaki", RGB(0xf0, 0xe6, 0x8c)},
{"Olive", RGB(0x80, 0x80, 0x00)},
{"Yellow", RGB(0xff, 0xff, 0x00)},
{"YellowGreen", RGB(0x9a, 0xcd, 0x32)},
{"DarkOliveGreen", RGB(0x55, 0x6b, 0x2f)},
{"OliveDrab", RGB(0x6b, 0x8e, 0x23)},
{"LawnGreen", RGB(0x7c, 0xfc, 0x00)},
{"ChartReuse", RGB(0x7f, 0xff, 0x00)},
{"GreenYellow", RGB(0xad, 0xff, 0x2f)},
{"DarkGreen", RGB(0x00, 0x64, 0x00)},
{"Green", RGB(0x00, 0x80, 0x00)},
{"ForestGreen", RGB(0x22, 0x8b, 0x22)},
{"Lime", RGB(0x00, 0xff, 0x00)},
{"LimeGreen", RGB(0x32, 0xcd, 0x32)},
{"LightGreen", RGB(0x90, 0xee, 0x90)},
{"PaleGreen", RGB(0x98, 0xfb, 0x98)},
{"DarkSeaGreen", RGB(0x8f, 0xbc, 0x8f)},
{"MediumSpringGreen", RGB(0x00, 0xfa, 0x9a)},
{"SpringGreen", RGB(0x00, 0xff, 0x7f)},
{"SeaGreen", RGB(0x2e, 0x8b, 0x57)},
{"MediumAquamarine", RGB(0x66, 0xcd, 0xaa)},
{"MediumSeaGreen", RGB(0x3c, 0xb3, 0x71)},
{"LightSeaGreen", RGB(0x20, 0xb2, 0xaa)},
{"DarkSlateGray", RGB(0x2f, 0x4f, 0x4f)},
{"Teal", RGB(0x00, 0x80, 0x80)},
{"DarkCyan", RGB(0x00, 0x8b, 0x8b)},
{"Aqua", RGB(0x00, 0xff, 0xff)},
{"Cyan", RGB(0x00, 0xff, 0xff)},
{"LightCyan", RGB(0xe0, 0xff, 0xff)},
{"DarkTurquoise", RGB(0x00, 0xce, 0xd1)},
{"Turquoise", RGB(0x40, 0xe0, 0xd0)},
{"MediumTurquoise", RGB(0x48, 0xd1, 0xcc)},
{"PaleTurquoise", RGB(0xaf, 0xee, 0xee)},
{"Aquamarine", RGB(0x7f, 0xff, 0xd4)},
{"PowderBlue", RGB(0xb0, 0xe0, 0xe6)},
{"CadetBlue", RGB(0x5f, 0x9e, 0xa0)},
{"SteelBlue", RGB(0x46, 0x82, 0xb4)},
{"CornFlowerBlue", RGB(0x64, 0x95, 0xed)},
{"DeepSkyBlue", RGB(0x00, 0xbf, 0xff)},
{"DodgerBlue", RGB(0x1e, 0x90, 0xff)},
{"LightBlue", RGB(0xad, 0xd8, 0xe6)},
{"SkyBlue", RGB(0x87, 0xce, 0xeb)},
{"LightSkyBlue", RGB(0x87, 0xce, 0xfa)},
{"MidnightBlue", RGB(0x19, 0x19, 0x70)},
{"Navy", RGB(0x00, 0x00, 0x80)},
{"DarkBlue", RGB(0x00, 0x00, 0x8b)},
{"MediumBlue", RGB(0x00, 0x00, 0xcd)},
{"Blue", RGB(0x00, 0x00, 0xff)},
{"RoyalBlue", RGB(0x41, 0x69, 0xe1)},
{"BlueViolet", RGB(0x8a, 0x2b, 0xe2)},
{"Indigo", RGB(0x4b, 0x00, 0x82)},
{"DarkSlateBlue", RGB(0x48, 0x3d, 0x8b)},
{"SlateBlue", RGB(0x6a, 0x5a, 0xcd)},
{"MediumSlateBlue", RGB(0x7b, 0x68, 0xee)},
{"MediumPurple", RGB(0x93, 0x70, 0xdb)},
{"DarkMagenta", RGB(0x8b, 0x00, 0x8b)},
{"DarkViolet", RGB(0x94, 0x00, 0xd3)},
{"DarkOrchid", RGB(0x99, 0x32, 0xcc)},
{"MediumOrchid", RGB(0xba, 0x55, 0xd3)},
{"Purple", RGB(0x80, 0x00, 0x80)},
{"Thistle", RGB(0xd8, 0xbf, 0xd8)},
{"Plum", RGB(0xdd, 0xa0, 0xdd)},
{"Violet", RGB(0xee, 0x82, 0xee)},
{"Magenta", RGB(0xff, 0x00, 0xff)},
{"Fuchsia", RGB(0xff, 0x00, 0xff)},
{"Orchid", RGB(0xda, 0x70, 0xd6)},
{"MediumVioletRed", RGB(0xc7, 0x15, 0x85)},
{"PaleVioletRed", RGB(0xdb, 0x70, 0x93)},
{"DeepPink", RGB(0xff, 0x14, 0x93)},
{"HotPink", RGB(0xff, 0x69, 0xb4)},
{"LightPink", RGB(0xff, 0xb6, 0xc1)},
{"Pink", RGB(0xff, 0xc0, 0xcb)},
{"AntiqueWhite", RGB(0xfa, 0xeb, 0xd7)},
{"Beige", RGB(0xf5, 0xf5, 0xdc)},
{"Bisque", RGB(0xff, 0xe4, 0xc4)},
{"BlanchedAlmond", RGB(0xff, 0xeb, 0xcd)},
{"Wheat", RGB(0xf5, 0xde, 0xb3)},
{"Cornsilk", RGB(0xff, 0xf8, 0xdc)},
{"LemonChiffon", RGB(0xff, 0xfa, 0xcd)},
{"LightGoldenRodYellow", RGB(0xfa, 0xfa, 0xd2)},
{"LightYellow", RGB(0xff, 0xff, 0xe0)},
{"SaddleBrown", RGB(0x8b, 0x45, 0x13)},
{"Sienna", RGB(0xa0, 0x52, 0x2d)},
{"Chocolate", RGB(0xd2, 0x69, 0x1e)},
{"Peru", RGB(0xcd, 0x85, 0x3f)},
{"SandyBrown", RGB(0xf4, 0xa4, 0x60)},
{"BurlyWood", RGB(0xde, 0xb8, 0x87)},
{"Tan", RGB(0xd2, 0xb4, 0x8c)},
{"RosyBrown", RGB(0xbc, 0x8f, 0x8f)},
{"Moccasin", RGB(0xff, 0xe4, 0xb5)},
{"NavajoWhite", RGB(0xff, 0xde, 0xad)},
{"PeachPuff", RGB(0xff, 0xda, 0xb9)},
{"MistyRose", RGB(0xff, 0xe4, 0xe1)},
{"LavenderBlush", RGB(0xff, 0xf0, 0xf5)},
{"Linen", RGB(0xfa, 0xf0, 0xe6)},
{"Oldlace", RGB(0xfd, 0xf5, 0xe6)},
{"PapayaWhip", RGB(0xff, 0xef, 0xd5)},
{"SeaShell", RGB(0xff, 0xf5, 0xee)},
{"MintCream", RGB(0xf5, 0xff, 0xfa)},
{"SlateGray", RGB(0x70, 0x80, 0x90)},
{"LightSlateGray", RGB(0x77, 0x88, 0x99)},
{"LightSteelBlue", RGB(0xb0, 0xc4, 0xde)},
{"Lavender", RGB(0xe6, 0xe6, 0xfa)},
{"FloralWhite", RGB(0xff, 0xfa, 0xf0)},
{"AliceBlue", RGB(0xf0, 0xf8, 0xff)},
{"GhostWhite", RGB(0xf8, 0xf8, 0xff)},
{"Honeydew", RGB(0xf0, 0xff, 0xf0)},
{"Ivory", RGB(0xff, 0xff, 0xf0)},
{"Azure", RGB(0xf0, 0xff, 0xff)},
{"Snow", RGB(0xff, 0xfa, 0xfa)},
{"Black", RGB(0x00, 0x00, 0x00)},
{"DimGray", RGB(0x69, 0x69, 0x69)},
{"DimGrey", RGB(0x69, 0x69, 0x69)},
{"Gray", RGB(0x80, 0x80, 0x80)},
{"Grey", RGB(0x80, 0x80, 0x80)},
{"DarkGray", RGB(0xa9, 0xa9, 0xa9)},
{"DarkGrey", RGB(0xa9, 0xa9, 0xa9)},
{"Silver", RGB(0xc0, 0xc0, 0xc0)},
{"LightGray", RGB(0xd3, 0xd3, 0xd3)},
{"LightGrey", RGB(0xd3, 0xd3, 0xd3)},
{"Gainsboro", RGB(0xdc, 0xdc, 0xdc)},
{"WhiteSmoke", RGB(0xf5, 0xf5, 0xf5)},
{"White", RGB(0xff, 0xff, 0xff)},
// The color names below were taken from gui_x11.c in vim source
{"LightRed", RGB(0xff, 0xbb, 0xbb)},
{"LightMagenta",RGB(0xff, 0xbb, 0xff)},
{"DarkYellow", RGB(0xbb, 0xbb, 0x00)},
{"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)},
{NULL, 0},
};
if (name[0] == '#' && isxdigit(name[1]) && isxdigit(name[2]) if (name[0] == '#' && isxdigit(name[1]) && isxdigit(name[2])
&& isxdigit(name[3]) && isxdigit(name[4]) && isxdigit(name[5]) && isxdigit(name[3]) && isxdigit(name[4]) && isxdigit(name[5])

View File

@ -38,6 +38,12 @@
#define HL_CONCEAL 0x20000 /* can be concealed */ #define HL_CONCEAL 0x20000 /* can be concealed */
#define HL_CONCEALENDS 0x40000 /* can be concealed */ #define HL_CONCEALENDS 0x40000 /* can be concealed */
typedef struct {
char *name;
RgbValue color;
} color_name_table_T;
extern color_name_table_T color_name_table[];
#ifdef INCLUDE_GENERATED_DECLARATIONS #ifdef INCLUDE_GENERATED_DECLARATIONS
# include "syntax.h.generated.h" # include "syntax.h.generated.h"
#endif #endif

View File

@ -29,19 +29,19 @@ end)
describe('Default highlight groups', function() describe('Default highlight groups', function()
-- Test the default attributes for highlight groups shown by the :highlight -- Test the default attributes for highlight groups shown by the :highlight
-- command -- command
local screen, hlgroup_colors local screen
setup(function() local hlgroup_colors = {
hlgroup_colors = { NonText = Screen.colors.Blue,
NonText = nvim('name_to_color', 'Blue'), Question = Screen.colors.SeaGreen
Question = nvim('name_to_color', 'SeaGreen') }
}
end)
before_each(function() before_each(function()
clear() clear()
screen = Screen.new() screen = Screen.new()
screen:attach() screen:attach()
--ignore highligting of ~-lines
screen:set_default_attr_ignore( {{bold=true, foreground=hlgroup_colors.NonText}} )
end) end)
after_each(function() after_each(function()
@ -52,8 +52,6 @@ describe('Default highlight groups', function()
[1] = {reverse = true, bold = true}, -- StatusLine [1] = {reverse = true, bold = true}, -- StatusLine
[2] = {reverse = true} -- StatusLineNC [2] = {reverse = true} -- StatusLineNC
}) })
--ignore highligting of ~-lines
screen:set_default_attr_ignore( {{}, {bold=true, foreground=hlgroup_colors.NonText}} )
execute('sp', 'vsp', 'vsp') execute('sp', 'vsp', 'vsp')
screen:expect([[ screen:expect([[
^ {2:|} {2:|} | ^ {2:|} {2:|} |

View File

@ -4,13 +4,12 @@ local clear, feed, nvim = helpers.clear, helpers.feed, helpers.nvim
local insert, execute = helpers.insert, helpers.execute local insert, execute = helpers.insert, helpers.execute
describe('Mouse input', function() describe('Mouse input', function()
local screen, hlgroup_colors local screen
setup(function() local hlgroup_colors = {
hlgroup_colors = { NonText = Screen.colors.Blue,
Visual = nvim('name_to_color', 'LightGrey'), Visual = Screen.colors.LightGrey
} }
end)
before_each(function() before_each(function()
clear() clear()
@ -21,8 +20,10 @@ describe('Mouse input', function()
screen = Screen.new(25, 5) screen = Screen.new(25, 5)
screen:attach() screen:attach()
screen:set_default_attr_ids({ screen:set_default_attr_ids({
[1] = {background = hlgroup_colors.Visual} [1] = {background = hlgroup_colors.Visual},
[2] = {bold = true}
}) })
screen:set_default_attr_ignore( {{bold=true, foreground=hlgroup_colors.NonText}} )
feed('itesting<cr>mouse<cr>support and selection<esc>') feed('itesting<cr>mouse<cr>support and selection<esc>')
screen:expect([[ screen:expect([[
testing | testing |
@ -72,7 +73,7 @@ describe('Mouse input', function()
mo{1:us}^ | mo{1:us}^ |
support and selection | support and selection |
~ | ~ |
-- VISUAL -- | {2:-- VISUAL --} |
]]) ]])
feed('<LeftDrag><2,2>') feed('<LeftDrag><2,2>')
screen:expect([[ screen:expect([[
@ -80,7 +81,7 @@ describe('Mouse input', function()
mo{1:use } | mo{1:use } |
{1:su}^port and selection | {1:su}^port and selection |
~ | ~ |
-- VISUAL -- | {2:-- VISUAL --} |
]]) ]])
feed('<LeftDrag><0,0>') feed('<LeftDrag><0,0>')
screen:expect([[ screen:expect([[
@ -88,7 +89,7 @@ describe('Mouse input', function()
{1:mou}se | {1:mou}se |
support and selection | support and selection |
~ | ~ |
-- VISUAL -- | {2:-- VISUAL --} |
]]) ]])
end) end)
@ -99,7 +100,7 @@ describe('Mouse input', function()
mouse | mouse |
{1:suppor}^ and selection | {1:suppor}^ and selection |
~ | ~ |
-- VISUAL -- | {2:-- VISUAL --} |
]]) ]])
end) end)
@ -110,7 +111,7 @@ describe('Mouse input', function()
mouse | mouse |
{1:su}^{1:port and selection } | {1:su}^{1:port and selection } |
~ | ~ |
-- VISUAL LINE -- | {2:-- VISUAL LINE --} |
]]) ]])
end) end)
@ -121,7 +122,7 @@ describe('Mouse input', function()
mouse | mouse |
su^port and selection | su^port and selection |
~ | ~ |
-- VISUAL BLOCK -- | {2:-- VISUAL BLOCK --} |
]]) ]])
end) end)
@ -140,7 +141,7 @@ describe('Mouse input', function()
{1:mouse } | {1:mouse } |
{1:su}^port and selection | {1:su}^port and selection |
~ | ~ |
-- VISUAL -- | {2:-- VISUAL --} |
]]) ]])
end) end)
@ -153,7 +154,7 @@ describe('Mouse input', function()
ing | ing |
Press ENTER or type comma| Press ENTER or type comma|
nd to continue^ | nd to continue^ |
]]) ]],nil,true)
feed('<cr>') feed('<cr>')
end) end)
@ -171,6 +172,8 @@ describe('Mouse input', function()
]]) ]])
screen:try_resize(53, 14) screen:try_resize(53, 14)
execute('sp', 'vsp') execute('sp', 'vsp')
screen:set_default_attr_ignore( {{bold=true, foreground=hlgroup_colors.NonText},
{reverse=true}, {bold=true, reverse=true}} )
screen:expect([[ screen:expect([[
lines |lines | lines |lines |
to |to | to |to |

View File

@ -54,12 +54,18 @@
-- having the exact same set of attributes will be substituted by "{K:S}", -- having the exact same set of attributes will be substituted by "{K:S}",
-- where K is a key associated the attribute set via the second argument of -- where K is a key associated the attribute set via the second argument of
-- "expect". -- "expect".
-- If a transformation table is present, unexpected attribute sets in the final
-- state is considered an error. To make testing simpler, a list of attribute
-- sets that should be ignored can be passed as a third argument. Alternatively,
-- this third argument can be "true" to indicate that all unexpected attribute
-- sets should be ignored.
-- --
-- Too illustrate how this works, let's say that in the above example we wanted -- To illustrate how this works, let's say that in the above example we wanted
-- to assert that the "-- INSERT --" string is highlighted with the bold -- to assert that the "-- INSERT --" string is highlighted with the bold
-- attribute(which normally is), here's how the call to "expect" should look -- attribute(which normally is), here's how the call to "expect" should look
-- like: -- like:
-- --
-- NonText = Screen.colors.Blue
-- screen:expect([[ -- screen:expect([[
-- hello screen \ -- hello screen \
-- ~ \ -- ~ \
@ -71,11 +77,34 @@
-- ~ \ -- ~ \
-- ~ \ -- ~ \
-- {b:-- INSERT --} \ -- {b:-- INSERT --} \
-- ]], {b = {bold = true}}) -- ]], {b = {bold = true}}, {{bold = true, foreground = NonText}})
-- --
-- In this case "b" is a string associated with the set composed of one -- In this case "b" is a string associated with the set composed of one
-- attribute: bold. Note that since the {b:} markup is not a real part of the -- attribute: bold. Note that since the {b:} markup is not a real part of the
-- screen, the delimiter(|) had to be moved right -- screen, the delimiter(|) had to be moved right. Also, the highlighting of the
-- NonText markers (~) is ignored in this test.
--
-- Multiple expect:s will likely share a group of attribute sets to test.
-- Therefore these could be specified at the beginning of a test like this:
-- NonText = Screen.colors.Blue
-- screen:set_default_attr_ids( {
-- [1] = {reverse = true, bold = true},
-- [2] = {reverse = true}
-- })
-- screen:set_default_attr_ignore( {{}, {bold=true, foreground=NonText}} )
-- These can be overridden for a specific expect expression, by passing
-- different sets as parameters.
--
-- To help writing screen tests, there is a utility function
-- "screen:snapshot_util()", that can be placed in a test file at any point an
-- "expect(...)" should be. It will wait a short amount of time and then dump
-- the current state of the screen, in the form of an "expect(..)" expression
-- that would match it exactly. "snapshot_util" optionally also take the
-- transformation and ignore set as parameters, like expect, or uses the default
-- set. It will generate a larger attribute transformation set, if needed.
-- To generate a text-only test without highlight checks,
-- use `screen:snapshot_util({},true)`
local helpers = require('test.functional.helpers') local helpers = require('test.functional.helpers')
local request, run, stop = helpers.request, helpers.run, helpers.stop local request, run, stop = helpers.request, helpers.run, helpers.stop
local eq, dedent = helpers.eq, helpers.dedent local eq, dedent = helpers.eq, helpers.dedent
@ -90,6 +119,16 @@ if os.getenv('VALGRIND') then
default_screen_timeout = 7500 default_screen_timeout = 7500
end end
local colors = request('vim_get_color_map')
local colornames = {}
for name, rgb in pairs(colors) do
-- we disregard the case that colornames might not be unique, as
-- this is just a helper to get any canonical name of a color
colornames[rgb] = name
end
Screen.colors = colors
function Screen.debug(command) function Screen.debug(command)
if not command then if not command then
command = 'pynvim -n -g -c ' command = 'pynvim -n -g -c '
@ -158,19 +197,11 @@ function Screen:expect(expected, attr_ids, attr_ignore)
table.insert(expected_rows, row) table.insert(expected_rows, row)
end end
local ids = attr_ids or self._default_attr_ids local ids = attr_ids or self._default_attr_ids
if attr_ignore == nil and self._default_attr_ignore ~= nil then local ignore = attr_ignore or self._default_attr_ignore
attr_ignore = {}
-- don't ignore something we specified in attr_ids
for i,a in pairs(self._default_attr_ignore) do
if attr_index(ids, a) == nil then
table.insert(attr_ignore, a)
end
end
end
self:wait(function() self:wait(function()
for i = 1, self._height do for i = 1, self._height do
local expected_row = expected_rows[i] local expected_row = expected_rows[i]
local actual_row = self:_row_repr(self._rows[i], ids, attr_ignore) local actual_row = self:_row_repr(self._rows[i], ids, ignore)
if expected_row ~= actual_row then if expected_row ~= actual_row then
return 'Row '..tostring(i)..' didnt match.\nExpected: "'.. return 'Row '..tostring(i)..' didnt match.\nExpected: "'..
expected_row..'"\nActual: "'..actual_row..'"' expected_row..'"\nActual: "'..actual_row..'"'
@ -417,12 +448,16 @@ function Screen:snapshot_util(attrs, ignore)
end end
end end
for i = 1, self._height do if ignore ~= true then
local row = self._rows[i] for i = 1, self._height do
for j = 1, self._width do local row = self._rows[i]
local attr = row[j].attrs for j = 1, self._width do
if attr_index(attrs, attr) == nil and attr_index(ignore, attr) == nil then local attr = row[j].attrs
table.insert(attrs, attr) if attr_index(attrs, attr) == nil and attr_index(ignore, attr) == nil then
if not equal_attrs(attr, {}) then
table.insert(attrs, attr)
end
end
end end
end end
end end
@ -438,11 +473,7 @@ function Screen:snapshot_util(attrs, ignore)
if self._default_attr_ids == nil or self._default_attr_ids[i] ~= a then if self._default_attr_ids == nil or self._default_attr_ids[i] ~= a then
alldefault = false alldefault = false
end end
local items = {} local dict = "{"..pprint_attrs(a).."}"
for f, v in pairs(a) do
table.insert(items, f.." = "..tostring(v))
end
local dict = "{"..table.concat(items, ", ").."}"
table.insert(attrstrs, "["..tostring(i).."] = "..dict) table.insert(attrstrs, "["..tostring(i).."] = "..dict)
end end
local attrstr = "{"..table.concat(attrstrs, ", ").."}" local attrstr = "{"..table.concat(attrstrs, ", ").."}"
@ -455,6 +486,19 @@ function Screen:snapshot_util(attrs, ignore)
end end
end end
function pprint_attrs(attrs)
local items = {}
for f, v in pairs(attrs) do
local desc = tostring(v)
if f == "foreground" or f == "background" then
if colornames[v] ~= nil then
desc = "Screen.colors."..colornames[v]
end
end
table.insert(items, f.." = "..desc)
end
return table.concat(items, ", ")
end
function backward_find_meaningful(tbl, from) function backward_find_meaningful(tbl, from)
for i = from or #tbl, 1, -1 do for i = from or #tbl, 1, -1 do
@ -465,7 +509,7 @@ function backward_find_meaningful(tbl, from)
return from return from
end end
function get_attr_id(attr_ids, attr_ignore, attrs) function get_attr_id(attr_ids, ignore, attrs)
if not attr_ids then if not attr_ids then
return return
end end
@ -474,11 +518,12 @@ function get_attr_id(attr_ids, attr_ignore, attrs)
return id return id
end end
end end
if attr_ignore == nil or attr_index(attr_ignore, attrs) ~= nil then if equal_attrs(attrs, {}) or
ignore == true or attr_index(ignore, attrs) ~= nil then
-- ignore this attrs -- ignore this attrs
return nil return nil
end end
return "UNEXPECTED" return "UNEXPECTED "..pprint_attrs(attrs)
end end
function equal_attrs(a, b) function equal_attrs(a, b)