mirror of
https://github.com/neovim/neovim.git
synced 2025-10-09 19:36:40 +00:00
feat(highlight): define the concept of altfont as a (c)term rendering attribute
This commit is contained in:
@@ -114,6 +114,7 @@ return {
|
||||
"underdashed";
|
||||
"italic";
|
||||
"reverse";
|
||||
"altfont";
|
||||
"nocombine";
|
||||
"default";
|
||||
"cterm";
|
||||
@@ -140,6 +141,7 @@ return {
|
||||
"underdashed";
|
||||
"italic";
|
||||
"reverse";
|
||||
"altfont";
|
||||
"nocombine";
|
||||
}};
|
||||
-- Autocmds
|
||||
|
@@ -867,6 +867,10 @@ void hlattrs2dict(Dictionary *dict, HlAttrs ae, bool use_rgb)
|
||||
PUT_C(hl, "strikethrough", BOOLEAN_OBJ(true));
|
||||
}
|
||||
|
||||
if (mask & HL_ALTFONT) {
|
||||
PUT_C(hl, "altfont", BOOLEAN_OBJ(true));
|
||||
}
|
||||
|
||||
if (mask & HL_NOCOMBINE) {
|
||||
PUT_C(hl, "nocombine", BOOLEAN_OBJ(true));
|
||||
}
|
||||
@@ -932,6 +936,7 @@ HlAttrs dict2hlattrs(Dict(highlight) *dict, bool use_rgb, int *link_id, Error *e
|
||||
CHECK_FLAG(dict, mask, underdashed, , HL_UNDERDASHED);
|
||||
CHECK_FLAG(dict, mask, standout, , HL_STANDOUT);
|
||||
CHECK_FLAG(dict, mask, strikethrough, , HL_STRIKETHROUGH);
|
||||
CHECK_FLAG(dict, mask, altfont, , HL_ALTFONT);
|
||||
if (use_rgb) {
|
||||
CHECK_FLAG(dict, mask, fg_indexed, , HL_FG_INDEXED);
|
||||
CHECK_FLAG(dict, mask, bg_indexed, , HL_BG_INDEXED);
|
||||
@@ -1014,6 +1019,7 @@ HlAttrs dict2hlattrs(Dict(highlight) *dict, bool use_rgb, int *link_id, Error *e
|
||||
CHECK_FLAG(cterm, cterm_mask, undercurl, , HL_UNDERCURL);
|
||||
CHECK_FLAG(cterm, cterm_mask, standout, , HL_STANDOUT);
|
||||
CHECK_FLAG(cterm, cterm_mask, strikethrough, , HL_STRIKETHROUGH);
|
||||
CHECK_FLAG(cterm, cterm_mask, altfont, , HL_ALTFONT);
|
||||
CHECK_FLAG(cterm, cterm_mask, nocombine, , HL_NOCOMBINE);
|
||||
} else if (dict->cterm.type == kObjectTypeArray && dict->cterm.data.array.size == 0) {
|
||||
// empty list from Lua API should clear all cterm attributes
|
||||
|
@@ -22,10 +22,11 @@ typedef enum {
|
||||
HL_UNDERCURL = 0x18,
|
||||
HL_UNDERDOTTED = 0x20,
|
||||
HL_UNDERDASHED = 0x28,
|
||||
// 0x30 and 0x38 spare for underline styles
|
||||
// 0x30 and 0x38 spare for underline styles
|
||||
HL_STANDOUT = 0x0040,
|
||||
HL_STRIKETHROUGH = 0x0080,
|
||||
// 0x0100-0x0200 spare
|
||||
HL_ALTFONT = 0x0100,
|
||||
// 0x0200 spare
|
||||
HL_NOCOMBINE = 0x0400,
|
||||
HL_BG_INDEXED = 0x0800,
|
||||
HL_FG_INDEXED = 0x1000,
|
||||
|
@@ -67,11 +67,13 @@ Map(cstr_t, int) highlight_unames = MAP_INIT;
|
||||
static char *(hl_name_table[]) =
|
||||
{ "bold", "standout", "underline",
|
||||
"undercurl", "underdouble", "underdotted", "underdashed",
|
||||
"italic", "reverse", "inverse", "strikethrough", "nocombine", "NONE" };
|
||||
"italic", "reverse", "inverse", "strikethrough", "altfont",
|
||||
"nocombine", "NONE" };
|
||||
static int hl_attr_table[] =
|
||||
{ HL_BOLD, HL_STANDOUT, HL_UNDERLINE,
|
||||
HL_UNDERCURL, HL_UNDERDOUBLE, HL_UNDERDOTTED, HL_UNDERDASHED,
|
||||
HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_STRIKETHROUGH, HL_NOCOMBINE, 0 };
|
||||
HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_STRIKETHROUGH, HL_ALTFONT,
|
||||
HL_NOCOMBINE, 0 };
|
||||
|
||||
/// Structure that stores information about a highlight group.
|
||||
/// The ID of a highlight group is also called group ID. It is the index in
|
||||
@@ -1595,7 +1597,12 @@ const char *highlight_has_attr(const int id, const int flag, const int modec)
|
||||
attr = hl_table[id - 1].sg_cterm;
|
||||
}
|
||||
|
||||
return (attr & flag) ? "1" : NULL;
|
||||
if (flag & HL_UNDERLINE_MASK) {
|
||||
int ul = attr & HL_UNDERLINE_MASK;
|
||||
return ul == flag ? "1" : NULL;
|
||||
} else {
|
||||
return (attr & flag) ? "1" : NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/// Return color name of the given highlight group
|
||||
|
Reference in New Issue
Block a user