]> granicus.if.org Git - vim/commitdiff
patch 8.1.1699: highlight_ga can be local instead of global v8.1.1699
authorBram Moolenaar <Bram@vim.org>
Mon, 15 Jul 2019 20:40:22 +0000 (22:40 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 15 Jul 2019 20:40:22 +0000 (22:40 +0200)
Problem:    Highlight_ga can be local instead of global.
Solution:   Move highlight_ga into highlight.c. (Yegappan Lakshmanan,
            closes #4675)

src/globals.h
src/highlight.c
src/proto/highlight.pro
src/structs.h
src/syntax.c
src/version.c

index bef5c30bf0281c0d30b1e89b3b72f90a8489147f..b7a2ec1f368b45f44b6804715c1cd01ca6600dbf 100644 (file)
@@ -355,9 +355,6 @@ EXTERN char_u       hash_removed;
 EXTERN int     scroll_region INIT(= FALSE); /* term supports scroll region */
 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
 // Flags to indicate an additional string for highlight name completion.
 EXTERN int include_none INIT(= 0);     // when 1 include "None"
index 2ae265ce7235f802c5b8317ca293d9f59f4dc077..9322f962f709369e5472ab4292c709c80f0bcf3e 100644 (file)
@@ -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};
 #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 set_hl_attr(int idx);
 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);
 #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
  * they still work when the runtime files can't be found.
@@ -289,6 +342,33 @@ static char *(highlight_init_dark[]) = {
     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
 init_highlight(
     int                both,       // include groups where 'bg' doesn't matter
index 958b8b1f6c164140f465b67cd47546bdd64ec006..ca4498140c119b9346bd0063b537616703b1d62c 100644 (file)
@@ -1,4 +1,7 @@
 /* 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);
 int load_colors(char_u *name);
 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_color(int id, char_u *what, int modec);
 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_name2attr(char_u *name);
 int highlight_exists(char_u *name);
index fb76df9ae2491b079c38dc9b92a45010f580d5a7..25a438f7222ed1dee6d98a242ef0eda25fc4102f 100644 (file)
@@ -999,56 +999,6 @@ struct syn_state
 };
 #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.
 
 /*
index 4476ad1487fe69cbe05d7f9b2995c9a4d8841e45..ad2e1a0cc98c1470d27e46a23d5b6cf99a926918 100644 (file)
@@ -3847,7 +3847,7 @@ syn_cmd_list(
        /*
         * 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);
        for (id = 0; id < curwin->w_s->b_syn_clusters.ga_len && !got_int; ++id)
            syn_list_cluster(id);
@@ -3995,7 +3995,7 @@ syn_list_one(
            if (SYN_ITEMS(curwin->w_s)[idx].sp_type == SPTYPE_SKIP)
                put_pattern("skip", '=', &SYN_ITEMS(curwin->w_s)[idx++], attr);
            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);
            --idx;
            msg_putchar(' ');
@@ -4022,8 +4022,8 @@ syn_list_one(
                msg_puts_attr("groupthere", attr);
            msg_putchar(' ');
            if (spp->sp_sync_idx >= 0)
-               msg_outtrans(HL_TABLE()[SYN_ITEMS(curwin->w_s)
-                                  [spp->sp_sync_idx].sp_syn.id - 1].sg_name);
+               msg_outtrans(highlight_group_name(SYN_ITEMS(curwin->w_s)
+                                  [spp->sp_sync_idx].sp_syn.id - 1));
            else
                msg_puts("NONE");
            msg_putchar(' ');
@@ -4031,12 +4031,12 @@ syn_list_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);
        msg_puts_attr("links to", attr);
        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);
        }
        else
-           msg_outtrans(HL_TABLE()[*p - 1].sg_name);
+           msg_outtrans(highlight_group_name(*p - 1));
        if (p[1])
            msg_putchar(',');
     }
@@ -4144,7 +4144,7 @@ put_pattern(
        if (last_matchgroup == 0)
            msg_outtrans((char_u *)"NONE");
        else
-           msg_outtrans(HL_TABLE()[last_matchgroup - 1].sg_name);
+           msg_outtrans(highlight_group_name(last_matchgroup - 1));
        msg_putchar(' ');
     }
 
@@ -5967,9 +5967,9 @@ get_id_list(
 
                    regmatch.rm_ic = TRUE;
                    id = 0;
-                   for (i = highlight_ga.ga_len; --i >= 0; )
+                   for (i = highlight_num_groups(); --i >= 0; )
                    {
-                       if (vim_regexec(&regmatch, HL_TABLE()[i].sg_name,
+                       if (vim_regexec(&regmatch, highlight_group_name(i),
                                                                  (colnr_T)0))
                        {
                            if (round == 2)
@@ -6685,7 +6685,7 @@ syntime_report(void)
        msg_puts(" ");
 # endif
        msg_advance(50);
-       msg_outtrans(HL_TABLE()[p->id - 1].sg_name);
+       msg_outtrans(highlight_group_name(p->id - 1));
        msg_puts(" ");
 
        msg_advance(69);
index f6fed499b1de0e933de33de8eb143d81d4fc514e..85480050b4bdb8887a9c817268d701444cc744d3 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1699,
 /**/
     1698,
 /**/