updated for version 7.0093
diff --git a/src/syntax.c b/src/syntax.c
index 6092a1c..313f600 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -7074,7 +7074,11 @@
int i;
for (i = 0; i < highlight_ga.ga_len; ++i)
+ {
highlight_clear(i);
+ vim_free(HL_TABLE()[i].sg_name);
+ vim_free(HL_TABLE()[i].sg_name_u);
+ }
ga_clear(&highlight_ga);
}
#endif
@@ -7485,7 +7489,7 @@
attrentry_T *aep;
{
int i;
- attrentry_T *gap;
+ attrentry_T *taep;
static int recursive = FALSE;
/*
@@ -7499,35 +7503,39 @@
*/
for (i = 0; i < table->ga_len; ++i)
{
- gap = &(((attrentry_T *)table->ga_data)[i]);
- if ( aep->ae_attr == gap->ae_attr
+ taep = &(((attrentry_T *)table->ga_data)[i]);
+ if ( aep->ae_attr == taep->ae_attr
&& (
#ifdef FEAT_GUI
(table == &gui_attr_table
- && (aep->ae_u.gui.fg_color == gap->ae_u.gui.fg_color
- && aep->ae_u.gui.bg_color == gap->ae_u.gui.bg_color
- && aep->ae_u.gui.sp_color == gap->ae_u.gui.sp_color
- && aep->ae_u.gui.font == gap->ae_u.gui.font
+ && (aep->ae_u.gui.fg_color == taep->ae_u.gui.fg_color
+ && aep->ae_u.gui.bg_color
+ == taep->ae_u.gui.bg_color
+ && aep->ae_u.gui.sp_color
+ == taep->ae_u.gui.sp_color
+ && aep->ae_u.gui.font == taep->ae_u.gui.font
# ifdef FEAT_XFONTSET
- && aep->ae_u.gui.fontset == gap->ae_u.gui.fontset
+ && aep->ae_u.gui.fontset == taep->ae_u.gui.fontset
# endif
))
||
#endif
(table == &term_attr_table
- && (aep->ae_u.term.start == NULL) ==
- (gap->ae_u.term.start == NULL)
+ && (aep->ae_u.term.start == NULL)
+ == (taep->ae_u.term.start == NULL)
&& (aep->ae_u.term.start == NULL
|| STRCMP(aep->ae_u.term.start,
- gap->ae_u.term.start) == 0)
- && (aep->ae_u.term.stop == NULL) ==
- (gap->ae_u.term.stop == NULL)
+ taep->ae_u.term.start) == 0)
+ && (aep->ae_u.term.stop == NULL)
+ == (taep->ae_u.term.stop == NULL)
&& (aep->ae_u.term.stop == NULL
|| STRCMP(aep->ae_u.term.stop,
- gap->ae_u.term.stop) == 0))
+ taep->ae_u.term.stop) == 0))
|| (table == &cterm_attr_table
- && aep->ae_u.cterm.fg_color == gap->ae_u.cterm.fg_color
- && aep->ae_u.cterm.bg_color == gap->ae_u.cterm.bg_color)
+ && aep->ae_u.cterm.fg_color
+ == taep->ae_u.cterm.fg_color
+ && aep->ae_u.cterm.bg_color
+ == taep->ae_u.cterm.bg_color)
))
return i + ATTR_OFF;
@@ -7547,11 +7555,8 @@
}
recursive = TRUE;
-#ifdef FEAT_GUI
- ga_clear(&gui_attr_table);
-#endif
- ga_clear(&term_attr_table);
- ga_clear(&cterm_attr_table);
+ clear_hl_tables();
+
must_redraw = CLEAR;
for (i = 0; i < highlight_ga.ga_len; ++i)
@@ -7566,41 +7571,63 @@
if (ga_grow(table, 1) == FAIL)
return 0;
- gap = &(((attrentry_T *)table->ga_data)[table->ga_len]);
- vim_memset(gap, 0, sizeof(attrentry_T));
- gap->ae_attr = aep->ae_attr;
+ taep = &(((attrentry_T *)table->ga_data)[table->ga_len]);
+ vim_memset(taep, 0, sizeof(attrentry_T));
+ taep->ae_attr = aep->ae_attr;
#ifdef FEAT_GUI
if (table == &gui_attr_table)
{
- gap->ae_u.gui.fg_color = aep->ae_u.gui.fg_color;
- gap->ae_u.gui.bg_color = aep->ae_u.gui.bg_color;
- gap->ae_u.gui.sp_color = aep->ae_u.gui.sp_color;
- gap->ae_u.gui.font = aep->ae_u.gui.font;
+ taep->ae_u.gui.fg_color = aep->ae_u.gui.fg_color;
+ taep->ae_u.gui.bg_color = aep->ae_u.gui.bg_color;
+ taep->ae_u.gui.sp_color = aep->ae_u.gui.sp_color;
+ taep->ae_u.gui.font = aep->ae_u.gui.font;
# ifdef FEAT_XFONTSET
- gap->ae_u.gui.fontset = aep->ae_u.gui.fontset;
+ taep->ae_u.gui.fontset = aep->ae_u.gui.fontset;
# endif
}
#endif
if (table == &term_attr_table)
{
if (aep->ae_u.term.start == NULL)
- gap->ae_u.term.start = NULL;
+ taep->ae_u.term.start = NULL;
else
- gap->ae_u.term.start = vim_strsave(aep->ae_u.term.start);
+ taep->ae_u.term.start = vim_strsave(aep->ae_u.term.start);
if (aep->ae_u.term.stop == NULL)
- gap->ae_u.term.stop = NULL;
+ taep->ae_u.term.stop = NULL;
else
- gap->ae_u.term.stop = vim_strsave(aep->ae_u.term.stop);
+ taep->ae_u.term.stop = vim_strsave(aep->ae_u.term.stop);
}
else if (table == &cterm_attr_table)
{
- gap->ae_u.cterm.fg_color = aep->ae_u.cterm.fg_color;
- gap->ae_u.cterm.bg_color = aep->ae_u.cterm.bg_color;
+ taep->ae_u.cterm.fg_color = aep->ae_u.cterm.fg_color;
+ taep->ae_u.cterm.bg_color = aep->ae_u.cterm.bg_color;
}
++table->ga_len;
return (table->ga_len - 1 + ATTR_OFF);
}
+/*
+ * Clear all highlight tables.
+ */
+ void
+clear_hl_tables()
+{
+ int i;
+ attrentry_T *taep;
+
+#ifdef FEAT_GUI
+ ga_clear(&gui_attr_table);
+#endif
+ for (i = 0; i < term_attr_table.ga_len; ++i)
+ {
+ taep = &(((attrentry_T *)term_attr_table.ga_data)[i]);
+ vim_free(taep->ae_u.term.start);
+ vim_free(taep->ae_u.term.stop);
+ }
+ ga_clear(&term_attr_table);
+ ga_clear(&cterm_attr_table);
+}
+
#if defined(FEAT_SYN_HL) || defined(PROTO)
/*
* Combine special attributes (e.g., for spelling) with other attributes