mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.1.1699: highlight_ga can be local instead of global
Problem: Highlight_ga can be local instead of global. Solution: Move highlight_ga into highlight.c. (Yegappan Lakshmanan, closes #4675)
This commit is contained in:
@@ -355,9 +355,6 @@ EXTERN char_u hash_removed;
|
|||||||
EXTERN int scroll_region INIT(= FALSE); /* term supports scroll region */
|
EXTERN int scroll_region INIT(= FALSE); /* term supports scroll region */
|
||||||
EXTERN int t_colors INIT(= 0); /* int value of T_CCO */
|
EXTERN int t_colors INIT(= 0); /* int value of T_CCO */
|
||||||
|
|
||||||
// highlight groups for 'highlight' option
|
|
||||||
EXTERN garray_T highlight_ga INIT(= {0 COMMA 0 COMMA sizeof(hl_group_T) COMMA 10 COMMA NULL});
|
|
||||||
|
|
||||||
#ifdef FEAT_CMDL_COMPL
|
#ifdef FEAT_CMDL_COMPL
|
||||||
// Flags to indicate an additional string for highlight name completion.
|
// Flags to indicate an additional string for highlight name completion.
|
||||||
EXTERN int include_none INIT(= 0); // when 1 include "None"
|
EXTERN int include_none INIT(= 0); // when 1 include "None"
|
||||||
|
@@ -29,6 +29,64 @@ static int hl_attr_table[] =
|
|||||||
{HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
|
{HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
|
||||||
#define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
|
#define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure that stores information about a highlight group.
|
||||||
|
* The ID of a highlight group is also called group ID. It is the index in
|
||||||
|
* the highlight_ga array PLUS ONE.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char_u *sg_name; // highlight group name
|
||||||
|
char_u *sg_name_u; // uppercase of sg_name
|
||||||
|
int sg_cleared; // "hi clear" was used
|
||||||
|
// for normal terminals
|
||||||
|
int sg_term; // "term=" highlighting attributes
|
||||||
|
char_u *sg_start; // terminal string for start highl
|
||||||
|
char_u *sg_stop; // terminal string for stop highl
|
||||||
|
int sg_term_attr; // Screen attr for term mode
|
||||||
|
// for color terminals
|
||||||
|
int sg_cterm; // "cterm=" highlighting attr
|
||||||
|
int sg_cterm_bold; // bold attr was set for light color
|
||||||
|
int sg_cterm_fg; // terminal fg color number + 1
|
||||||
|
int sg_cterm_bg; // terminal bg color number + 1
|
||||||
|
int sg_cterm_attr; // Screen attr for color term mode
|
||||||
|
// for when using the GUI
|
||||||
|
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
|
||||||
|
guicolor_T sg_gui_fg; // GUI foreground color handle
|
||||||
|
guicolor_T sg_gui_bg; // GUI background color handle
|
||||||
|
#endif
|
||||||
|
#ifdef FEAT_GUI
|
||||||
|
guicolor_T sg_gui_sp; // GUI special color handle
|
||||||
|
GuiFont sg_font; // GUI font handle
|
||||||
|
#ifdef FEAT_XFONTSET
|
||||||
|
GuiFontset sg_fontset; // GUI fontset handle
|
||||||
|
#endif
|
||||||
|
char_u *sg_font_name; // GUI font or fontset name
|
||||||
|
int sg_gui_attr; // Screen attr for GUI mode
|
||||||
|
#endif
|
||||||
|
#if defined(FEAT_GUI) || defined(FEAT_EVAL)
|
||||||
|
// Store the sp color name for the GUI or synIDattr()
|
||||||
|
int sg_gui; // "gui=" highlighting attributes
|
||||||
|
char_u *sg_gui_fg_name;// GUI foreground color name
|
||||||
|
char_u *sg_gui_bg_name;// GUI background color name
|
||||||
|
char_u *sg_gui_sp_name;// GUI special color name
|
||||||
|
#endif
|
||||||
|
int sg_link; // link to this highlight group ID
|
||||||
|
int sg_set; // combination of SG_* flags
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
sctx_T sg_script_ctx; // script in which the group was last set
|
||||||
|
#endif
|
||||||
|
} hl_group_T;
|
||||||
|
|
||||||
|
// highlight groups for 'highlight' option
|
||||||
|
static garray_T highlight_ga;
|
||||||
|
#define HL_TABLE() ((hl_group_T *)((highlight_ga.ga_data)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An attribute number is the index in attr_table plus ATTR_OFF.
|
||||||
|
*/
|
||||||
|
#define ATTR_OFF (HL_ALL + 1)
|
||||||
|
|
||||||
static void syn_unadd_group(void);
|
static void syn_unadd_group(void);
|
||||||
static void set_hl_attr(int idx);
|
static void set_hl_attr(int idx);
|
||||||
static void highlight_list_one(int id);
|
static void highlight_list_one(int id);
|
||||||
@@ -45,11 +103,6 @@ static int set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, int
|
|||||||
static void hl_do_font(int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font);
|
static void hl_do_font(int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* An attribute number is the index in attr_table plus ATTR_OFF.
|
|
||||||
*/
|
|
||||||
#define ATTR_OFF (HL_ALL + 1)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The default highlight groups. These are compiled-in for fast startup and
|
* The default highlight groups. These are compiled-in for fast startup and
|
||||||
* they still work when the runtime files can't be found.
|
* they still work when the runtime files can't be found.
|
||||||
@@ -289,6 +342,33 @@ static char *(highlight_init_dark[]) = {
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the number of highlight groups.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
highlight_num_groups(void)
|
||||||
|
{
|
||||||
|
return highlight_ga.ga_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the name of a highlight group.
|
||||||
|
*/
|
||||||
|
char_u *
|
||||||
|
highlight_group_name(int id)
|
||||||
|
{
|
||||||
|
return HL_TABLE()[id].sg_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the ID of the link to a highlight group.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
highlight_link_id(int id)
|
||||||
|
{
|
||||||
|
return HL_TABLE()[id].sg_link;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
init_highlight(
|
init_highlight(
|
||||||
int both, // include groups where 'bg' doesn't matter
|
int both, // include groups where 'bg' doesn't matter
|
||||||
|
@@ -1,4 +1,7 @@
|
|||||||
/* highlight.c */
|
/* highlight.c */
|
||||||
|
int highlight_num_groups(void);
|
||||||
|
char_u *highlight_group_name(int id);
|
||||||
|
int highlight_link_id(int id);
|
||||||
void init_highlight(int both, int reset);
|
void init_highlight(int both, int reset);
|
||||||
int load_colors(char_u *name);
|
int load_colors(char_u *name);
|
||||||
int lookup_color(int idx, int foreground, int *boldp);
|
int lookup_color(int idx, int foreground, int *boldp);
|
||||||
@@ -23,7 +26,7 @@ attrentry_T *syn_cterm_attr2entry(int attr);
|
|||||||
char_u *highlight_has_attr(int id, int flag, int modec);
|
char_u *highlight_has_attr(int id, int flag, int modec);
|
||||||
char_u *highlight_color(int id, char_u *what, int modec);
|
char_u *highlight_color(int id, char_u *what, int modec);
|
||||||
long_u highlight_gui_color_rgb(int id, int fg);
|
long_u highlight_gui_color_rgb(int id, int fg);
|
||||||
int syn_list_header(int did_header, int outlen, int id);
|
int syn_list_header(int did_header, int outlen, int id);
|
||||||
int syn_name2id(char_u *name);
|
int syn_name2id(char_u *name);
|
||||||
int syn_name2attr(char_u *name);
|
int syn_name2attr(char_u *name);
|
||||||
int highlight_exists(char_u *name);
|
int highlight_exists(char_u *name);
|
||||||
|
@@ -999,56 +999,6 @@ struct syn_state
|
|||||||
};
|
};
|
||||||
#endif // FEAT_SYN_HL
|
#endif // FEAT_SYN_HL
|
||||||
|
|
||||||
/*
|
|
||||||
* Structure that stores information about a highlight group.
|
|
||||||
* The ID of a highlight group is also called group ID. It is the index in
|
|
||||||
* the highlight_ga array PLUS ONE.
|
|
||||||
*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char_u *sg_name; // highlight group name
|
|
||||||
char_u *sg_name_u; // uppercase of sg_name
|
|
||||||
int sg_cleared; // "hi clear" was used
|
|
||||||
// for normal terminals
|
|
||||||
int sg_term; // "term=" highlighting attributes
|
|
||||||
char_u *sg_start; // terminal string for start highl
|
|
||||||
char_u *sg_stop; // terminal string for stop highl
|
|
||||||
int sg_term_attr; // Screen attr for term mode
|
|
||||||
// for color terminals
|
|
||||||
int sg_cterm; // "cterm=" highlighting attr
|
|
||||||
int sg_cterm_bold; // bold attr was set for light color
|
|
||||||
int sg_cterm_fg; // terminal fg color number + 1
|
|
||||||
int sg_cterm_bg; // terminal bg color number + 1
|
|
||||||
int sg_cterm_attr; // Screen attr for color term mode
|
|
||||||
// for when using the GUI
|
|
||||||
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
|
|
||||||
guicolor_T sg_gui_fg; // GUI foreground color handle
|
|
||||||
guicolor_T sg_gui_bg; // GUI background color handle
|
|
||||||
#endif
|
|
||||||
#ifdef FEAT_GUI
|
|
||||||
guicolor_T sg_gui_sp; // GUI special color handle
|
|
||||||
GuiFont sg_font; // GUI font handle
|
|
||||||
#ifdef FEAT_XFONTSET
|
|
||||||
GuiFontset sg_fontset; // GUI fontset handle
|
|
||||||
#endif
|
|
||||||
char_u *sg_font_name; // GUI font or fontset name
|
|
||||||
int sg_gui_attr; // Screen attr for GUI mode
|
|
||||||
#endif
|
|
||||||
#if defined(FEAT_GUI) || defined(FEAT_EVAL)
|
|
||||||
// Store the sp color name for the GUI or synIDattr()
|
|
||||||
int sg_gui; // "gui=" highlighting attributes
|
|
||||||
char_u *sg_gui_fg_name;// GUI foreground color name
|
|
||||||
char_u *sg_gui_bg_name;// GUI background color name
|
|
||||||
char_u *sg_gui_sp_name;// GUI special color name
|
|
||||||
#endif
|
|
||||||
int sg_link; // link to this highlight group ID
|
|
||||||
int sg_set; // combination of SG_* flags
|
|
||||||
#ifdef FEAT_EVAL
|
|
||||||
sctx_T sg_script_ctx; // script in which the group was last set
|
|
||||||
#endif
|
|
||||||
} hl_group_T;
|
|
||||||
|
|
||||||
#define HL_TABLE() ((hl_group_T *)((highlight_ga.ga_data)))
|
|
||||||
#define MAX_HL_ID 20000 // maximum value for a highlight ID.
|
#define MAX_HL_ID 20000 // maximum value for a highlight ID.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
22
src/syntax.c
22
src/syntax.c
@@ -3847,7 +3847,7 @@ syn_cmd_list(
|
|||||||
/*
|
/*
|
||||||
* No argument: List all group IDs and all syntax clusters.
|
* No argument: List all group IDs and all syntax clusters.
|
||||||
*/
|
*/
|
||||||
for (id = 1; id <= highlight_ga.ga_len && !got_int; ++id)
|
for (id = 1; id <= highlight_num_groups() && !got_int; ++id)
|
||||||
syn_list_one(id, syncing, FALSE);
|
syn_list_one(id, syncing, FALSE);
|
||||||
for (id = 0; id < curwin->w_s->b_syn_clusters.ga_len && !got_int; ++id)
|
for (id = 0; id < curwin->w_s->b_syn_clusters.ga_len && !got_int; ++id)
|
||||||
syn_list_cluster(id);
|
syn_list_cluster(id);
|
||||||
@@ -3995,7 +3995,7 @@ syn_list_one(
|
|||||||
if (SYN_ITEMS(curwin->w_s)[idx].sp_type == SPTYPE_SKIP)
|
if (SYN_ITEMS(curwin->w_s)[idx].sp_type == SPTYPE_SKIP)
|
||||||
put_pattern("skip", '=', &SYN_ITEMS(curwin->w_s)[idx++], attr);
|
put_pattern("skip", '=', &SYN_ITEMS(curwin->w_s)[idx++], attr);
|
||||||
while (idx < curwin->w_s->b_syn_patterns.ga_len
|
while (idx < curwin->w_s->b_syn_patterns.ga_len
|
||||||
&& SYN_ITEMS(curwin->w_s)[idx].sp_type == SPTYPE_END)
|
&& SYN_ITEMS(curwin->w_s)[idx].sp_type == SPTYPE_END)
|
||||||
put_pattern("end", '=', &SYN_ITEMS(curwin->w_s)[idx++], attr);
|
put_pattern("end", '=', &SYN_ITEMS(curwin->w_s)[idx++], attr);
|
||||||
--idx;
|
--idx;
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
@@ -4022,8 +4022,8 @@ syn_list_one(
|
|||||||
msg_puts_attr("groupthere", attr);
|
msg_puts_attr("groupthere", attr);
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
if (spp->sp_sync_idx >= 0)
|
if (spp->sp_sync_idx >= 0)
|
||||||
msg_outtrans(HL_TABLE()[SYN_ITEMS(curwin->w_s)
|
msg_outtrans(highlight_group_name(SYN_ITEMS(curwin->w_s)
|
||||||
[spp->sp_sync_idx].sp_syn.id - 1].sg_name);
|
[spp->sp_sync_idx].sp_syn.id - 1));
|
||||||
else
|
else
|
||||||
msg_puts("NONE");
|
msg_puts("NONE");
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
@@ -4031,12 +4031,12 @@ syn_list_one(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* list the link, if there is one */
|
/* list the link, if there is one */
|
||||||
if (HL_TABLE()[id - 1].sg_link && (did_header || link_only) && !got_int)
|
if (highlight_link_id(id - 1) && (did_header || link_only) && !got_int)
|
||||||
{
|
{
|
||||||
(void)syn_list_header(did_header, 999, id);
|
(void)syn_list_header(did_header, 999, id);
|
||||||
msg_puts_attr("links to", attr);
|
msg_puts_attr("links to", attr);
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
|
msg_outtrans(highlight_group_name(highlight_link_id(id - 1) - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4115,7 +4115,7 @@ put_id_list(char_u *name, short *list, int attr)
|
|||||||
msg_outtrans(SYN_CLSTR(curwin->w_s)[scl_id].scl_name);
|
msg_outtrans(SYN_CLSTR(curwin->w_s)[scl_id].scl_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
msg_outtrans(HL_TABLE()[*p - 1].sg_name);
|
msg_outtrans(highlight_group_name(*p - 1));
|
||||||
if (p[1])
|
if (p[1])
|
||||||
msg_putchar(',');
|
msg_putchar(',');
|
||||||
}
|
}
|
||||||
@@ -4144,7 +4144,7 @@ put_pattern(
|
|||||||
if (last_matchgroup == 0)
|
if (last_matchgroup == 0)
|
||||||
msg_outtrans((char_u *)"NONE");
|
msg_outtrans((char_u *)"NONE");
|
||||||
else
|
else
|
||||||
msg_outtrans(HL_TABLE()[last_matchgroup - 1].sg_name);
|
msg_outtrans(highlight_group_name(last_matchgroup - 1));
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5967,9 +5967,9 @@ get_id_list(
|
|||||||
|
|
||||||
regmatch.rm_ic = TRUE;
|
regmatch.rm_ic = TRUE;
|
||||||
id = 0;
|
id = 0;
|
||||||
for (i = highlight_ga.ga_len; --i >= 0; )
|
for (i = highlight_num_groups(); --i >= 0; )
|
||||||
{
|
{
|
||||||
if (vim_regexec(®match, HL_TABLE()[i].sg_name,
|
if (vim_regexec(®match, highlight_group_name(i),
|
||||||
(colnr_T)0))
|
(colnr_T)0))
|
||||||
{
|
{
|
||||||
if (round == 2)
|
if (round == 2)
|
||||||
@@ -6685,7 +6685,7 @@ syntime_report(void)
|
|||||||
msg_puts(" ");
|
msg_puts(" ");
|
||||||
# endif
|
# endif
|
||||||
msg_advance(50);
|
msg_advance(50);
|
||||||
msg_outtrans(HL_TABLE()[p->id - 1].sg_name);
|
msg_outtrans(highlight_group_name(p->id - 1));
|
||||||
msg_puts(" ");
|
msg_puts(" ");
|
||||||
|
|
||||||
msg_advance(69);
|
msg_advance(69);
|
||||||
|
@@ -777,6 +777,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1699,
|
||||||
/**/
|
/**/
|
||||||
1698,
|
1698,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user