annotate src/highlight.c @ 19176:be81baeb69f8 v8.2.0147

patch 8.2.0147: block Visual mode operators not correct when 'linebreak' set Commit: https://github.com/vim/vim/commit/03c3bd9fd094c1aede2e8fe3ad8fd25b9f033053 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 23 20:58:09 2020 +0100 patch 8.2.0147: block Visual mode operators not correct when 'linebreak' set Problem: Block Visual mode operators not correct when 'linebreak' set. Solution: Set w_p_lbr to lbr_saved more often. (Ken Takata, closes https://github.com/vim/vim/issues/5524)
author Bram Moolenaar <Bram@vim.org>
date Thu, 23 Jan 2020 21:00:03 +0100
parents 847cc7932c42
children e7b4fff348dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2 *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4 *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10 /*
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
11 * Highlighting stuff.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
12 * Includes highlighting matches.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
13 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15 #include "vim.h"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
16
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
17 #define SG_TERM 1 // term has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
18 #define SG_CTERM 2 // cterm has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
19 #define SG_GUI 4 // gui has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
20 #define SG_LINK 8 // link has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
21
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
22 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23 * The "term", "cterm" and "gui" arguments can be any combination of the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
24 * following names, separated by commas (but no spaces!).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
25 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
26 static char *(hl_name_table[]) =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
27 {"bold", "standout", "underline", "undercurl",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
28 "italic", "reverse", "inverse", "nocombine", "strikethrough", "NONE"};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
29 static int hl_attr_table[] =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
30 {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
31 #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
32
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
33 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
34 * Structure that stores information about a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
35 * The ID of a highlight group is also called group ID. It is the index in
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
36 * the highlight_ga array PLUS ONE.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
37 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
38 typedef struct
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
39 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
40 char_u *sg_name; // highlight group name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
41 char_u *sg_name_u; // uppercase of sg_name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
42 int sg_cleared; // "hi clear" was used
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
43 // for normal terminals
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
44 int sg_term; // "term=" highlighting attributes
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
45 char_u *sg_start; // terminal string for start highl
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
46 char_u *sg_stop; // terminal string for stop highl
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
47 int sg_term_attr; // Screen attr for term mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
48 // for color terminals
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
49 int sg_cterm; // "cterm=" highlighting attr
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
50 int sg_cterm_bold; // bold attr was set for light color
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
51 int sg_cterm_fg; // terminal fg color number + 1
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
52 int sg_cterm_bg; // terminal bg color number + 1
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
53 int sg_cterm_attr; // Screen attr for color term mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
54 // for when using the GUI
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
55 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
56 guicolor_T sg_gui_fg; // GUI foreground color handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
57 guicolor_T sg_gui_bg; // GUI background color handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
58 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
59 #ifdef FEAT_GUI
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
60 guicolor_T sg_gui_sp; // GUI special color handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
61 GuiFont sg_font; // GUI font handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
62 #ifdef FEAT_XFONTSET
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
63 GuiFontset sg_fontset; // GUI fontset handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
64 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
65 char_u *sg_font_name; // GUI font or fontset name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
66 int sg_gui_attr; // Screen attr for GUI mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
67 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
68 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
69 // Store the sp color name for the GUI or synIDattr()
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
70 int sg_gui; // "gui=" highlighting attributes
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
71 char_u *sg_gui_fg_name;// GUI foreground color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
72 char_u *sg_gui_bg_name;// GUI background color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
73 char_u *sg_gui_sp_name;// GUI special color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
74 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
75 int sg_link; // link to this highlight group ID
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
76 int sg_set; // combination of SG_* flags
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
77 #ifdef FEAT_EVAL
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
78 sctx_T sg_script_ctx; // script in which the group was last set
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
79 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
80 } hl_group_T;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
81
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
82 // highlight groups for 'highlight' option
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
83 static garray_T highlight_ga;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
84 #define HL_TABLE() ((hl_group_T *)((highlight_ga.ga_data)))
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
85
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
86 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
87 * An attribute number is the index in attr_table plus ATTR_OFF.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
88 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
89 #define ATTR_OFF (HL_ALL + 1)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
90
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
91 static void syn_unadd_group(void);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
92 static void set_hl_attr(int idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
93 static void highlight_list_one(int id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
94 static int highlight_list_arg(int id, int didh, int type, int iarg, char_u *sarg, char *name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
95 static int syn_add_group(char_u *name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
96 static int hl_has_settings(int idx, int check_link);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
97 static void highlight_clear(int idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
98
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
99 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
100 static void gui_do_one_color(int idx, int do_menu, int do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
102 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
103 static int set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, int do_menu, int use_norm, int do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
104 static void hl_do_font(int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
105 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
106
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
107 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
108 * The default highlight groups. These are compiled-in for fast startup and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 * they still work when the runtime files can't be found.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
110 * When making changes here, also change runtime/colors/default.vim!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
111 * The #ifdefs are needed to reduce the amount of static data. Helps to make
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
112 * the 16 bit DOS (museum) version compile.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
113 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
114 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
115 # define CENT(a, b) b
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
116 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 # define CENT(a, b) a
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
119 static char *(highlight_init_both[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
120 CENT("ErrorMsg term=standout ctermbg=DarkRed ctermfg=White",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
121 "ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
122 CENT("IncSearch term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
123 "IncSearch term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 CENT("ModeMsg term=bold cterm=bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
125 "ModeMsg term=bold cterm=bold gui=bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
126 CENT("NonText term=bold ctermfg=Blue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 "NonText term=bold ctermfg=Blue gui=bold guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
128 CENT("StatusLine term=reverse,bold cterm=reverse,bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129 "StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
130 CENT("StatusLineNC term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
131 "StatusLineNC term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
132 "default link EndOfBuffer NonText",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
133 CENT("VertSplit term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
134 "VertSplit term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
135 #ifdef FEAT_CLIPBOARD
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
136 CENT("VisualNOS term=underline,bold cterm=underline,bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
137 "VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
138 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
139 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
140 CENT("DiffText term=reverse cterm=bold ctermbg=Red",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
141 "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
142 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
143 CENT("PmenuSbar ctermbg=Grey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
144 "PmenuSbar ctermbg=Grey guibg=Grey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
145 CENT("TabLineSel term=bold cterm=bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
146 "TabLineSel term=bold cterm=bold gui=bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
147 CENT("TabLineFill term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
148 "TabLineFill term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
150 "Cursor guibg=fg guifg=bg",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
151 "lCursor guibg=fg guifg=bg", // should be different, but what?
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
152 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 "default link QuickFixLine Search",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
154 CENT("Normal cterm=NONE", "Normal gui=NONE"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
155 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
156 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
157
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
158 // Default colors only used with a light background.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159 static char *(highlight_init_light[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
160 CENT("Directory term=bold ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161 "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162 CENT("LineNr term=underline ctermfg=Brown",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163 "LineNr term=underline ctermfg=Brown guifg=Brown"),
18068
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
164 CENT("CursorLineNr term=bold cterm=underline ctermfg=Brown",
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
165 "CursorLineNr term=bold cterm=underline ctermfg=Brown gui=bold guifg=Brown"),
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
166 CENT("MoreMsg term=bold ctermfg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
167 "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168 CENT("Question term=standout ctermfg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169 "Question term=standout ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 CENT("Search term=reverse ctermbg=Yellow ctermfg=NONE",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171 "Search term=reverse ctermbg=Yellow ctermfg=NONE guibg=Yellow guifg=NONE"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172 #ifdef FEAT_SPELL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 CENT("SpellBad term=reverse ctermbg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174 "SpellBad term=reverse ctermbg=LightRed guisp=Red gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
175 CENT("SpellCap term=reverse ctermbg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
176 "SpellCap term=reverse ctermbg=LightBlue guisp=Blue gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 CENT("SpellRare term=reverse ctermbg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178 "SpellRare term=reverse ctermbg=LightMagenta guisp=Magenta gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
179 CENT("SpellLocal term=underline ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
180 "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
181 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
182 CENT("PmenuThumb ctermbg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
183 "PmenuThumb ctermbg=Black guibg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
184 CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
185 "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
186 CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
187 "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
188 CENT("SpecialKey term=bold ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
189 "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
190 CENT("Title term=bold ctermfg=DarkMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
191 "Title term=bold ctermfg=DarkMagenta gui=bold guifg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
192 CENT("WarningMsg term=standout ctermfg=DarkRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
193 "WarningMsg term=standout ctermfg=DarkRed guifg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
194 #ifdef FEAT_WILDMENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
195 CENT("WildMenu term=standout ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
196 "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
197 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
198 #ifdef FEAT_FOLDING
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 CENT("Folded term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
200 "Folded term=standout ctermbg=Grey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
201 CENT("FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
202 "FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
203 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
204 #ifdef FEAT_SIGNS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
205 CENT("SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
206 "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
207 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
208 CENT("Visual term=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
209 "Visual term=reverse guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
210 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
211 CENT("DiffAdd term=bold ctermbg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
212 "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
213 CENT("DiffChange term=bold ctermbg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
214 "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
215 CENT("DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
216 "DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
217 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
218 CENT("TabLine term=underline cterm=underline ctermfg=black ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
219 "TabLine term=underline cterm=underline ctermfg=black ctermbg=LightGrey gui=underline guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
220 #ifdef FEAT_SYN_HL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
221 CENT("CursorColumn term=reverse ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
222 "CursorColumn term=reverse ctermbg=LightGrey guibg=Grey90"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 CENT("CursorLine term=underline cterm=underline",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
224 "CursorLine term=underline cterm=underline guibg=Grey90"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
225 CENT("ColorColumn term=reverse ctermbg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
226 "ColorColumn term=reverse ctermbg=LightRed guibg=LightRed"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
227 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
228 #ifdef FEAT_CONCEAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
229 CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
230 "Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
231 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
232 CENT("MatchParen term=reverse ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 "MatchParen term=reverse ctermbg=Cyan guibg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
234 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
235 CENT("StatusLineTerm term=reverse,bold cterm=bold ctermfg=White ctermbg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
236 "StatusLineTerm term=reverse,bold cterm=bold ctermfg=White ctermbg=DarkGreen gui=bold guifg=bg guibg=DarkGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
237 CENT("StatusLineTermNC term=reverse ctermfg=White ctermbg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
238 "StatusLineTermNC term=reverse ctermfg=White ctermbg=DarkGreen guifg=bg guibg=DarkGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
239 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
240 #ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
241 CENT("ToolbarLine term=underline ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
242 "ToolbarLine term=underline ctermbg=LightGrey guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 CENT("ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
244 "ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey gui=bold guifg=White guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
245 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
246 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
248
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
249 // Default colors only used with a dark background.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
250 static char *(highlight_init_dark[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
251 CENT("Directory term=bold ctermfg=LightCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
252 "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
253 CENT("LineNr term=underline ctermfg=Yellow",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
254 "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
18068
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
255 CENT("CursorLineNr term=bold cterm=underline ctermfg=Yellow",
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
256 "CursorLineNr term=bold cterm=underline ctermfg=Yellow gui=bold guifg=Yellow"),
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
257 CENT("MoreMsg term=bold ctermfg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
258 "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
259 CENT("Question term=standout ctermfg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
260 "Question term=standout ctermfg=LightGreen gui=bold guifg=Green"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
261 CENT("Search term=reverse ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
262 "Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
263 CENT("SpecialKey term=bold ctermfg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
264 "SpecialKey term=bold ctermfg=LightBlue guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
265 #ifdef FEAT_SPELL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
266 CENT("SpellBad term=reverse ctermbg=Red",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
267 "SpellBad term=reverse ctermbg=Red guisp=Red gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
268 CENT("SpellCap term=reverse ctermbg=Blue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
269 "SpellCap term=reverse ctermbg=Blue guisp=Blue gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
270 CENT("SpellRare term=reverse ctermbg=Magenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
271 "SpellRare term=reverse ctermbg=Magenta guisp=Magenta gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
272 CENT("SpellLocal term=underline ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
273 "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
274 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
275 CENT("PmenuThumb ctermbg=White",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
276 "PmenuThumb ctermbg=White guibg=White"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
277 CENT("Pmenu ctermbg=Magenta ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
278 "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
279 CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
280 "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
281 CENT("Title term=bold ctermfg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
282 "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
283 CENT("WarningMsg term=standout ctermfg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
284 "WarningMsg term=standout ctermfg=LightRed guifg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
285 #ifdef FEAT_WILDMENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
286 CENT("WildMenu term=standout ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
287 "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
288 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
289 #ifdef FEAT_FOLDING
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
290 CENT("Folded term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
291 "Folded term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=DarkGrey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
292 CENT("FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
293 "FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
294 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
295 #ifdef FEAT_SIGNS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
296 CENT("SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
297 "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
298 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
299 CENT("Visual term=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
300 "Visual term=reverse guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
301 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
302 CENT("DiffAdd term=bold ctermbg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
303 "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
304 CENT("DiffChange term=bold ctermbg=DarkMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
305 "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
306 CENT("DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
307 "DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
308 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
309 CENT("TabLine term=underline cterm=underline ctermfg=white ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
310 "TabLine term=underline cterm=underline ctermfg=white ctermbg=DarkGrey gui=underline guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
311 #ifdef FEAT_SYN_HL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
312 CENT("CursorColumn term=reverse ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
313 "CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
314 CENT("CursorLine term=underline cterm=underline",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
315 "CursorLine term=underline cterm=underline guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
316 CENT("ColorColumn term=reverse ctermbg=DarkRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
317 "ColorColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
318 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
319 CENT("MatchParen term=reverse ctermbg=DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
320 "MatchParen term=reverse ctermbg=DarkCyan guibg=DarkCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
321 #ifdef FEAT_CONCEAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
322 CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
323 "Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
324 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
325 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
326 CENT("StatusLineTerm term=reverse,bold cterm=bold ctermfg=Black ctermbg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
327 "StatusLineTerm term=reverse,bold cterm=bold ctermfg=Black ctermbg=LightGreen gui=bold guifg=bg guibg=LightGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
328 CENT("StatusLineTermNC term=reverse ctermfg=Black ctermbg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
329 "StatusLineTermNC term=reverse ctermfg=Black ctermbg=LightGreen guifg=bg guibg=LightGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
330 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
331 #ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
332 CENT("ToolbarLine term=underline ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
333 "ToolbarLine term=underline ctermbg=DarkGrey guibg=Grey50"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
334 CENT("ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
335 "ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey gui=bold guifg=Black guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
336 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
337 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
338 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
339
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
340 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
341 * Returns the number of highlight groups.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
342 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
343 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
344 highlight_num_groups(void)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
345 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
346 return highlight_ga.ga_len;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
347 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
348
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
349 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
350 * Returns the name of a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
351 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
352 char_u *
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
353 highlight_group_name(int id)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
354 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
355 return HL_TABLE()[id].sg_name;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
356 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
357
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
358 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
359 * Returns the ID of the link to a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
360 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
361 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
362 highlight_link_id(int id)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
363 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
364 return HL_TABLE()[id].sg_link;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
365 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
366
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
367 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
368 init_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
369 int both, // include groups where 'bg' doesn't matter
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
370 int reset) // clear group first
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
371 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
372 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
373 char **pp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
374 static int had_both = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
375 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
376 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
377
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
378 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
379 * Try finding the color scheme file. Used when a color file was loaded
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
380 * and 'background' or 't_Co' is changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
381 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
382 p = get_var_value((char_u *)"g:colors_name");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 if (p != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
385 // The value of g:colors_name could be freed when sourcing the script,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
386 // making "p" invalid, so copy it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387 char_u *copy_p = vim_strsave(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388 int r;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
390 if (copy_p != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
391 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
392 r = load_colors(copy_p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
393 vim_free(copy_p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
394 if (r == OK)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
395 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
396 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
397 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
398
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
399 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
400
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
401 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
402 * Didn't use a color file, use the compiled-in colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
403 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
404 if (both)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
405 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
406 had_both = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
407 pp = highlight_init_both;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
408 for (i = 0; pp[i] != NULL; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
409 do_highlight((char_u *)pp[i], reset, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
410 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
411 else if (!had_both)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
412 // Don't do anything before the call with both == TRUE from main().
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413 // Not everything has been setup then, and that call will overrule
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
414 // everything anyway.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
415 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
416
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
417 if (*p_bg == 'l')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
418 pp = highlight_init_light;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
419 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
420 pp = highlight_init_dark;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
421 for (i = 0; pp[i] != NULL; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
422 do_highlight((char_u *)pp[i], reset, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
423
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
424 // Reverse looks ugly, but grey may not work for 8 colors. Thus let it
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
425 // depend on the number of colors available.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
426 // With 8 colors brown is equal to yellow, need to use black for Search fg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
427 // to avoid Statement highlighted text disappears.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
428 // Clear the attributes, needed when changing the t_Co value.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
429 if (t_colors > 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
430 do_highlight((char_u *)(*p_bg == 'l'
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
431 ? "Visual cterm=NONE ctermbg=LightGrey"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
432 : "Visual cterm=NONE ctermbg=DarkGrey"), FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
433 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
434 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
435 do_highlight((char_u *)"Visual cterm=reverse ctermbg=NONE",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
436 FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
437 if (*p_bg == 'l')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
438 do_highlight((char_u *)"Search ctermfg=black", FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
439 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
440
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
441 #ifdef FEAT_SYN_HL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
442 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
443 * If syntax highlighting is enabled load the highlighting for it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
444 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
445 if (get_var_value((char_u *)"g:syntax_on") != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
446 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
447 static int recursive = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
448
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
449 if (recursive >= 5)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
450 emsg(_("E679: recursive loop loading syncolor.vim"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
451 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
452 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
453 ++recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
454 (void)source_runtime((char_u *)"syntax/syncolor.vim", DIP_ALL);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
455 --recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
456 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
457 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
458 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
459 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
460
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
461 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
462 * Load color file "name".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
463 * Return OK for success, FAIL for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
464 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
465 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
466 load_colors(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
467 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
468 char_u *buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
469 int retval = FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
470 static int recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
471
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
472 // When being called recursively, this is probably because setting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
473 // 'background' caused the highlighting to be reloaded. This means it is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
474 // working, thus we should return OK.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
475 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
476 return OK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
477
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
478 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
479 buf = alloc(STRLEN(name) + 12);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
480 if (buf != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
481 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
482 apply_autocmds(EVENT_COLORSCHEMEPRE, name,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
483 curbuf->b_fname, FALSE, curbuf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
484 sprintf((char *)buf, "colors/%s.vim", name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
485 retval = source_runtime(buf, DIP_START + DIP_OPT);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
486 vim_free(buf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
487 apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
488 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
489 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
490
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
491 return retval;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
492 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
493
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
494 static char *(color_names[28]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
495 "Black", "DarkBlue", "DarkGreen", "DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
496 "DarkRed", "DarkMagenta", "Brown", "DarkYellow",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
497 "Gray", "Grey", "LightGray", "LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
498 "DarkGray", "DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
499 "Blue", "LightBlue", "Green", "LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
500 "Cyan", "LightCyan", "Red", "LightRed", "Magenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
501 "LightMagenta", "Yellow", "LightYellow", "White", "NONE"};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
502 // indices:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
503 // 0, 1, 2, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
504 // 4, 5, 6, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
505 // 8, 9, 10, 11,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
506 // 12, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
507 // 14, 15, 16, 17,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
508 // 18, 19, 20, 21, 22,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
509 // 23, 24, 25, 26, 27
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
510 static int color_numbers_16[28] = {0, 1, 2, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
511 4, 5, 6, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
512 7, 7, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
513 8, 8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
514 9, 9, 10, 10,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
515 11, 11, 12, 12, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
516 13, 14, 14, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
517 // for xterm with 88 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
518 static int color_numbers_88[28] = {0, 4, 2, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
519 1, 5, 32, 72,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
520 84, 84, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
521 82, 82,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
522 12, 43, 10, 61,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
523 14, 63, 9, 74, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
524 75, 11, 78, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
525 // for xterm with 256 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
526 static int color_numbers_256[28] = {0, 4, 2, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
527 1, 5, 130, 130,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
528 248, 248, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
529 242, 242,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
530 12, 81, 10, 121,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
531 14, 159, 9, 224, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
532 225, 11, 229, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
533 // for terminals with less than 16 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
534 static int color_numbers_8[28] = {0, 4, 2, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
535 1, 5, 3, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
536 7, 7, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
537 0+8, 0+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
538 4+8, 4+8, 2+8, 2+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
539 6+8, 6+8, 1+8, 1+8, 5+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
540 5+8, 3+8, 3+8, 7+8, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
541
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
542 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
543 * Lookup the "cterm" value to be used for color with index "idx" in
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
544 * color_names[].
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
545 * "boldp" will be set to TRUE or FALSE for a foreground color when using 8
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
546 * colors, otherwise it will be unchanged.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
547 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
548 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
549 lookup_color(int idx, int foreground, int *boldp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
550 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
551 int color = color_numbers_16[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
552 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
553
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
554 // Use the _16 table to check if it's a valid color name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
555 if (color < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
556 return -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
557
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
558 if (t_colors == 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
559 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
560 // t_Co is 8: use the 8 colors table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
561 #if defined(__QNXNTO__)
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
562 // On qnx, the 8 & 16 color arrays are the same
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
563 if (STRNCMP(T_NAME, "qansi", 5) == 0)
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
564 color = color_numbers_16[idx];
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
565 else
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
566 #endif
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
567 color = color_numbers_8[idx];
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
568 if (foreground)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
569 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
570 // set/reset bold attribute to get light foreground
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
571 // colors (on some terminals, e.g. "linux")
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
572 if (color & 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
573 *boldp = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
574 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
575 *boldp = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
576 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
577 color &= 7; // truncate to 8 colors
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
578 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
579 else if (t_colors == 16 || t_colors == 88
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
580 || t_colors >= 256)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
581 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
582 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
583 * Guess: if the termcap entry ends in 'm', it is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
584 * probably an xterm-like terminal. Use the changed
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
585 * order for colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
586 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
587 if (*T_CAF != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
588 p = T_CAF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
589 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
590 p = T_CSF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
591 if (*p != NUL && (t_colors > 256
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
592 || *(p + STRLEN(p) - 1) == 'm'))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
593 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
594 if (t_colors == 88)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
595 color = color_numbers_88[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
596 else if (t_colors >= 256)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
597 color = color_numbers_256[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
598 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
599 color = color_numbers_8[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
600 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
601 #ifdef FEAT_TERMRESPONSE
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
602 if (t_colors >= 256 && color == 15 && is_mac_terminal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
603 // Terminal.app has a bug: 15 is light grey. Use white
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
604 // from the color cube instead.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
605 color = 231;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
606 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
607 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
608 return color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
609 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
610
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
611 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
612 * Handle the ":highlight .." command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
613 * When using ":hi clear" this is called recursively for each group with
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
614 * "forceit" and "init" both TRUE.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
615 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
616 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
617 do_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
618 char_u *line,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
619 int forceit,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
620 int init) // TRUE when called for initializing
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
621 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
622 char_u *name_end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
623 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
624 char_u *linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
625 char_u *key_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
626 char_u *arg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
627 char_u *key = NULL, *arg = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
628 long i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
629 int off;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
630 int len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
631 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
632 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
633 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
634 hl_group_T item_before;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
635 int did_change = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
636 int dodefault = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
637 int doclear = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
638 int dolink = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
639 int error = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
640 int color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
641 int is_normal_group = FALSE; // "Normal" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
642 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
643 int is_terminal_group = FALSE; // "Terminal" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
644 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
645 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
646 int is_menu_group = FALSE; // "Menu" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
647 int is_scrollbar_group = FALSE; // "Scrollbar" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
648 int is_tooltip_group = FALSE; // "Tooltip" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
649 int do_colors = FALSE; // need to update colors?
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
650 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
651 # define is_menu_group 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
652 # define is_tooltip_group 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
653 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
654 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
655 int did_highlight_changed = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
656 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
657
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
658 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
659 * If no argument, list current highlighting.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
660 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
661 if (ends_excmd(*line))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
662 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
663 for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
664 // TODO: only call when the group has attributes set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
665 highlight_list_one((int)i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
666 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
667 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
668
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
669 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
670 * Isolate the name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
671 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
672 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
673 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
674
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
675 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
676 * Check for "default" argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
677 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
678 if (STRNCMP(line, "default", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
679 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
680 dodefault = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
681 line = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
682 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
683 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
684 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
685
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
686 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
687 * Check for "clear" or "link" argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
688 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
689 if (STRNCMP(line, "clear", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
690 doclear = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
691 if (STRNCMP(line, "link", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
692 dolink = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
693
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
694 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
695 * ":highlight {group-name}": list highlighting for one group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
696 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
697 if (!doclear && !dolink && ends_excmd(*linep))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
698 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
699 id = syn_namen2id(line, (int)(name_end - line));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
700 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
701 semsg(_("E411: highlight group not found: %s"), line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
702 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
703 highlight_list_one(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
704 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
705 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
706
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
707 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
708 * Handle ":highlight link {from} {to}" command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
709 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
710 if (dolink)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
711 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
712 char_u *from_start = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
713 char_u *from_end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
714 char_u *to_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
715 char_u *to_end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
716 int from_id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
717 int to_id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
718
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
719 from_end = skiptowhite(from_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
720 to_start = skipwhite(from_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
721 to_end = skiptowhite(to_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
722
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
723 if (ends_excmd(*from_start) || ends_excmd(*to_start))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
724 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
725 semsg(_("E412: Not enough arguments: \":highlight link %s\""),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
726 from_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
727 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
728 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
729
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
730 if (!ends_excmd(*skipwhite(to_end)))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
731 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
732 semsg(_("E413: Too many arguments: \":highlight link %s\""), from_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
733 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
734 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
735
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
736 from_id = syn_check_group(from_start, (int)(from_end - from_start));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
737 if (STRNCMP(to_start, "NONE", 4) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
738 to_id = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
739 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
740 to_id = syn_check_group(to_start, (int)(to_end - to_start));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
741
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
742 if (from_id > 0 && (!init || HL_TABLE()[from_id - 1].sg_set == 0))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
743 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
744 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
745 * Don't allow a link when there already is some highlighting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
746 * for the group, unless '!' is used
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
747 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
748 if (to_id > 0 && !forceit && !init
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
749 && hl_has_settings(from_id - 1, dodefault))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
750 {
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18953
diff changeset
751 if (SOURCING_NAME == NULL && !dodefault)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
752 emsg(_("E414: group has settings, highlight link ignored"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
753 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
754 else if (HL_TABLE()[from_id - 1].sg_link != to_id
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
755 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
756 || HL_TABLE()[from_id - 1].sg_script_ctx.sc_sid
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
757 != current_sctx.sc_sid
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
758 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
759 || HL_TABLE()[from_id - 1].sg_cleared)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
760 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
761 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
762 HL_TABLE()[from_id - 1].sg_set |= SG_LINK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
763 HL_TABLE()[from_id - 1].sg_link = to_id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
764 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
765 HL_TABLE()[from_id - 1].sg_script_ctx = current_sctx;
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18953
diff changeset
766 HL_TABLE()[from_id - 1].sg_script_ctx.sc_lnum += SOURCING_LNUM;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
767 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
768 HL_TABLE()[from_id - 1].sg_cleared = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
769 redraw_all_later(SOME_VALID);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
770
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
771 // Only call highlight_changed() once after multiple changes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
772 need_highlight_changed = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
773 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
774 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
775
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
776 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
777 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
778
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
779 if (doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
780 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
781 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
782 * ":highlight clear [group]" command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
783 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
784 line = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
785 if (ends_excmd(*line))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
786 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
787 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
788 // First, we do not destroy the old values, but allocate the new
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
789 // ones and update the display. THEN we destroy the old values.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
790 // If we destroy the old values first, then the old values
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
791 // (such as GuiFont's or GuiFontset's) will still be displayed but
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
792 // invalid because they were free'd.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
793 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
794 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
795 # ifdef FEAT_BEVAL_TIP
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
796 gui_init_tooltip_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
797 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
798 # if defined(FEAT_MENU) && (defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
799 gui_init_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
800 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
801 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
802 # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_X11)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
803 gui_mch_def_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
804 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
805 # ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
806 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
807
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
808 // This only needs to be done when there is no Menu highlight
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
809 // group defined by default, which IS currently the case.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
810 gui_mch_new_menu_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
811 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
812 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
813 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
814 gui_new_scrollbar_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
815 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
816 gui_mch_new_tooltip_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
817 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
818 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
819 gui_mch_new_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
820 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
821 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
822 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
823
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
824 // Ok, we're done allocating the new default graphics items.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
825 // The screen should already be refreshed at this point.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
826 // It is now Ok to clear out the old data.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
827 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
828 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
829 do_unlet((char_u *)"colors_name", TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
830 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
831 restore_cterm_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
832
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
833 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
834 * Clear all default highlight groups and load the defaults.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
835 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
836 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
837 highlight_clear(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
838 init_highlight(TRUE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
839 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
840 if (USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
841 highlight_gui_started();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
842 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
843 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
844 highlight_changed();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
845 redraw_later_clear();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
846 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
847 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
848 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
849 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
850 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
851
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
852 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
853 * Find the group name in the table. If it does not exist yet, add it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
854 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
855 id = syn_check_group(line, (int)(name_end - line));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
856 if (id == 0) // failed (out of memory)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
857 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
858 idx = id - 1; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
859
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
860 // Return if "default" was used and the group already has settings.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
861 if (dodefault && hl_has_settings(idx, TRUE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
862 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
863
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
864 // Make a copy so we can check if any attribute actually changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
865 item_before = HL_TABLE()[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
866
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
867 if (STRCMP(HL_TABLE()[idx].sg_name_u, "NORMAL") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
868 is_normal_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
869 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
870 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "TERMINAL") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
871 is_terminal_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
872 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
873 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
874 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "MENU") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
875 is_menu_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
876 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "SCROLLBAR") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
877 is_scrollbar_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
878 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "TOOLTIP") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
879 is_tooltip_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
880 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
881
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
882 // Clear the highlighting for ":hi clear {group}" and ":hi clear".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
883 if (doclear || (forceit && init))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
884 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
885 highlight_clear(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
886 if (!doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
887 HL_TABLE()[idx].sg_set = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
888 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
889
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
890 if (!doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
891 while (!ends_excmd(*linep))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
892 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
893 key_start = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
894 if (*linep == '=')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
895 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
896 semsg(_("E415: unexpected equal sign: %s"), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
897 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
898 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
899 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
900
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
901 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
902 * Isolate the key ("term", "ctermfg", "ctermbg", "font", "guifg" or
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
903 * "guibg").
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
904 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
905 while (*linep && !VIM_ISWHITE(*linep) && *linep != '=')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
906 ++linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
907 vim_free(key);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
908 key = vim_strnsave_up(key_start, (int)(linep - key_start));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
909 if (key == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
910 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
911 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
912 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
913 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
914 linep = skipwhite(linep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
915
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
916 if (STRCMP(key, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
917 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
918 if (!init || HL_TABLE()[idx].sg_set == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
919 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
920 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
921 HL_TABLE()[idx].sg_set |= SG_TERM+SG_CTERM+SG_GUI;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
922 highlight_clear(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
923 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
924 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
925 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
926
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
927 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
928 * Check for the equal sign.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
929 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
930 if (*linep != '=')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
931 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
932 semsg(_("E416: missing equal sign: %s"), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
933 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
934 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
935 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
936 ++linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
937
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
938 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
939 * Isolate the argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
940 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
941 linep = skipwhite(linep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
942 if (*linep == '\'') // guifg='color name'
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
943 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
944 arg_start = ++linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
945 linep = vim_strchr(linep, '\'');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
946 if (linep == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
947 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
948 semsg(_(e_invarg2), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
949 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
950 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
951 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
952 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
953 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
954 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
955 arg_start = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
956 linep = skiptowhite(linep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
957 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
958 if (linep == arg_start)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
959 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
960 semsg(_("E417: missing argument: %s"), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
961 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
962 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
963 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
964 vim_free(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
965 arg = vim_strnsave(arg_start, (int)(linep - arg_start));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
966 if (arg == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
967 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
968 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
969 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
970 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
971 if (*linep == '\'')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
972 ++linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
973
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
974 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
975 * Store the argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
976 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
977 if ( STRCMP(key, "TERM") == 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
978 || STRCMP(key, "CTERM") == 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
979 || STRCMP(key, "GUI") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
980 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
981 attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
982 off = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
983 while (arg[off] != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
984 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
985 for (i = sizeof(hl_attr_table) / sizeof(int); --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
986 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
987 len = (int)STRLEN(hl_name_table[i]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
988 if (STRNICMP(arg + off, hl_name_table[i], len) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
989 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
990 attr |= hl_attr_table[i];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
991 off += len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
992 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
993 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
994 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
995 if (i < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
996 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
997 semsg(_("E418: Illegal value: %s"), arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
998 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
999 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1000 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1001 if (arg[off] == ',') // another one follows
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1002 ++off;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1003 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1004 if (error)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1005 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1006 if (*key == 'T')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1007 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1008 if (!init || !(HL_TABLE()[idx].sg_set & SG_TERM))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1009 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1010 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1011 HL_TABLE()[idx].sg_set |= SG_TERM;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1012 HL_TABLE()[idx].sg_term = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1013 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1014 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1015 else if (*key == 'C')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1016 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1017 if (!init || !(HL_TABLE()[idx].sg_set & SG_CTERM))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1018 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1019 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1020 HL_TABLE()[idx].sg_set |= SG_CTERM;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1021 HL_TABLE()[idx].sg_cterm = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1022 HL_TABLE()[idx].sg_cterm_bold = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1023 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1024 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1025 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1026 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1027 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1028 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1029 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1030 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1031 HL_TABLE()[idx].sg_set |= SG_GUI;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1032 HL_TABLE()[idx].sg_gui = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1033 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1034 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1035 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1036 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1037 else if (STRCMP(key, "FONT") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1038 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1039 // in non-GUI fonts are simply ignored
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1040 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1041 if (HL_TABLE()[idx].sg_font_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1042 && STRCMP(HL_TABLE()[idx].sg_font_name, arg) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1043 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1044 // Font name didn't change, ignore.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1045 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1046 else if (!gui.shell_created)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1047 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1048 // GUI not started yet, always accept the name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1049 vim_free(HL_TABLE()[idx].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1050 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1051 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1052 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1053 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1054 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1055 GuiFont temp_sg_font = HL_TABLE()[idx].sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1056 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1057 GuiFontset temp_sg_fontset = HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1058 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1059 // First, save the current font/fontset.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1060 // Then try to allocate the font/fontset.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1061 // If the allocation fails, HL_TABLE()[idx].sg_font OR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1062 // sg_fontset will be set to NOFONT or NOFONTSET respectively.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1063
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1064 HL_TABLE()[idx].sg_font = NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1065 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1066 HL_TABLE()[idx].sg_fontset = NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1067 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1068 hl_do_font(idx, arg, is_normal_group, is_menu_group,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1069 is_tooltip_group, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1070
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1071 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1072 if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1073 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1074 // New fontset was accepted. Free the old one, if there
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1075 // was one.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1076 gui_mch_free_fontset(temp_sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1077 vim_free(HL_TABLE()[idx].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1078 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1079 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1080 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1081 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1082 HL_TABLE()[idx].sg_fontset = temp_sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1083 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1084 if (HL_TABLE()[idx].sg_font != NOFONT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1085 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1086 // New font was accepted. Free the old one, if there was
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1087 // one.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1088 gui_mch_free_font(temp_sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1089 vim_free(HL_TABLE()[idx].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1090 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1091 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1092 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1093 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1094 HL_TABLE()[idx].sg_font = temp_sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1095 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1096 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1097 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1098 else if (STRCMP(key, "CTERMFG") == 0 || STRCMP(key, "CTERMBG") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1099 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1100 if (!init || !(HL_TABLE()[idx].sg_set & SG_CTERM))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1101 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1102 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1103 HL_TABLE()[idx].sg_set |= SG_CTERM;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1104
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1105 // When setting the foreground color, and previously the "bold"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1106 // flag was set for a light color, reset it now
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1107 if (key[5] == 'F' && HL_TABLE()[idx].sg_cterm_bold)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1108 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1109 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1110 HL_TABLE()[idx].sg_cterm_bold = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1111 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1112
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1113 if (VIM_ISDIGIT(*arg))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1114 color = atoi((char *)arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1115 else if (STRICMP(arg, "fg") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1116 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1117 if (cterm_normal_fg_color)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1118 color = cterm_normal_fg_color - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1119 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1120 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1121 emsg(_("E419: FG color unknown"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1122 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1123 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1124 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1125 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1126 else if (STRICMP(arg, "bg") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1127 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1128 if (cterm_normal_bg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1129 color = cterm_normal_bg_color - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1130 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1131 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1132 emsg(_("E420: BG color unknown"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1133 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1134 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1135 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1136 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1137 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1138 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1139 int bold = MAYBE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1140
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1141 // reduce calls to STRICMP a bit, it can be slow
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1142 off = TOUPPER_ASC(*arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1143 for (i = (sizeof(color_names) / sizeof(char *)); --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1144 if (off == color_names[i][0]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1145 && STRICMP(arg + 1, color_names[i] + 1) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1146 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1147 if (i < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1148 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1149 semsg(_("E421: Color name or number not recognized: %s"), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1150 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1151 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1152 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1153
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1154 color = lookup_color(i, key[5] == 'F', &bold);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1155
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1156 // set/reset bold attribute to get light foreground
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1157 // colors (on some terminals, e.g. "linux")
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1158 if (bold == TRUE)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1159 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1160 HL_TABLE()[idx].sg_cterm |= HL_BOLD;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1161 HL_TABLE()[idx].sg_cterm_bold = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1162 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1163 else if (bold == FALSE)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1164 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1165 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1166
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1167 // Add one to the argument, to avoid zero. Zero is used for
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1168 // "NONE", then "color" is -1.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1169 if (key[5] == 'F')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1170 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1171 HL_TABLE()[idx].sg_cterm_fg = color + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1172 if (is_normal_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1173 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1174 cterm_normal_fg_color = color + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1175 cterm_normal_fg_bold = (HL_TABLE()[idx].sg_cterm & HL_BOLD);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1176 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1177 // Don't do this if the GUI is used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1178 if (!gui.in_use && !gui.starting)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1179 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1180 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1181 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1182 if (termcap_active && color >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1183 term_fg_color(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1184 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1185 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1186 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1187 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1188 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1189 HL_TABLE()[idx].sg_cterm_bg = color + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1190 if (is_normal_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1191 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1192 cterm_normal_bg_color = color + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1193 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1194 // Don't mess with 'background' if the GUI is used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1195 if (!gui.in_use && !gui.starting)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1196 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1197 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1198 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1199 if (color >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1200 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1201 int dark = -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1202
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1203 if (termcap_active)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1204 term_bg_color(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1205 if (t_colors < 16)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1206 dark = (color == 0 || color == 4);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1207 // Limit the heuristic to the standard 16 colors
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1208 else if (color < 16)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1209 dark = (color < 7 || color == 8);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1210 // Set the 'background' option if the value is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1211 // wrong.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1212 if (dark != -1
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1213 && dark != (*p_bg == 'd')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1214 && !option_was_set((char_u *)"bg"))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1215 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1216 set_option_value((char_u *)"bg", 0L,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1217 (char_u *)(dark ? "dark" : "light"), 0);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1218 reset_option_was_set((char_u *)"bg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1219 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1220 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1221 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1222 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1223 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1224 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1225 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1226 else if (STRCMP(key, "GUIFG") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1227 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1228 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1229 char_u **namep = &HL_TABLE()[idx].sg_gui_fg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1230
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1231 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1232 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1233 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1234 HL_TABLE()[idx].sg_set |= SG_GUI;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1235
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1236 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1237 // In GUI guifg colors are only used when recognized
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1238 i = color_name2handle(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1239 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1240 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1241 HL_TABLE()[idx].sg_gui_fg = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1242 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1243 if (*namep == NULL || STRCMP(*namep, arg) != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1244 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1245 vim_free(*namep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1246 if (STRCMP(arg, "NONE") != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1247 *namep = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1248 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1249 *namep = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1250 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1251 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1252 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1253 # ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1254 if (is_menu_group && gui.menu_fg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1255 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1256 gui.menu_fg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1257 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1258 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1259 if (is_scrollbar_group && gui.scroll_fg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1260 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1261 gui.scroll_fg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1262 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1263 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1264 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1265 if (is_tooltip_group && gui.tooltip_fg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1266 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1267 gui.tooltip_fg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1268 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1269 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1270 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1271 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1272 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1273 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1274 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1275 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1276 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1277 else if (STRCMP(key, "GUIBG") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1278 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1279 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1280 char_u **namep = &HL_TABLE()[idx].sg_gui_bg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1281
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1282 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1283 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1284 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1285 HL_TABLE()[idx].sg_set |= SG_GUI;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1286
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1287 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1288 // In GUI guifg colors are only used when recognized
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1289 i = color_name2handle(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1290 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1291 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1292 HL_TABLE()[idx].sg_gui_bg = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1293 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1294 if (*namep == NULL || STRCMP(*namep, arg) != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1295 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1296 vim_free(*namep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1297 if (STRCMP(arg, "NONE") != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1298 *namep = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1299 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1300 *namep = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1301 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1302 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1303 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1304 # ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1305 if (is_menu_group && gui.menu_bg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1306 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1307 gui.menu_bg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1308 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1309 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1310 if (is_scrollbar_group && gui.scroll_bg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1311 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1312 gui.scroll_bg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1313 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1314 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1315 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1316 if (is_tooltip_group && gui.tooltip_bg_pixel != i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1317 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1318 gui.tooltip_bg_pixel = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1319 do_colors = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1320 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1321 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1322 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1323 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1324 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1325 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1326 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1327 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1328 else if (STRCMP(key, "GUISP") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1329 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1330 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1331 char_u **namep = &HL_TABLE()[idx].sg_gui_sp_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1332
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1333 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1334 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1335 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1336 HL_TABLE()[idx].sg_set |= SG_GUI;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1337
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1338 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1339 i = color_name2handle(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1340 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1341 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1342 HL_TABLE()[idx].sg_gui_sp = i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1343 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1344 if (*namep == NULL || STRCMP(*namep, arg) != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1345 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1346 vim_free(*namep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1347 if (STRCMP(arg, "NONE") != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1348 *namep = vim_strsave(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1349 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1350 *namep = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1351 did_change = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1352 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1353 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1354 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1355 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1356 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1357 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1358 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1359 else if (STRCMP(key, "START") == 0 || STRCMP(key, "STOP") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1360 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1361 char_u buf[100];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1362 char_u *tname;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1363
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1364 if (!init)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1365 HL_TABLE()[idx].sg_set |= SG_TERM;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1366
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1367 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1368 * The "start" and "stop" arguments can be a literal escape
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1369 * sequence, or a comma separated list of terminal codes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1370 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1371 if (STRNCMP(arg, "t_", 2) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1372 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1373 off = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1374 buf[0] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1375 while (arg[off] != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1376 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1377 // Isolate one termcap name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1378 for (len = 0; arg[off + len] &&
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1379 arg[off + len] != ','; ++len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1380 ;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1381 tname = vim_strnsave(arg + off, len);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1382 if (tname == NULL) // out of memory
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1383 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1384 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1385 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1386 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1387 // lookup the escape sequence for the item
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1388 p = get_term_code(tname);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1389 vim_free(tname);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1390 if (p == NULL) // ignore non-existing things
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1391 p = (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1392
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1393 // Append it to the already found stuff
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1394 if ((int)(STRLEN(buf) + STRLEN(p)) >= 99)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1395 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1396 semsg(_("E422: terminal code too long: %s"), arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1397 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1398 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1399 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1400 STRCAT(buf, p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1401
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1402 // Advance to the next item
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1403 off += len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1404 if (arg[off] == ',') // another one follows
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1405 ++off;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1406 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1407 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1408 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1409 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1410 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1411 * Copy characters from arg[] to buf[], translating <> codes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1412 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1413 for (p = arg, off = 0; off < 100 - 6 && *p; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1414 {
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18251
diff changeset
1415 len = trans_special(&p, buf + off, FALSE, FALSE,
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18251
diff changeset
1416 TRUE, NULL);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1417 if (len > 0) // recognized special char
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1418 off += len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1419 else // copy as normal char
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1420 buf[off++] = *p++;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1421 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1422 buf[off] = NUL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1423 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1424 if (error)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1425 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1426
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1427 if (STRCMP(buf, "NONE") == 0) // resetting the value
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1428 p = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1429 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1430 p = vim_strsave(buf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1431 if (key[2] == 'A')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1432 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1433 vim_free(HL_TABLE()[idx].sg_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1434 HL_TABLE()[idx].sg_start = p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1435 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1436 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1437 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1438 vim_free(HL_TABLE()[idx].sg_stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1439 HL_TABLE()[idx].sg_stop = p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1440 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1441 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1442 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1443 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1444 semsg(_("E423: Illegal argument: %s"), key_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1445 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1446 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1447 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1448 HL_TABLE()[idx].sg_cleared = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1449
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1450 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1451 * When highlighting has been given for a group, don't link it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1452 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1453 if (!init || !(HL_TABLE()[idx].sg_set & SG_LINK))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1454 HL_TABLE()[idx].sg_link = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1455
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1456 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1457 * Continue with next argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1458 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1459 linep = skipwhite(linep);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1460 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1461
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1462 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1463 * If there is an error, and it's a new entry, remove it from the table.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1464 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1465 if (error && idx == highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1466 syn_unadd_group();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1467 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1468 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1469 if (is_normal_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1470 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1471 HL_TABLE()[idx].sg_term_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1472 HL_TABLE()[idx].sg_cterm_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1473 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1474 HL_TABLE()[idx].sg_gui_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1475 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1476 * Need to update all groups, because they might be using "bg"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1477 * and/or "fg", which have been changed now.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1478 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1479 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1480 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1481 if (USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1482 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1483 highlight_gui_started();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1484 did_highlight_changed = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1485 redraw_all_later(NOT_VALID);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1486 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1487 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1488 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1489 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1490 else if (is_terminal_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1491 set_terminal_default_colors(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1492 HL_TABLE()[idx].sg_cterm_fg, HL_TABLE()[idx].sg_cterm_bg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1493 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1494 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1495 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1496 else if (is_menu_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1497 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1498 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1499 gui_mch_new_menu_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1500 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1501 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1502 else if (is_scrollbar_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1503 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1504 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1505 gui_new_scrollbar_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1506 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1507 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1508 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1509 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1510 else if (is_tooltip_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1511 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1512 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1513 gui_mch_new_tooltip_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1514 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1515 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1516 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1517 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1518 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1519 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1520 HL_TABLE()[idx].sg_script_ctx = current_sctx;
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18953
diff changeset
1521 HL_TABLE()[idx].sg_script_ctx.sc_lnum += SOURCING_LNUM;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1522 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1523 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1524
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1525 vim_free(key);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1526 vim_free(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1527
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1528 // Only call highlight_changed() once, after a sequence of highlight
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1529 // commands, and only if an attribute actually changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1530 if ((did_change
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1531 || memcmp(&HL_TABLE()[idx], &item_before, sizeof(item_before)) != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1532 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1533 && !did_highlight_changed
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1534 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1535 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1536 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1537 // Do not trigger a redraw when highlighting is changed while
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1538 // redrawing. This may happen when evaluating 'statusline' changes the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1539 // StatusLine group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1540 if (!updating_screen)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1541 redraw_all_later(NOT_VALID);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1542 need_highlight_changed = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1543 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1544 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1545
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1546 #if defined(EXITFREE) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1547 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1548 free_highlight(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1549 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1550 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1551
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1552 for (i = 0; i < highlight_ga.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1553 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1554 highlight_clear(i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1555 vim_free(HL_TABLE()[i].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1556 vim_free(HL_TABLE()[i].sg_name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1557 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1558 ga_clear(&highlight_ga);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1559 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1560 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1561
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1562 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1563 * Reset the cterm colors to what they were before Vim was started, if
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1564 * possible. Otherwise reset them to zero.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1565 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1566 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1567 restore_cterm_colors(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1568 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1569 #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1570 // Since t_me has been set, this probably means that the user
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1571 // wants to use this as default colors. Need to reset default
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1572 // background/foreground colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1573 mch_set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1574 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1575 # ifdef VIMDLL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1576 if (!gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1577 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1578 mch_set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1579 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1580 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1581 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1582 cterm_normal_fg_color = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1583 cterm_normal_fg_bold = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1584 cterm_normal_bg_color = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1585 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1586 cterm_normal_fg_gui_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1587 cterm_normal_bg_gui_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1588 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1589 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1590 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1591
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1592 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1593 * Return TRUE if highlight group "idx" has any settings.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1594 * When "check_link" is TRUE also check for an existing link.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1595 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1596 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1597 hl_has_settings(int idx, int check_link)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1598 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1599 return ( HL_TABLE()[idx].sg_term_attr != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1600 || HL_TABLE()[idx].sg_cterm_attr != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1601 || HL_TABLE()[idx].sg_cterm_fg != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1602 || HL_TABLE()[idx].sg_cterm_bg != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1603 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1604 || HL_TABLE()[idx].sg_gui_attr != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1605 || HL_TABLE()[idx].sg_gui_fg_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1606 || HL_TABLE()[idx].sg_gui_bg_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1607 || HL_TABLE()[idx].sg_gui_sp_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1608 || HL_TABLE()[idx].sg_font_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1609 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1610 || (check_link && (HL_TABLE()[idx].sg_set & SG_LINK)));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1611 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1612
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1613 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1614 * Clear highlighting for one group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1615 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1616 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1617 highlight_clear(int idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1618 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1619 HL_TABLE()[idx].sg_cleared = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1620
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1621 HL_TABLE()[idx].sg_term = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1622 VIM_CLEAR(HL_TABLE()[idx].sg_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1623 VIM_CLEAR(HL_TABLE()[idx].sg_stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1624 HL_TABLE()[idx].sg_term_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1625 HL_TABLE()[idx].sg_cterm = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1626 HL_TABLE()[idx].sg_cterm_bold = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1627 HL_TABLE()[idx].sg_cterm_fg = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1628 HL_TABLE()[idx].sg_cterm_bg = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1629 HL_TABLE()[idx].sg_cterm_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1630 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1631 HL_TABLE()[idx].sg_gui = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1632 VIM_CLEAR(HL_TABLE()[idx].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1633 VIM_CLEAR(HL_TABLE()[idx].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1634 VIM_CLEAR(HL_TABLE()[idx].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1635 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1636 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1637 HL_TABLE()[idx].sg_gui_fg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1638 HL_TABLE()[idx].sg_gui_bg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1639 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1640 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1641 HL_TABLE()[idx].sg_gui_sp = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1642 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1643 HL_TABLE()[idx].sg_font = NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1644 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1645 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1646 HL_TABLE()[idx].sg_fontset = NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1647 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1648 VIM_CLEAR(HL_TABLE()[idx].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1649 HL_TABLE()[idx].sg_gui_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1650 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1651 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1652 // Clear the script ID only when there is no link, since that is not
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1653 // cleared.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1654 if (HL_TABLE()[idx].sg_link == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1655 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1656 HL_TABLE()[idx].sg_script_ctx.sc_sid = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1657 HL_TABLE()[idx].sg_script_ctx.sc_lnum = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1658 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1659 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1660 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1661
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1662 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1663 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1664 * Set the normal foreground and background colors according to the "Normal"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1665 * highlighting group. For X11 also set "Menu", "Scrollbar", and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1666 * "Tooltip" colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1667 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1668 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1669 set_normal_colors(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1670 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1671 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1672 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1673 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1674 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1675 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1676 if (set_group_colors((char_u *)"Normal",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1677 &gui.norm_pixel, &gui.back_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1678 FALSE, TRUE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1679 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1680 gui_mch_new_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1681 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1682 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1683 # ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1684 if (set_group_colors((char_u *)"Menu",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1685 &gui.menu_fg_pixel, &gui.menu_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1686 TRUE, FALSE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1687 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1688 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1689 gui_mch_new_menu_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1690 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1691 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1692 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1693 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1694 if (set_group_colors((char_u *)"Tooltip",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1695 &gui.tooltip_fg_pixel, &gui.tooltip_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1696 FALSE, FALSE, TRUE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1697 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1698 # ifdef FEAT_TOOLBAR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1699 gui_mch_new_tooltip_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1700 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1701 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1702 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1703 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1704 if (set_group_colors((char_u *)"Scrollbar",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1705 &gui.scroll_fg_pixel, &gui.scroll_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1706 FALSE, FALSE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1707 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1708 gui_new_scrollbar_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1709 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1710 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1711 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1712 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1713 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1714 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1715 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1716 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1717 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1718 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1719 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1720
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1721 idx = syn_name2id((char_u *)"Normal") - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1722 if (idx >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1723 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1724 gui_do_one_color(idx, FALSE, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1725
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1726 // If the normal fg or bg color changed a complete redraw is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1727 // required.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1728 if (cterm_normal_fg_gui_color != HL_TABLE()[idx].sg_gui_fg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1729 || cterm_normal_bg_gui_color != HL_TABLE()[idx].sg_gui_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1730 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1731 // if the GUI color is INVALCOLOR then we use the default cterm
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1732 // color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1733 cterm_normal_fg_gui_color = HL_TABLE()[idx].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1734 cterm_normal_bg_gui_color = HL_TABLE()[idx].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1735 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1736 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1737 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1738 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1739 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1740 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1741 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1742
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1743 #if defined(FEAT_GUI) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1744 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1745 * Set the colors for "Normal", "Menu", "Tooltip" or "Scrollbar".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1746 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1747 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1748 set_group_colors(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1749 char_u *name,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1750 guicolor_T *fgp,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1751 guicolor_T *bgp,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1752 int do_menu,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1753 int use_norm,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1754 int do_tooltip)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1755 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1756 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1757
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1758 idx = syn_name2id(name) - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1759 if (idx >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1760 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1761 gui_do_one_color(idx, do_menu, do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1762
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1763 if (HL_TABLE()[idx].sg_gui_fg != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1764 *fgp = HL_TABLE()[idx].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1765 else if (use_norm)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1766 *fgp = gui.def_norm_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1767 if (HL_TABLE()[idx].sg_gui_bg != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1768 *bgp = HL_TABLE()[idx].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1769 else if (use_norm)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1770 *bgp = gui.def_back_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1771 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1772 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1773 return FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1774 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1775
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1776 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1777 * Get the font of the "Normal" group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1778 * Returns "" when it's not found or not set.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1779 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1780 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1781 hl_get_font_name(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1782 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1783 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1784 char_u *s;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1785
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1786 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1787 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1788 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1789 s = HL_TABLE()[id - 1].sg_font_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1790 if (s != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1791 return s;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1792 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1793 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1794 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1795
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1796 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1797 * Set font for "Normal" group. Called by gui_mch_init_font() when a font has
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1798 * actually chosen to be used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1799 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1800 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1801 hl_set_font_name(char_u *font_name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1802 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1803 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1804
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1805 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1806 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1807 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1808 vim_free(HL_TABLE()[id - 1].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1809 HL_TABLE()[id - 1].sg_font_name = vim_strsave(font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1810 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1811 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1812
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1813 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1814 * Set background color for "Normal" group. Called by gui_set_bg_color()
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1815 * when the color is known.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1816 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1817 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1818 hl_set_bg_color_name(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1819 char_u *name) // must have been allocated
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1820 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1821 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1822
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1823 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1824 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1825 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1826 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1827 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1828 vim_free(HL_TABLE()[id - 1].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1829 HL_TABLE()[id - 1].sg_gui_bg_name = name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1830 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1831 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1832 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1833
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1834 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1835 * Set foreground color for "Normal" group. Called by gui_set_fg_color()
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1836 * when the color is known.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1837 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1838 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1839 hl_set_fg_color_name(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1840 char_u *name) // must have been allocated
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1841 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1842 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1843
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1844 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1845 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1846 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1847 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1848 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1849 vim_free(HL_TABLE()[id - 1].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1850 HL_TABLE()[id - 1].sg_gui_fg_name = name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1851 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1852 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1853 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1854
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1855 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1856 * Return the handle for a font name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1857 * Returns NOFONT when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1858 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1859 static GuiFont
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1860 font_name2handle(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1861 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1862 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1863 return NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1864
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1865 return gui_mch_get_font(name, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1866 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1867
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1868 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1869 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1870 * Return the handle for a fontset name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1871 * Returns NOFONTSET when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1872 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1873 static GuiFontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1874 fontset_name2handle(char_u *name, int fixed_width)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1875 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1876 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1877 return NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1878
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1879 return gui_mch_get_fontset(name, TRUE, fixed_width);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1880 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1881 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1882
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1883 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1884 * Get the font or fontset for one highlight group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1885 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1886 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1887 hl_do_font(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1888 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1889 char_u *arg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1890 int do_normal, // set normal font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1891 int do_menu UNUSED, // set menu font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1892 int do_tooltip UNUSED, // set tooltip font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1893 int free_font) // free current font/fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1894 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1895 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1896 // If 'guifontset' is not empty, first try using the name as a
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1897 // fontset. If that doesn't work, use it as a font name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1898 if (*p_guifontset != NUL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1899 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1900 || do_menu
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1901 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1902 # ifdef FEAT_BEVAL_TIP
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1903 // In Athena & Motif, the Tooltip highlight group is always a fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1904 || do_tooltip
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1905 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1906 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1907 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1908 if (free_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1909 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1910 HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1911 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1912 || do_menu
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1913 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1914 # ifdef FEAT_BEVAL_TIP
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1915 || do_tooltip
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1916 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1917 );
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1918 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1919 if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1920 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1921 // If it worked and it's the Normal group, use it as the normal
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1922 // fontset. Same for the Menu group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1923 if (do_normal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1924 gui_init_font(arg, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1925 # if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1926 if (do_menu)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1927 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1928 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1929 gui.menu_fontset = HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1930 # else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1931 // YIKES! This is a bug waiting to crash the program
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1932 gui.menu_font = HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1933 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1934 gui_mch_new_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1935 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1936 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1937 if (do_tooltip)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1938 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1939 // The Athena widget set cannot currently handle switching between
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1940 // displaying a single font and a fontset.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1941 // If the XtNinternational resource is set to True at widget
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1942 // creation, then a fontset is always used, otherwise an
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1943 // XFontStruct is used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1944 gui.tooltip_fontset = (XFontSet)HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1945 gui_mch_new_tooltip_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1946 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1947 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1948 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1949 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1950 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1951 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1952 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1953 if (free_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1954 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1955 HL_TABLE()[idx].sg_font = font_name2handle(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1956 // If it worked and it's the Normal group, use it as the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1957 // normal font. Same for the Menu group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1958 if (HL_TABLE()[idx].sg_font != NOFONT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1959 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1960 if (do_normal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1961 gui_init_font(arg, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1962 #ifndef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1963 # if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1964 if (do_menu)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1965 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1966 gui.menu_font = HL_TABLE()[idx].sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1967 gui_mch_new_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1968 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1969 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1970 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1971 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1972 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1973 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1974
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1975 #endif // FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1976
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1977 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1978 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1979 * Return the handle for a color name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1980 * Returns INVALCOLOR when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1981 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1982 guicolor_T
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1983 color_name2handle(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1984 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1985 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1986 return INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1987
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1988 if (STRICMP(name, "fg") == 0 || STRICMP(name, "foreground") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1989 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1990 #if defined(FEAT_TERMGUICOLORS) && defined(FEAT_GUI)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1991 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1992 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1993 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1994 return gui.norm_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1995 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1996 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1997 if (cterm_normal_fg_gui_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1998 return cterm_normal_fg_gui_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1999 // Guess that the foreground is black or white.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2000 return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "black" : "white"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2001 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2002 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2003 if (STRICMP(name, "bg") == 0 || STRICMP(name, "background") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2004 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2005 #if defined(FEAT_TERMGUICOLORS) && defined(FEAT_GUI)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2006 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2007 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2008 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2009 return gui.back_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2010 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2011 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2012 if (cterm_normal_bg_gui_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2013 return cterm_normal_bg_gui_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2014 // Guess that the background is white or black.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2015 return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "white" : "black"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2016 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2017 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2018
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2019 return GUI_GET_COLOR(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2020 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2021 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2022
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2023 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2024 * Table with the specifications for an attribute number.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2025 * Note that this table is used by ALL buffers. This is required because the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2026 * GUI can redraw at any time for any buffer.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2027 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2028 static garray_T term_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2029
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2030 #define TERM_ATTR_ENTRY(idx) ((attrentry_T *)term_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2031
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2032 static garray_T cterm_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2033
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2034 #define CTERM_ATTR_ENTRY(idx) ((attrentry_T *)cterm_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2035
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2036 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2037 static garray_T gui_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2038
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2039 #define GUI_ATTR_ENTRY(idx) ((attrentry_T *)gui_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2040 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2041
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2042 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2043 * Return the attr number for a set of colors and font.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2044 * Add a new entry to the term_attr_table, cterm_attr_table or gui_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2045 * if the combination is new.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2046 * Return 0 for error (no more room).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2047 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2048 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2049 get_attr_entry(garray_T *table, attrentry_T *aep)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2050 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2051 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2052 attrentry_T *taep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2053 static int recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2054
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2055 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2056 * Init the table, in case it wasn't done yet.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2057 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2058 table->ga_itemsize = sizeof(attrentry_T);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2059 table->ga_growsize = 7;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2060
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2061 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2062 * Try to find an entry with the same specifications.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2063 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2064 for (i = 0; i < table->ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2065 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2066 taep = &(((attrentry_T *)table->ga_data)[i]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2067 if ( aep->ae_attr == taep->ae_attr
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2068 && (
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2069 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2070 (table == &gui_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2071 && (aep->ae_u.gui.fg_color == taep->ae_u.gui.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2072 && aep->ae_u.gui.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2073 == taep->ae_u.gui.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2074 && aep->ae_u.gui.sp_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2075 == taep->ae_u.gui.sp_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2076 && aep->ae_u.gui.font == taep->ae_u.gui.font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2077 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2078 && aep->ae_u.gui.fontset == taep->ae_u.gui.fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2079 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2080 ))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2081 ||
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2082 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2083 (table == &term_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2084 && (aep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2085 == (taep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2086 && (aep->ae_u.term.start == NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2087 || STRCMP(aep->ae_u.term.start,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2088 taep->ae_u.term.start) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2089 && (aep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2090 == (taep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2091 && (aep->ae_u.term.stop == NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2092 || STRCMP(aep->ae_u.term.stop,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2093 taep->ae_u.term.stop) == 0))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2094 || (table == &cterm_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2095 && aep->ae_u.cterm.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2096 == taep->ae_u.cterm.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2097 && aep->ae_u.cterm.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2098 == taep->ae_u.cterm.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2099 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2100 && aep->ae_u.cterm.fg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2101 == taep->ae_u.cterm.fg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2102 && aep->ae_u.cterm.bg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2103 == taep->ae_u.cterm.bg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2104 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2105 )))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2106
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2107 return i + ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2108 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2109
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2110 if (table->ga_len + ATTR_OFF > MAX_TYPENR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2111 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2112 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2113 * Running out of attribute entries! remove all attributes, and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2114 * compute new ones for all groups.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2115 * When called recursively, we are really out of numbers.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2116 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2117 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2118 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2119 emsg(_("E424: Too many different highlighting attributes in use"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2120 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2121 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2122 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2123
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2124 clear_hl_tables();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2125
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2126 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2127
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2128 for (i = 0; i < highlight_ga.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2129 set_hl_attr(i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2130
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2131 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2132 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2133
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2134 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2135 * This is a new combination of colors and font, add an entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2136 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2137 if (ga_grow(table, 1) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2138 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2139
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2140 taep = &(((attrentry_T *)table->ga_data)[table->ga_len]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2141 vim_memset(taep, 0, sizeof(attrentry_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2142 taep->ae_attr = aep->ae_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2143 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2144 if (table == &gui_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2145 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2146 taep->ae_u.gui.fg_color = aep->ae_u.gui.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2147 taep->ae_u.gui.bg_color = aep->ae_u.gui.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2148 taep->ae_u.gui.sp_color = aep->ae_u.gui.sp_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2149 taep->ae_u.gui.font = aep->ae_u.gui.font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2150 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2151 taep->ae_u.gui.fontset = aep->ae_u.gui.fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2152 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2153 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2154 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2155 if (table == &term_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2156 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2157 if (aep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2158 taep->ae_u.term.start = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2159 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2160 taep->ae_u.term.start = vim_strsave(aep->ae_u.term.start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2161 if (aep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2162 taep->ae_u.term.stop = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2163 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2164 taep->ae_u.term.stop = vim_strsave(aep->ae_u.term.stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2165 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2166 else if (table == &cterm_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2167 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2168 taep->ae_u.cterm.fg_color = aep->ae_u.cterm.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2169 taep->ae_u.cterm.bg_color = aep->ae_u.cterm.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2170 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2171 taep->ae_u.cterm.fg_rgb = aep->ae_u.cterm.fg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2172 taep->ae_u.cterm.bg_rgb = aep->ae_u.cterm.bg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2173 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2174 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2175 ++table->ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2176 return (table->ga_len - 1 + ATTR_OFF);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2177 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2178
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2179 #if defined(FEAT_TERMINAL) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2180 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2181 * Get an attribute index for a cterm entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2182 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2183 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2184 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2185 get_cterm_attr_idx(int attr, int fg, int bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2186 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2187 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2188
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2189 vim_memset(&at_en, 0, sizeof(attrentry_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2190 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2191 at_en.ae_u.cterm.fg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2192 at_en.ae_u.cterm.bg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2193 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2194 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2195 at_en.ae_u.cterm.fg_color = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2196 at_en.ae_u.cterm.bg_color = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2197 return get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2198 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2199 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2200
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2201 #if (defined(FEAT_TERMINAL) && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2202 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2203 * Get an attribute index for a 'termguicolors' entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2204 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2205 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2206 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2207 get_tgc_attr_idx(int attr, guicolor_T fg, guicolor_T bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2208 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2209 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2210
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2211 vim_memset(&at_en, 0, sizeof(attrentry_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2212 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2213 if (fg == INVALCOLOR && bg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2214 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2215 // If both GUI colors are not set fall back to the cterm colors. Helps
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2216 // if the GUI only has an attribute, such as undercurl.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2217 at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2218 at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2219 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2220 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2221 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2222 at_en.ae_u.cterm.fg_rgb = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2223 at_en.ae_u.cterm.bg_rgb = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2224 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2225 return get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2226 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2227 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2228
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2229 #if (defined(FEAT_TERMINAL) && defined(FEAT_GUI)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2230 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2231 * Get an attribute index for a cterm entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2232 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2233 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2234 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2235 get_gui_attr_idx(int attr, guicolor_T fg, guicolor_T bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2236 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2237 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2238
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2239 vim_memset(&at_en, 0, sizeof(attrentry_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2240 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2241 at_en.ae_u.gui.fg_color = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2242 at_en.ae_u.gui.bg_color = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2243 return get_attr_entry(&gui_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2244 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2245 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2246
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2247 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2248 * Clear all highlight tables.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2249 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2250 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2251 clear_hl_tables(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2252 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2253 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2254 attrentry_T *taep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2255
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2256 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2257 ga_clear(&gui_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2258 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2259 for (i = 0; i < term_attr_table.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2260 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2261 taep = &(((attrentry_T *)term_attr_table.ga_data)[i]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2262 vim_free(taep->ae_u.term.start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2263 vim_free(taep->ae_u.term.stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2264 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2265 ga_clear(&term_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2266 ga_clear(&cterm_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2267 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2268
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2269 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2270 * Combine special attributes (e.g., for spelling) with other attributes
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2271 * (e.g., for syntax highlighting).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2272 * "prim_attr" overrules "char_attr".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2273 * This creates a new group when required.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2274 * Since we expect there to be few spelling mistakes we don't cache the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2275 * result.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2276 * Return the resulting attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2277 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2278 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2279 hl_combine_attr(int char_attr, int prim_attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2280 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2281 attrentry_T *char_aep = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2282 attrentry_T *spell_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2283 attrentry_T new_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2284
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2285 if (char_attr == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2286 return prim_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2287 if (char_attr <= HL_ALL && prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2288 return ATTR_COMBINE(char_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2289 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2290 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2291 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2292 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2293 char_aep = syn_gui_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2294 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2295 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2296 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2297 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2298 vim_memset(&new_en, 0, sizeof(new_en));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2299 new_en.ae_u.gui.fg_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2300 new_en.ae_u.gui.bg_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2301 new_en.ae_u.gui.sp_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2302 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2303 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2304 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2305
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2306 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2307 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2308 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2309 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2310 spell_aep = syn_gui_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2311 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2312 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2313 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2314 spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2315 if (spell_aep->ae_u.gui.fg_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2316 new_en.ae_u.gui.fg_color = spell_aep->ae_u.gui.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2317 if (spell_aep->ae_u.gui.bg_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2318 new_en.ae_u.gui.bg_color = spell_aep->ae_u.gui.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2319 if (spell_aep->ae_u.gui.sp_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2320 new_en.ae_u.gui.sp_color = spell_aep->ae_u.gui.sp_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2321 if (spell_aep->ae_u.gui.font != NOFONT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2322 new_en.ae_u.gui.font = spell_aep->ae_u.gui.font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2323 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2324 if (spell_aep->ae_u.gui.fontset != NOFONTSET)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2325 new_en.ae_u.gui.fontset = spell_aep->ae_u.gui.fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2326 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2327 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2328 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2329 return get_attr_entry(&gui_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2330 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2331 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2332
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2333 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2334 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2335 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2336 char_aep = syn_cterm_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2337 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2338 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2339 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2340 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2341 vim_memset(&new_en, 0, sizeof(new_en));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2342 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2343 new_en.ae_u.cterm.bg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2344 new_en.ae_u.cterm.fg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2345 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2346 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2347 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2348 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2349
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2350 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2351 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2352 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2353 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2354 spell_aep = syn_cterm_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2355 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2356 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2357 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2358 spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2359 if (spell_aep->ae_u.cterm.fg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2360 new_en.ae_u.cterm.fg_color = spell_aep->ae_u.cterm.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2361 if (spell_aep->ae_u.cterm.bg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2362 new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2363 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2364 // If both fg and bg are not set fall back to cterm colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2365 // Helps for SpellBad which uses undercurl in the GUI.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2366 if (COLOR_INVALID(spell_aep->ae_u.cterm.fg_rgb)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2367 && COLOR_INVALID(spell_aep->ae_u.cterm.bg_rgb))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2368 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2369 if (spell_aep->ae_u.cterm.fg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2370 new_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2371 if (spell_aep->ae_u.cterm.bg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2372 new_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2373 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2374 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2375 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2376 if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2377 new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2378 if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2379 new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2380 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2381 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2382 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2383 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2384 return get_attr_entry(&cterm_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2385 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2386
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2387 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2388 char_aep = syn_term_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2389 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2390 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2391 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2392 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2393 vim_memset(&new_en, 0, sizeof(new_en));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2394 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2395 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2396 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2397
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2398 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2399 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2400 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2401 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2402 spell_aep = syn_term_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2403 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2404 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2405 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2406 if (spell_aep->ae_u.term.start != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2407 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2408 new_en.ae_u.term.start = spell_aep->ae_u.term.start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2409 new_en.ae_u.term.stop = spell_aep->ae_u.term.stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2410 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2411 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2412 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2413 return get_attr_entry(&term_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2414 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2415
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2416 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2417 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2418 syn_gui_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2419 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2420 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2421 if (attr >= gui_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2422 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2423 return &(GUI_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2424 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2425 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2426
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2427 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2428 * Get the highlight attributes (HL_BOLD etc.) from an attribute nr.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2429 * Only to be used when "attr" > HL_ALL.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2430 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2431 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2432 syn_attr2attr(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2433 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2434 attrentry_T *aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2435
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2436 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2437 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2438 aep = syn_gui_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2439 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2440 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2441 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2442 aep = syn_cterm_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2443 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2444 aep = syn_term_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2445
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2446 if (aep == NULL) // highlighting not set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2447 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2448 return aep->ae_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2449 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2450
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2451
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2452 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2453 syn_term_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2454 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2455 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2456 if (attr >= term_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2457 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2458 return &(TERM_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2459 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2460
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2461 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2462 syn_cterm_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2463 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2464 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2465 if (attr >= cterm_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2466 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2467 return &(CTERM_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2468 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2469
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2470 #define LIST_ATTR 1
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2471 #define LIST_STRING 2
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2472 #define LIST_INT 3
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2473
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2474 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2475 highlight_list_one(int id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2476 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2477 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2478 int didh = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2479
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2480 sgp = &HL_TABLE()[id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2481
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2482 if (message_filtered(sgp->sg_name))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2483 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2484
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2485 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2486 sgp->sg_term, NULL, "term");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2487 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2488 0, sgp->sg_start, "start");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2489 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2490 0, sgp->sg_stop, "stop");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2491
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2492 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2493 sgp->sg_cterm, NULL, "cterm");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2494 didh = highlight_list_arg(id, didh, LIST_INT,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2495 sgp->sg_cterm_fg, NULL, "ctermfg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2496 didh = highlight_list_arg(id, didh, LIST_INT,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2497 sgp->sg_cterm_bg, NULL, "ctermbg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2498
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2499 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2500 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2501 sgp->sg_gui, NULL, "gui");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2502 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2503 0, sgp->sg_gui_fg_name, "guifg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2504 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2505 0, sgp->sg_gui_bg_name, "guibg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2506 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2507 0, sgp->sg_gui_sp_name, "guisp");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2508 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2509 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2510 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2511 0, sgp->sg_font_name, "font");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2512 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2513
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2514 if (sgp->sg_link && !got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2515 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2516 (void)syn_list_header(didh, 9999, id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2517 didh = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2518 msg_puts_attr("links to", HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2519 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2520 msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2521 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2522
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2523 if (!didh)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2524 highlight_list_arg(id, didh, LIST_STRING, 0, (char_u *)"cleared", "");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2525 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2526 if (p_verbose > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2527 last_set_msg(sgp->sg_script_ctx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2528 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2529 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2530
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2531 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2532 highlight_list_arg(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2533 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2534 int didh,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2535 int type,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2536 int iarg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2537 char_u *sarg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2538 char *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2539 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2540 char_u buf[100];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2541 char_u *ts;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2542 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2543
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2544 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2545 return FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2546 if (type == LIST_STRING ? (sarg != NULL) : (iarg != 0))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2547 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2548 ts = buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2549 if (type == LIST_INT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2550 sprintf((char *)buf, "%d", iarg - 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2551 else if (type == LIST_STRING)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2552 ts = sarg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2553 else // type == LIST_ATTR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2554 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2555 buf[0] = NUL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2556 for (i = 0; hl_attr_table[i] != 0; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2557 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2558 if (iarg & hl_attr_table[i])
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2559 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2560 if (buf[0] != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2561 vim_strcat(buf, (char_u *)",", 100);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2562 vim_strcat(buf, (char_u *)hl_name_table[i], 100);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2563 iarg &= ~hl_attr_table[i]; // don't want "inverse"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2564 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2565 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2566 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2567
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2568 (void)syn_list_header(didh,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2569 (int)(vim_strsize(ts) + STRLEN(name) + 1), id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2570 didh = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2571 if (!got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2572 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2573 if (*name != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2574 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2575 msg_puts_attr(name, HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2576 msg_puts_attr("=", HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2577 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2578 msg_outtrans(ts);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2579 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2580 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2581 return didh;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2582 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2583
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2584 #if (((defined(FEAT_EVAL) || defined(FEAT_PRINTER))) && defined(FEAT_SYN_HL)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2585 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2586 * Return "1" if highlight group "id" has attribute "flag".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2587 * Return NULL otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2588 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2589 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2590 highlight_has_attr(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2591 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2592 int flag,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2593 int modec) // 'g' for GUI, 'c' for cterm, 't' for term
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2594 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2595 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2596
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2597 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2598 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2599
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2600 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2601 if (modec == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2602 attr = HL_TABLE()[id - 1].sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2603 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2604 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2605 if (modec == 'c')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2606 attr = HL_TABLE()[id - 1].sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2607 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2608 attr = HL_TABLE()[id - 1].sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2609
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2610 if (attr & flag)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2611 return (char_u *)"1";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2612 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2613 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2614 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2615
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2616 #if (defined(FEAT_SYN_HL) && defined(FEAT_EVAL)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2617 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2618 * Return color name of highlight group "id".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2619 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2620 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2621 highlight_color(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2622 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2623 char_u *what, // "font", "fg", "bg", "sp", "fg#", "bg#" or "sp#"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2624 int modec) // 'g' for GUI, 'c' for cterm, 't' for term
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2625 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2626 static char_u name[20];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2627 int n;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2628 int fg = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2629 int sp = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2630 int font = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2631
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2632 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2633 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2634
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2635 if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2636 fg = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2637 else if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'o'
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2638 && TOLOWER_ASC(what[2]) == 'n' && TOLOWER_ASC(what[3]) == 't')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2639 font = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2640 else if (TOLOWER_ASC(what[0]) == 's' && TOLOWER_ASC(what[1]) == 'p')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2641 sp = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2642 else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2643 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2644 if (modec == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2645 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2646 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2647 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2648 // return font name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2649 if (font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2650 return HL_TABLE()[id - 1].sg_font_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2651 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2652
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2653 // return #RRGGBB form (only possible when GUI is running)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2654 if ((USE_24BIT) && what[2] == '#')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2655 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2656 guicolor_T color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2657 long_u rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2658 static char_u buf[10];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2659
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2660 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2661 color = HL_TABLE()[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2662 else if (sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2663 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2664 color = HL_TABLE()[id - 1].sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2665 # else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2666 color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2667 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2668 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2669 color = HL_TABLE()[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2670 if (color == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2671 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2672 rgb = (long_u)GUI_MCH_GET_RGB(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2673 sprintf((char *)buf, "#%02x%02x%02x",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2674 (unsigned)(rgb >> 16),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2675 (unsigned)(rgb >> 8) & 255,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2676 (unsigned)rgb & 255);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2677 return buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2678 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2679 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2680 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2681 return (HL_TABLE()[id - 1].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2682 if (sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2683 return (HL_TABLE()[id - 1].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2684 return (HL_TABLE()[id - 1].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2685 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2686 if (font || sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2687 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2688 if (modec == 'c')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2689 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2690 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2691 n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2692 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2693 n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2694 if (n < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2695 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2696 sprintf((char *)name, "%d", n);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2697 return name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2698 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2699 // term doesn't have color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2700 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2701 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2702 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2703
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2704 #if (defined(FEAT_SYN_HL) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2705 && (defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2706 && defined(FEAT_PRINTER)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2707 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2708 * Return color name of highlight group "id" as RGB value.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2709 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2710 long_u
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2711 highlight_gui_color_rgb(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2712 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2713 int fg) // TRUE = fg, FALSE = bg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2714 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2715 guicolor_T color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2716
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2717 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2718 return 0L;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2719
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2720 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2721 color = HL_TABLE()[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2722 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2723 color = HL_TABLE()[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2724
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2725 if (color == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2726 return 0L;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2727
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2728 return GUI_MCH_GET_RGB(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2729 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2730 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2731
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2732 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2733 * Output the syntax list header.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2734 * Return TRUE when started a new line.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2735 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2736 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2737 syn_list_header(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2738 int did_header, // did header already
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2739 int outlen, // length of string that comes
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2740 int id) // highlight group id
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2741 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2742 int endcol = 19;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2743 int newline = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2744 int name_col = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2745
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2746 if (!did_header)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2747 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2748 msg_putchar('\n');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2749 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2750 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2751 msg_outtrans(HL_TABLE()[id - 1].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2752 name_col = msg_col;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2753 endcol = 15;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2754 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2755 else if (msg_col + outlen + 1 >= Columns)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2756 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2757 msg_putchar('\n');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2758 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2759 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2760 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2761 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2762 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2763 if (msg_col >= endcol) // wrap around is like starting a new line
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2764 newline = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2765 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2766
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2767 if (msg_col >= endcol) // output at least one space
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2768 endcol = msg_col + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2769 if (Columns <= endcol) // avoid hang for tiny window
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2770 endcol = Columns - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2771
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2772 msg_advance(endcol);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2773
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2774 // Show "xxx" with the attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2775 if (!did_header)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2776 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2777 if (endcol == Columns - 1 && endcol <= name_col)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2778 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2779 msg_puts_attr("xxx", syn_id2attr(id));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2780 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2781 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2782
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2783 return newline;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2784 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2785
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2786 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2787 * Set the attribute numbers for a highlight group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2788 * Called after one of the attributes has changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2789 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2790 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2791 set_hl_attr(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2792 int idx) // index in array
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2793 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2794 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2795 hl_group_T *sgp = HL_TABLE() + idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2796
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2797 // The "Normal" group doesn't need an attribute number
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2798 if (sgp->sg_name_u != NULL && STRCMP(sgp->sg_name_u, "NORMAL") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2799 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2800
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2801 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2802 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2803 * For the GUI mode: If there are other than "normal" highlighting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2804 * attributes, need to allocate an attr number.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2805 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2806 if (sgp->sg_gui_fg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2807 && sgp->sg_gui_bg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2808 && sgp->sg_gui_sp == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2809 && sgp->sg_font == NOFONT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2810 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2811 && sgp->sg_fontset == NOFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2812 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2813 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2814 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2815 sgp->sg_gui_attr = sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2816 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2817 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2818 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2819 at_en.ae_attr = sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2820 at_en.ae_u.gui.fg_color = sgp->sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2821 at_en.ae_u.gui.bg_color = sgp->sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2822 at_en.ae_u.gui.sp_color = sgp->sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2823 at_en.ae_u.gui.font = sgp->sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2824 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2825 at_en.ae_u.gui.fontset = sgp->sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2826 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2827 sgp->sg_gui_attr = get_attr_entry(&gui_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2828 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2829 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2830 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2831 * For the term mode: If there are other than "normal" highlighting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2832 * attributes, need to allocate an attr number.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2833 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2834 if (sgp->sg_start == NULL && sgp->sg_stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2835 sgp->sg_term_attr = sgp->sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2836 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2837 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2838 at_en.ae_attr = sgp->sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2839 at_en.ae_u.term.start = sgp->sg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2840 at_en.ae_u.term.stop = sgp->sg_stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2841 sgp->sg_term_attr = get_attr_entry(&term_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2842 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2843
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2844 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2845 * For the color term mode: If there are other than "normal"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2846 * highlighting attributes, need to allocate an attr number.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2847 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2848 if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2849 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2850 && sgp->sg_gui_fg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2851 && sgp->sg_gui_bg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2852 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2853 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2854 sgp->sg_cterm_attr = sgp->sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2855 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2856 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2857 at_en.ae_attr = sgp->sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2858 at_en.ae_u.cterm.fg_color = sgp->sg_cterm_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2859 at_en.ae_u.cterm.bg_color = sgp->sg_cterm_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2860 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2861 # ifdef MSWIN
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2862 # ifdef VIMDLL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2863 // Only when not using the GUI.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2864 if (!gui.in_use && !gui.starting)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2865 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2866 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2867 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2868 guicolor_T fg, bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2869
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2870 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2871 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2872 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2873 syn_id2colors(id, &fg, &bg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2874 if (sgp->sg_gui_fg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2875 sgp->sg_gui_fg = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2876 if (sgp->sg_gui_bg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2877 sgp->sg_gui_bg = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2878 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2879
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2880 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2881 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2882 at_en.ae_u.cterm.fg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_fg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2883 at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_bg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2884 if (at_en.ae_u.cterm.fg_rgb == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2885 && at_en.ae_u.cterm.bg_rgb == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2886 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2887 // If both fg and bg are invalid fall back to the cterm colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2888 // Helps when the GUI only uses an attribute, e.g. undercurl.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2889 at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2890 at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2891 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2892 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2893 sgp->sg_cterm_attr = get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2894 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2895 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2896
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2897 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2898 * Lookup a highlight group name and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2899 * If it is not found, 0 is returned.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2900 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2901 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2902 syn_name2id(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2903 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2904 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2905 char_u name_u[200];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2906
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2907 // Avoid using stricmp() too much, it's slow on some systems
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2908 // Avoid alloc()/free(), these are slow too. ID names over 200 chars
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2909 // don't deserve to be found!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2910 vim_strncpy(name_u, name, 199);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2911 vim_strup(name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2912 for (i = highlight_ga.ga_len; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2913 if (HL_TABLE()[i].sg_name_u != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2914 && STRCMP(name_u, HL_TABLE()[i].sg_name_u) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2915 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2916 return i + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2917 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2918
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2919 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2920 * Lookup a highlight group name and return its attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2921 * Return zero if not found.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2922 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2923 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2924 syn_name2attr(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2925 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2926 int id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2927
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2928 if (id != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2929 return syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2930 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2931 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2932
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2933 #if defined(FEAT_EVAL) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2934 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2935 * Return TRUE if highlight group "name" exists.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2936 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2937 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2938 highlight_exists(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2939 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2940 return (syn_name2id(name) > 0);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2941 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2942
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2943 # if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2944 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2945 * Return the name of highlight group "id".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2946 * When not a valid ID return an empty string.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2947 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2948 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2949 syn_id2name(int id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2950 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2951 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2952 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2953 return HL_TABLE()[id - 1].sg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2954 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2955 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2956 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2957
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2958 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2959 * Like syn_name2id(), but take a pointer + length argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2960 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2961 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2962 syn_namen2id(char_u *linep, int len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2963 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2964 char_u *name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2965 int id = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2966
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2967 name = vim_strnsave(linep, len);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2968 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2969 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2970 id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2971 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2972 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2973 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2974 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2975
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2976 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2977 * Find highlight group name in the table and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2978 * The argument is a pointer to the name and the length of the name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2979 * If it doesn't exist yet, a new entry is created.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2980 * Return 0 for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2981 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2982 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2983 syn_check_group(char_u *pp, int len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2984 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2985 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2986 char_u *name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2987
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2988 name = vim_strnsave(pp, len);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2989 if (name == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2990 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2991
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2992 id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2993 if (id == 0) // doesn't exist yet
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2994 id = syn_add_group(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2995 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2996 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2997 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2998 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2999
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3000 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3001 * Add new highlight group and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3002 * "name" must be an allocated string, it will be consumed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3003 * Return 0 for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3004 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3005 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3006 syn_add_group(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3007 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3008 char_u *p;
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3009 char_u *name_up;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3010
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3011 // Check that the name is ASCII letters, digits and underscore.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3012 for (p = name; *p != NUL; ++p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3013 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3014 if (!vim_isprintc(*p))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3015 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3016 emsg(_("E669: Unprintable character in group name"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3017 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3018 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3019 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3020 else if (!ASCII_ISALNUM(*p) && *p != '_')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3021 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3022 // This is an error, but since there previously was no check only
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3023 // give a warning.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3024 msg_source(HL_ATTR(HLF_W));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3025 msg(_("W18: Invalid character in group name"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3026 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3027 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3028 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3029
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3030 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3031 * First call for this growarray: init growing array.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3032 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3033 if (highlight_ga.ga_data == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3034 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3035 highlight_ga.ga_itemsize = sizeof(hl_group_T);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3036 highlight_ga.ga_growsize = 10;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3037 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3038
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3039 if (highlight_ga.ga_len >= MAX_HL_ID)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3040 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3041 emsg(_("E849: Too many highlight and syntax groups"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3042 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3043 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3044 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3045
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3046 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3047 * Make room for at least one other syntax_highlight entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3048 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3049 if (ga_grow(&highlight_ga, 1) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3050 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3051 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3052 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3053 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3054
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3055 name_up = vim_strsave_up(name);
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3056 if (name_up == NULL)
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3057 {
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3058 vim_free(name);
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3059 return 0;
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3060 }
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3061
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3062 vim_memset(&(HL_TABLE()[highlight_ga.ga_len]), 0, sizeof(hl_group_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3063 HL_TABLE()[highlight_ga.ga_len].sg_name = name;
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3064 HL_TABLE()[highlight_ga.ga_len].sg_name_u = name_up;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3065 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3066 HL_TABLE()[highlight_ga.ga_len].sg_gui_bg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3067 HL_TABLE()[highlight_ga.ga_len].sg_gui_fg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3068 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3069 HL_TABLE()[highlight_ga.ga_len].sg_gui_sp = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3070 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3071 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3072 ++highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3073
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3074 return highlight_ga.ga_len; // ID is index plus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3075 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3076
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3077 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3078 * When, just after calling syn_add_group(), an error is discovered, this
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3079 * function deletes the new name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3080 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3081 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3082 syn_unadd_group(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3083 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3084 --highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3085 vim_free(HL_TABLE()[highlight_ga.ga_len].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3086 vim_free(HL_TABLE()[highlight_ga.ga_len].sg_name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3087 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3088
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3089 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3090 * Translate a group ID to highlight attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3091 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3092 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3093 syn_id2attr(int hl_id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3094 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3095 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3096 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3097
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3098 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3099 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3100
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3101 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3102 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3103 * Only use GUI attr when the GUI is being used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3104 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3105 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3106 attr = sgp->sg_gui_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3107 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3108 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3109 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3110 attr = sgp->sg_cterm_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3111 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3112 attr = sgp->sg_term_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3113
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3114 return attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3115 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3116
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3117 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3118 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3119 * Get the GUI colors and attributes for a group ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3120 * NOTE: the colors will be INVALCOLOR when not set, the color otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3121 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3122 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3123 syn_id2colors(int hl_id, guicolor_T *fgp, guicolor_T *bgp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3124 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3125 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3126
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3127 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3128 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3129
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3130 *fgp = sgp->sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3131 *bgp = sgp->sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3132 return sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3133 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3134 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3135
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3136 #if (defined(MSWIN) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3137 && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL)) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3138 && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3139 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3140 syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3141 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3142 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3143
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3144 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3145 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3146 *fgp = sgp->sg_cterm_fg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3147 *bgp = sgp->sg_cterm_bg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3148 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3149 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3150
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3151 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3152 * Translate a group ID to the final group ID (following links).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3153 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3154 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3155 syn_get_final_id(int hl_id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3156 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3157 int count;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3158 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3159
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3160 if (hl_id > highlight_ga.ga_len || hl_id < 1)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3161 return 0; // Can be called from eval!!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3162
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3163 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3164 * Follow links until there is no more.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3165 * Look out for loops! Break after 100 links.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3166 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3167 for (count = 100; --count >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3168 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3169 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3170 if (sgp->sg_link == 0 || sgp->sg_link > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3171 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3172 hl_id = sgp->sg_link;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3173 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3174
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3175 return hl_id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3176 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3177
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3178 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3179 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3180 * Call this function just after the GUI has started.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3181 * Also called when 'termguicolors' was set, gui.in_use will be FALSE then.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3182 * It finds the font and color handles for the highlighting groups.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3183 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3184 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3185 highlight_gui_started(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3186 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3187 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3188
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3189 // First get the colors from the "Normal" and "Menu" group, if set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3190 if (USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3191 set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3192
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3193 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3194 gui_do_one_color(idx, FALSE, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3195
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3196 highlight_changed();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3197 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3198
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3199 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3200 gui_do_one_color(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3201 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3202 int do_menu UNUSED, // TRUE: might set the menu font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3203 int do_tooltip UNUSED) // TRUE: might set the tooltip font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3204 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3205 int didit = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3206
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3207 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3208 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3209 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3210 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3211 if (HL_TABLE()[idx].sg_font_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3212 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3213 hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3214 do_tooltip, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3215 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3216 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3217 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3218 if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3219 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3220 HL_TABLE()[idx].sg_gui_fg =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3221 color_name2handle(HL_TABLE()[idx].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3222 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3223 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3224 if (HL_TABLE()[idx].sg_gui_bg_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3225 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3226 HL_TABLE()[idx].sg_gui_bg =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3227 color_name2handle(HL_TABLE()[idx].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3228 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3229 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3230 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3231 if (HL_TABLE()[idx].sg_gui_sp_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3232 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3233 HL_TABLE()[idx].sg_gui_sp =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3234 color_name2handle(HL_TABLE()[idx].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3235 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3236 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3237 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3238 if (didit) // need to get a new attr number
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3239 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3240 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3241 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3242
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3243 #if defined(USER_HIGHLIGHT) && defined(FEAT_STL_OPT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3244 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3245 * Apply difference between User[1-9] and HLF_S to HLF_SNC, HLF_ST or HLF_STNC.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3246 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3247 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3248 combine_stl_hlt(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3249 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3250 int id_S,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3251 int id_alt,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3252 int hlcnt,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3253 int i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3254 int hlf,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3255 int *table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3256 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3257 hl_group_T *hlt = HL_TABLE();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3258
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3259 if (id_alt == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3260 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3261 vim_memset(&hlt[hlcnt + i], 0, sizeof(hl_group_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3262 hlt[hlcnt + i].sg_term = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3263 hlt[hlcnt + i].sg_cterm = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3264 # if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3265 hlt[hlcnt + i].sg_gui = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3266 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3267 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3268 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3269 mch_memmove(&hlt[hlcnt + i],
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3270 &hlt[id_alt - 1],
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3271 sizeof(hl_group_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3272 hlt[hlcnt + i].sg_link = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3273
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3274 hlt[hlcnt + i].sg_term ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3275 hlt[id - 1].sg_term ^ hlt[id_S - 1].sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3276 if (hlt[id - 1].sg_start != hlt[id_S - 1].sg_start)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3277 hlt[hlcnt + i].sg_start = hlt[id - 1].sg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3278 if (hlt[id - 1].sg_stop != hlt[id_S - 1].sg_stop)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3279 hlt[hlcnt + i].sg_stop = hlt[id - 1].sg_stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3280 hlt[hlcnt + i].sg_cterm ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3281 hlt[id - 1].sg_cterm ^ hlt[id_S - 1].sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3282 if (hlt[id - 1].sg_cterm_fg != hlt[id_S - 1].sg_cterm_fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3283 hlt[hlcnt + i].sg_cterm_fg = hlt[id - 1].sg_cterm_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3284 if (hlt[id - 1].sg_cterm_bg != hlt[id_S - 1].sg_cterm_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3285 hlt[hlcnt + i].sg_cterm_bg = hlt[id - 1].sg_cterm_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3286 # if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3287 hlt[hlcnt + i].sg_gui ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3288 hlt[id - 1].sg_gui ^ hlt[id_S - 1].sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3289 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3290 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3291 if (hlt[id - 1].sg_gui_fg != hlt[id_S - 1].sg_gui_fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3292 hlt[hlcnt + i].sg_gui_fg = hlt[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3293 if (hlt[id - 1].sg_gui_bg != hlt[id_S - 1].sg_gui_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3294 hlt[hlcnt + i].sg_gui_bg = hlt[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3295 if (hlt[id - 1].sg_gui_sp != hlt[id_S - 1].sg_gui_sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3296 hlt[hlcnt + i].sg_gui_sp = hlt[id - 1].sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3297 if (hlt[id - 1].sg_font != hlt[id_S - 1].sg_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3298 hlt[hlcnt + i].sg_font = hlt[id - 1].sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3299 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3300 if (hlt[id - 1].sg_fontset != hlt[id_S - 1].sg_fontset)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3301 hlt[hlcnt + i].sg_fontset = hlt[id - 1].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3302 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3303 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3304 highlight_ga.ga_len = hlcnt + i + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3305 set_hl_attr(hlcnt + i); // At long last we can apply
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3306 table[i] = syn_id2attr(hlcnt + i + 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3307 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3308 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3309
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3310 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3311 * Translate the 'highlight' option into attributes in highlight_attr[] and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3312 * set up the user highlights User1..9. If FEAT_STL_OPT is in use, a set of
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3313 * corresponding highlights to use on top of HLF_SNC is computed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3314 * Called only when the 'highlight' option has been changed and upon first
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3315 * screen redraw after any :highlight command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3316 * Return FAIL when an invalid flag is found in 'highlight'. OK otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3317 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3318 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3319 highlight_changed(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3320 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3321 int hlf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3322 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3323 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3324 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3325 char_u *end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3326 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3327 #ifdef USER_HIGHLIGHT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3328 char_u userhl[30]; // use 30 to avoid compiler warning
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3329 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3330 int id_S = -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3331 int id_SNC = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3332 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3333 int id_ST = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3334 int id_STNC = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3335 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3336 int hlcnt;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3337 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3338 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3339 static int hl_flags[HLF_COUNT] = HL_FLAGS;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3340
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3341 need_highlight_changed = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3342
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3343 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3344 * Clear all attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3345 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3346 for (hlf = 0; hlf < (int)HLF_COUNT; ++hlf)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3347 highlight_attr[hlf] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3348
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3349 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3350 * First set all attributes to their default value.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3351 * Then use the attributes from the 'highlight' option.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3352 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3353 for (i = 0; i < 2; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3354 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3355 if (i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3356 p = p_hl;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3357 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3358 p = get_highlight_default();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3359 if (p == NULL) // just in case
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3360 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3361
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3362 while (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3363 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3364 for (hlf = 0; hlf < (int)HLF_COUNT; ++hlf)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3365 if (hl_flags[hlf] == *p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3366 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3367 ++p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3368 if (hlf == (int)HLF_COUNT || *p == NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3369 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3370
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3371 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3372 * Allow several hl_flags to be combined, like "bu" for
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3373 * bold-underlined.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3374 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3375 attr = 0;
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
3376 for ( ; *p && *p != ','; ++p) // parse up to comma
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3377 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3378 if (VIM_ISWHITE(*p)) // ignore white space
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3379 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3380
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3381 if (attr > HL_ALL) // Combination with ':' is not allowed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3382 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3383
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3384 switch (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3385 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3386 case 'b': attr |= HL_BOLD;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3387 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3388 case 'i': attr |= HL_ITALIC;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3389 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3390 case '-':
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3391 case 'n': // no highlighting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3392 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3393 case 'r': attr |= HL_INVERSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3394 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3395 case 's': attr |= HL_STANDOUT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3396 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3397 case 'u': attr |= HL_UNDERLINE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3398 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3399 case 'c': attr |= HL_UNDERCURL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3400 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3401 case 't': attr |= HL_STRIKETHROUGH;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3402 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3403 case ':': ++p; // highlight group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3404 if (attr || *p == NUL) // no combinations
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3405 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3406 end = vim_strchr(p, ',');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3407 if (end == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3408 end = p + STRLEN(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3409 id = syn_check_group(p, (int)(end - p));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3410 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3411 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3412 attr = syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3413 p = end - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3414 #if defined(FEAT_STL_OPT) && defined(USER_HIGHLIGHT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3415 if (hlf == (int)HLF_SNC)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3416 id_SNC = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3417 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3418 else if (hlf == (int)HLF_ST)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3419 id_ST = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3420 else if (hlf == (int)HLF_STNC)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3421 id_STNC = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3422 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3423 else if (hlf == (int)HLF_S)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3424 id_S = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3425 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3426 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3427 default: return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3428 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3429 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3430 highlight_attr[hlf] = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3431
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3432 p = skip_to_option_part(p); // skip comma and spaces
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3433 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3434 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3435
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3436 #ifdef USER_HIGHLIGHT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3437 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3438 * Setup the user highlights
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3439 *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3440 * Temporarily utilize 28 more hl entries:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3441 * 9 for User1-User9 combined with StatusLineNC
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3442 * 9 for User1-User9 combined with StatusLineTerm
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3443 * 9 for User1-User9 combined with StatusLineTermNC
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3444 * 1 for StatusLine default
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3445 * Have to be in there simultaneously in case of table overflows in
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3446 * get_attr_entry()
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3447 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3448 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3449 if (ga_grow(&highlight_ga, 28) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3450 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3451 hlcnt = highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3452 if (id_S == -1)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3453 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3454 // Make sure id_S is always valid to simplify code below. Use the last
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3455 // entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3456 vim_memset(&HL_TABLE()[hlcnt + 27], 0, sizeof(hl_group_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3457 HL_TABLE()[hlcnt + 18].sg_term = highlight_attr[HLF_S];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3458 id_S = hlcnt + 19;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3459 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3460 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3461 for (i = 0; i < 9; i++)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3462 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3463 sprintf((char *)userhl, "User%d", i + 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3464 id = syn_name2id(userhl);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3465 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3466 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3467 highlight_user[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3468 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3469 highlight_stlnc[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3470 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3471 highlight_stlterm[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3472 highlight_stltermnc[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3473 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3474 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3475 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3476 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3477 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3478 highlight_user[i] = syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3479 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3480 combine_stl_hlt(id, id_S, id_SNC, hlcnt, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3481 HLF_SNC, highlight_stlnc);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3482 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3483 combine_stl_hlt(id, id_S, id_ST, hlcnt + 9, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3484 HLF_ST, highlight_stlterm);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3485 combine_stl_hlt(id, id_S, id_STNC, hlcnt + 18, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3486 HLF_STNC, highlight_stltermnc);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3487 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3488 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3489 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3490 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3491 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3492 highlight_ga.ga_len = hlcnt;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3493 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3494
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3495 #endif // USER_HIGHLIGHT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3496
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3497 return OK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3498 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3499
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3500 static void highlight_list(void);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3501 static void highlight_list_two(int cnt, int attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3502
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3503 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3504 * Handle command line completion for :highlight command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3505 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3506 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3507 set_context_in_highlight_cmd(expand_T *xp, char_u *arg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3508 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3509 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3510
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3511 // Default: expand group names
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3512 xp->xp_context = EXPAND_HIGHLIGHT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3513 xp->xp_pattern = arg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3514 include_link = 2;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3515 include_default = 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3516
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3517 // (part of) subcommand already typed
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3518 if (*arg != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3519 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3520 p = skiptowhite(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3521 if (*p != NUL) // past "default" or group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3522 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3523 include_default = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3524 if (STRNCMP("default", arg, p - arg) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3525 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3526 arg = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3527 xp->xp_pattern = arg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3528 p = skiptowhite(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3529 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3530 if (*p != NUL) // past group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3531 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3532 include_link = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3533 if (arg[1] == 'i' && arg[0] == 'N')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3534 highlight_list();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3535 if (STRNCMP("link", arg, p - arg) == 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3536 || STRNCMP("clear", arg, p - arg) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3537 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3538 xp->xp_pattern = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3539 p = skiptowhite(xp->xp_pattern);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3540 if (*p != NUL) // past first group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3541 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3542 xp->xp_pattern = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3543 p = skiptowhite(xp->xp_pattern);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3544 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3545 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3546 if (*p != NUL) // past group name(s)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3547 xp->xp_context = EXPAND_NOTHING;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3548 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3549 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3550 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3551 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3552
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3553 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3554 * List highlighting matches in a nice way.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3555 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3556 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3557 highlight_list(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3558 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3559 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3560
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3561 for (i = 10; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3562 highlight_list_two(i, HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3563 for (i = 40; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3564 highlight_list_two(99, 0);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3565 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3566
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3567 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3568 highlight_list_two(int cnt, int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3569 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3570 msg_puts_attr(&("N \bI \b! \b"[cnt / 11]), attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3571 msg_clr_eos();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3572 out_flush();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3573 ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3574 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3575
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3576 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3577 * Function given to ExpandGeneric() to obtain the list of group names.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3578 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3579 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3580 get_highlight_name(expand_T *xp UNUSED, int idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3581 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3582 return get_highlight_name_ext(xp, idx, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3583 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3584
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3585 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3586 * Obtain a highlight group name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3587 * When "skip_cleared" is TRUE don't return a cleared entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3588 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3589 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3590 get_highlight_name_ext(expand_T *xp UNUSED, int idx, int skip_cleared)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3591 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3592 if (idx < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3593 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3594
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3595 // Items are never removed from the table, skip the ones that were
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3596 // cleared.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3597 if (skip_cleared && idx < highlight_ga.ga_len && HL_TABLE()[idx].sg_cleared)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3598 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3599
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3600 if (idx == highlight_ga.ga_len && include_none != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3601 return (char_u *)"none";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3602 if (idx == highlight_ga.ga_len + include_none && include_default != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3603 return (char_u *)"default";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3604 if (idx == highlight_ga.ga_len + include_none + include_default
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3605 && include_link != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3606 return (char_u *)"link";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3607 if (idx == highlight_ga.ga_len + include_none + include_default + 1
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3608 && include_link != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3609 return (char_u *)"clear";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3610 if (idx >= highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3611 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3612 return HL_TABLE()[idx].sg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3613 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3614
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3615 #if defined(FEAT_GUI) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3616 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3617 * Free all the highlight group fonts.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3618 * Used when quitting for systems which need it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3619 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3620 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3621 free_highlight_fonts(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3622 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3623 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3624
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3625 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3626 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3627 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3628 HL_TABLE()[idx].sg_font = NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3629 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3630 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3631 HL_TABLE()[idx].sg_fontset = NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3632 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3633 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3634
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3635 gui_mch_free_font(gui.norm_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3636 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3637 gui_mch_free_fontset(gui.fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3638 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3639 # ifndef FEAT_GUI_GTK
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3640 gui_mch_free_font(gui.bold_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3641 gui_mch_free_font(gui.ital_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3642 gui_mch_free_font(gui.boldital_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3643 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3644 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3645 #endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3646
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3647
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3648 #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3649
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3650 # define SEARCH_HL_PRIORITY 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3651
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3652 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3653 * Add match to the match list of window 'wp'. The pattern 'pat' will be
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3654 * highlighted with the group 'grp' with priority 'prio'.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3655 * Optionally, a desired ID 'id' can be specified (greater than or equal to 1).
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3656 * If no particular ID is desired, -1 must be specified for 'id'.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3657 * Return ID of added match, -1 on failure.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3658 */
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
3659 static int
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3660 match_add(
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3661 win_T *wp,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3662 char_u *grp,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3663 char_u *pat,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3664 int prio,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3665 int id,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3666 list_T *pos_list,
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3667 char_u *conceal_char UNUSED) // pointer to conceal replacement char
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3668 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3669 matchitem_T *cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3670 matchitem_T *prev;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3671 matchitem_T *m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3672 int hlg_id;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3673 regprog_T *regprog = NULL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3674 int rtype = SOME_VALID;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3675
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3676 if (*grp == NUL || (pat != NULL && *pat == NUL))
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3677 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3678 if (id < -1 || id == 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3679 {
18498
9e6d5a4abb1c patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents: 18301
diff changeset
3680 semsg(_("E799: Invalid ID: %d (must be greater than or equal to 1)"),
9e6d5a4abb1c patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents: 18301
diff changeset
3681 id);
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3682 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3683 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3684 if (id != -1)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3685 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3686 cur = wp->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3687 while (cur != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3688 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3689 if (cur->id == id)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3690 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3691 semsg(_("E801: ID already taken: %d"), id);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3692 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3693 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3694 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3695 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3696 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3697 if ((hlg_id = syn_namen2id(grp, (int)STRLEN(grp))) == 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3698 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3699 semsg(_(e_nogroup), grp);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3700 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3701 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3702 if (pat != NULL && (regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3703 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3704 semsg(_(e_invarg2), pat);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3705 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3706 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3707
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3708 // Find available match ID.
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3709 while (id == -1)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3710 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3711 cur = wp->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3712 while (cur != NULL && cur->id != wp->w_next_match_id)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3713 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3714 if (cur == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3715 id = wp->w_next_match_id;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3716 wp->w_next_match_id++;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3717 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3718
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3719 // Build new match.
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3720 m = ALLOC_CLEAR_ONE(matchitem_T);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3721 m->id = id;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3722 m->priority = prio;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3723 m->pattern = pat == NULL ? NULL : vim_strsave(pat);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3724 m->hlg_id = hlg_id;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3725 m->match.regprog = regprog;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3726 m->match.rmm_ic = FALSE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3727 m->match.rmm_maxcol = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3728 # if defined(FEAT_CONCEAL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3729 m->conceal_char = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3730 if (conceal_char != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3731 m->conceal_char = (*mb_ptr2char)(conceal_char);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3732 # endif
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3733
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3734 // Set up position matches
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3735 if (pos_list != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3736 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3737 linenr_T toplnum = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3738 linenr_T botlnum = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3739 listitem_T *li;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3740 int i;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3741
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3742 for (i = 0, li = pos_list->lv_first; li != NULL && i < MAXPOSMATCH;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3743 i++, li = li->li_next)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3744 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3745 linenr_T lnum = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3746 colnr_T col = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3747 int len = 1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3748 list_T *subl;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3749 listitem_T *subli;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3750 int error = FALSE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3751
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3752 if (li->li_tv.v_type == VAR_LIST)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3753 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3754 subl = li->li_tv.vval.v_list;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3755 if (subl == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3756 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3757 subli = subl->lv_first;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3758 if (subli == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3759 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3760 lnum = tv_get_number_chk(&subli->li_tv, &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3761 if (error == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3762 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3763 if (lnum == 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3764 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3765 --i;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3766 continue;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3767 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3768 m->pos.pos[i].lnum = lnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3769 subli = subli->li_next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3770 if (subli != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3771 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3772 col = tv_get_number_chk(&subli->li_tv, &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3773 if (error == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3774 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3775 subli = subli->li_next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3776 if (subli != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3777 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3778 len = tv_get_number_chk(&subli->li_tv, &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3779 if (error == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3780 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3781 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3782 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3783 m->pos.pos[i].col = col;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3784 m->pos.pos[i].len = len;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3785 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3786 else if (li->li_tv.v_type == VAR_NUMBER)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3787 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3788 if (li->li_tv.vval.v_number == 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3789 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3790 --i;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3791 continue;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3792 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3793 m->pos.pos[i].lnum = li->li_tv.vval.v_number;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3794 m->pos.pos[i].col = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3795 m->pos.pos[i].len = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3796 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3797 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3798 {
18953
30c965c6f855 patch 8.2.0037: missing renamed message
Bram Moolenaar <Bram@vim.org>
parents: 18949
diff changeset
3799 emsg(_("E290: List or number required"));
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3800 goto fail;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3801 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3802 if (toplnum == 0 || lnum < toplnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3803 toplnum = lnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3804 if (botlnum == 0 || lnum >= botlnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3805 botlnum = lnum + 1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3806 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3807
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3808 // Calculate top and bottom lines for redrawing area
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3809 if (toplnum != 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3810 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3811 if (wp->w_buffer->b_mod_set)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3812 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3813 if (wp->w_buffer->b_mod_top > toplnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3814 wp->w_buffer->b_mod_top = toplnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3815 if (wp->w_buffer->b_mod_bot < botlnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3816 wp->w_buffer->b_mod_bot = botlnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3817 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3818 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3819 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3820 wp->w_buffer->b_mod_set = TRUE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3821 wp->w_buffer->b_mod_top = toplnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3822 wp->w_buffer->b_mod_bot = botlnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3823 wp->w_buffer->b_mod_xlines = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3824 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3825 m->pos.toplnum = toplnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3826 m->pos.botlnum = botlnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3827 rtype = VALID;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3828 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3829 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3830
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3831 // Insert new match. The match list is in ascending order with regard to
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3832 // the match priorities.
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3833 cur = wp->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3834 prev = cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3835 while (cur != NULL && prio >= cur->priority)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3836 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3837 prev = cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3838 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3839 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3840 if (cur == prev)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3841 wp->w_match_head = m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3842 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3843 prev->next = m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3844 m->next = cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3845
17486
bdf277d2d14c patch 8.1.1741: cleared/added match highlighting not updated in other window
Bram Moolenaar <Bram@vim.org>
parents: 17482
diff changeset
3846 redraw_win_later(wp, rtype);
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3847 return id;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3848
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3849 fail:
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3850 vim_free(m);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3851 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3852 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3853
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3854 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3855 * Delete match with ID 'id' in the match list of window 'wp'.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3856 * Print error messages if 'perr' is TRUE.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3857 */
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
3858 static int
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3859 match_delete(win_T *wp, int id, int perr)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3860 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3861 matchitem_T *cur = wp->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3862 matchitem_T *prev = cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3863 int rtype = SOME_VALID;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3864
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3865 if (id < 1)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3866 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3867 if (perr == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3868 semsg(_("E802: Invalid ID: %d (must be greater than or equal to 1)"),
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3869 id);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3870 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3871 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3872 while (cur != NULL && cur->id != id)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3873 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3874 prev = cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3875 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3876 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3877 if (cur == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3878 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3879 if (perr == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3880 semsg(_("E803: ID not found: %d"), id);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3881 return -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3882 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3883 if (cur == prev)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3884 wp->w_match_head = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3885 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3886 prev->next = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3887 vim_regfree(cur->match.regprog);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3888 vim_free(cur->pattern);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3889 if (cur->pos.toplnum != 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3890 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3891 if (wp->w_buffer->b_mod_set)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3892 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3893 if (wp->w_buffer->b_mod_top > cur->pos.toplnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3894 wp->w_buffer->b_mod_top = cur->pos.toplnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3895 if (wp->w_buffer->b_mod_bot < cur->pos.botlnum)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3896 wp->w_buffer->b_mod_bot = cur->pos.botlnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3897 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3898 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3899 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3900 wp->w_buffer->b_mod_set = TRUE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3901 wp->w_buffer->b_mod_top = cur->pos.toplnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3902 wp->w_buffer->b_mod_bot = cur->pos.botlnum;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3903 wp->w_buffer->b_mod_xlines = 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3904 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3905 rtype = VALID;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3906 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3907 vim_free(cur);
17482
6cf077f59152 patch 8.1.1739: deleted match highlighting not updated in other window
Bram Moolenaar <Bram@vim.org>
parents: 17474
diff changeset
3908 redraw_win_later(wp, rtype);
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3909 return 0;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3910 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3911
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3912 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3913 * Delete all matches in the match list of window 'wp'.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3914 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3915 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3916 clear_matches(win_T *wp)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3917 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3918 matchitem_T *m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3919
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3920 while (wp->w_match_head != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3921 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3922 m = wp->w_match_head->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3923 vim_regfree(wp->w_match_head->match.regprog);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3924 vim_free(wp->w_match_head->pattern);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3925 vim_free(wp->w_match_head);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3926 wp->w_match_head = m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3927 }
17486
bdf277d2d14c patch 8.1.1741: cleared/added match highlighting not updated in other window
Bram Moolenaar <Bram@vim.org>
parents: 17482
diff changeset
3928 redraw_win_later(wp, SOME_VALID);
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3929 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3930
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3931 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3932 * Get match from ID 'id' in window 'wp'.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3933 * Return NULL if match not found.
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3934 */
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
3935 static matchitem_T *
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3936 get_match(win_T *wp, int id)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3937 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3938 matchitem_T *cur = wp->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3939
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3940 while (cur != NULL && cur->id != id)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3941 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3942 return cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
3943 }
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3944
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3945 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3946 * Init for calling prepare_search_hl().
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3947 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3948 void
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3949 init_search_hl(win_T *wp, match_T *search_hl)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3950 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3951 matchitem_T *cur;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3952
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3953 // Setup for match and 'hlsearch' highlighting. Disable any previous
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3954 // match
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3955 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3956 while (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3957 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3958 cur->hl.rm = cur->match;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3959 if (cur->hlg_id == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3960 cur->hl.attr = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3961 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3962 cur->hl.attr = syn_id2attr(cur->hlg_id);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3963 cur->hl.buf = wp->w_buffer;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3964 cur->hl.lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3965 cur->hl.first_lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3966 # ifdef FEAT_RELTIME
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3967 // Set the time limit to 'redrawtime'.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3968 profile_setlimit(p_rdt, &(cur->hl.tm));
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3969 # endif
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3970 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3971 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3972 search_hl->buf = wp->w_buffer;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3973 search_hl->lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3974 search_hl->first_lnum = 0;
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3975 // time limit is set at the toplevel, for all windows
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3976 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3977
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3978 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3979 * If there is a match fill "shl" and return one.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3980 * Return zero otherwise.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3981 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3982 static int
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3983 next_search_hl_pos(
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3984 match_T *shl, // points to a match
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3985 linenr_T lnum,
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3986 posmatch_T *posmatch, // match positions
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
3987 colnr_T mincol) // minimal column for a match
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3988 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3989 int i;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3990 int found = -1;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3991
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3992 for (i = posmatch->cur; i < MAXPOSMATCH; i++)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3993 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3994 llpos_T *pos = &posmatch->pos[i];
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3995
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3996 if (pos->lnum == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3997 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3998 if (pos->len == 0 && pos->col < mincol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3999 continue;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4000 if (pos->lnum == lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4001 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4002 if (found >= 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4003 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4004 // if this match comes before the one at "found" then swap
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4005 // them
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4006 if (pos->col < posmatch->pos[found].col)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4007 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4008 llpos_T tmp = *pos;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4009
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4010 *pos = posmatch->pos[found];
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4011 posmatch->pos[found] = tmp;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4012 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4013 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4014 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4015 found = i;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4016 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4017 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4018 posmatch->cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4019 if (found >= 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4020 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4021 colnr_T start = posmatch->pos[found].col == 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4022 ? 0 : posmatch->pos[found].col - 1;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4023 colnr_T end = posmatch->pos[found].col == 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4024 ? MAXCOL : start + posmatch->pos[found].len;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4025
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4026 shl->lnum = lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4027 shl->rm.startpos[0].lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4028 shl->rm.startpos[0].col = start;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4029 shl->rm.endpos[0].lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4030 shl->rm.endpos[0].col = end;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4031 shl->is_addpos = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4032 posmatch->cur = found + 1;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4033 return 1;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4034 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4035 return 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4036 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4037
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4038 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4039 * Search for a next 'hlsearch' or match.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4040 * Uses shl->buf.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4041 * Sets shl->lnum and shl->rm contents.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4042 * Note: Assumes a previous match is always before "lnum", unless
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4043 * shl->lnum is zero.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4044 * Careful: Any pointers for buffer lines will become invalid.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4045 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4046 static void
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4047 next_search_hl(
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4048 win_T *win,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4049 match_T *search_hl,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4050 match_T *shl, // points to search_hl or a match
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4051 linenr_T lnum,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4052 colnr_T mincol, // minimal column for a match
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4053 matchitem_T *cur) // to retrieve match positions if any
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4054 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4055 linenr_T l;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4056 colnr_T matchcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4057 long nmatched;
18949
5c405689da3e patch 8.2.0035: saving and restoring called_emsg is clumsy
Bram Moolenaar <Bram@vim.org>
parents: 18806
diff changeset
4058 int called_emsg_before = called_emsg;
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4059
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4060 // for :{range}s/pat only highlight inside the range
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4061 if (lnum < search_first_line || lnum > search_last_line)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4062 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4063 shl->lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4064 return;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4065 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4066
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4067 if (shl->lnum != 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4068 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4069 // Check for three situations:
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4070 // 1. If the "lnum" is below a previous match, start a new search.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4071 // 2. If the previous match includes "mincol", use it.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4072 // 3. Continue after the previous match.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4073 l = shl->lnum + shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4074 if (lnum > l)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4075 shl->lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4076 else if (lnum < l || shl->rm.endpos[0].col > mincol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4077 return;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4078 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4079
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4080 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4081 * Repeat searching for a match until one is found that includes "mincol"
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4082 * or none is found in this line.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4083 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4084 for (;;)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4085 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4086 # ifdef FEAT_RELTIME
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4087 // Stop searching after passing the time limit.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4088 if (profile_passed_limit(&(shl->tm)))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4089 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4090 shl->lnum = 0; // no match found in time
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4091 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4092 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4093 # endif
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4094 // Three situations:
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4095 // 1. No useful previous match: search from start of line.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4096 // 2. Not Vi compatible or empty match: continue at next character.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4097 // Break the loop if this is beyond the end of the line.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4098 // 3. Vi compatible searching: continue at end of previous match.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4099 if (shl->lnum == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4100 matchcol = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4101 else if (vim_strchr(p_cpo, CPO_SEARCH) == NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4102 || (shl->rm.endpos[0].lnum == 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4103 && shl->rm.endpos[0].col <= shl->rm.startpos[0].col))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4104 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4105 char_u *ml;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4106
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4107 matchcol = shl->rm.startpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4108 ml = ml_get_buf(shl->buf, lnum, FALSE) + matchcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4109 if (*ml == NUL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4110 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4111 ++matchcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4112 shl->lnum = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4113 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4114 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4115 if (has_mbyte)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4116 matchcol += mb_ptr2len(ml);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4117 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4118 ++matchcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4119 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4120 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4121 matchcol = shl->rm.endpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4122
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4123 shl->lnum = lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4124 if (shl->rm.regprog != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4125 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4126 // Remember whether shl->rm is using a copy of the regprog in
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4127 // cur->match.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4128 int regprog_is_copy = (shl != search_hl && cur != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4129 && shl == &cur->hl
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4130 && cur->match.regprog == cur->hl.rm.regprog);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4131 int timed_out = FALSE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4132
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4133 nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4134 matchcol,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4135 #ifdef FEAT_RELTIME
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4136 &(shl->tm), &timed_out
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4137 #else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4138 NULL, NULL
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4139 #endif
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4140 );
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4141 // Copy the regprog, in case it got freed and recompiled.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4142 if (regprog_is_copy)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4143 cur->match.regprog = cur->hl.rm.regprog;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4144
18949
5c405689da3e patch 8.2.0035: saving and restoring called_emsg is clumsy
Bram Moolenaar <Bram@vim.org>
parents: 18806
diff changeset
4145 if (called_emsg > called_emsg_before || got_int || timed_out)
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4146 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4147 // Error while handling regexp: stop using this regexp.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4148 if (shl == search_hl)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4149 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4150 // don't free regprog in the match list, it's a copy
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4151 vim_regfree(shl->rm.regprog);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4152 set_no_hlsearch(TRUE);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4153 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4154 shl->rm.regprog = NULL;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4155 shl->lnum = 0;
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4156 got_int = FALSE; // avoid the "Type :quit to exit Vim" message
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4157 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4158 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4159 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4160 else if (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4161 nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4162 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4163 nmatched = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4164 if (nmatched == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4165 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4166 shl->lnum = 0; // no match found
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4167 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4168 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4169 if (shl->rm.startpos[0].lnum > 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4170 || shl->rm.startpos[0].col >= mincol
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4171 || nmatched > 1
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4172 || shl->rm.endpos[0].col > mincol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4173 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4174 shl->lnum += shl->rm.startpos[0].lnum;
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4175 break; // useful match found
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4176 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4177 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4178 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4179
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4180 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4181 * Advance to the match in window "wp" line "lnum" or past it.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4182 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4183 void
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4184 prepare_search_hl(win_T *wp, match_T *search_hl, linenr_T lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4185 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4186 matchitem_T *cur; // points to the match list
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4187 match_T *shl; // points to search_hl or a match
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4188 int shl_flag; // flag to indicate whether search_hl
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4189 // has been processed or not
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4190 int pos_inprogress; // marks that position match search is
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4191 // in progress
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4192 int n;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4193
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4194 // When using a multi-line pattern, start searching at the top
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4195 // of the window or just after a closed fold.
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4196 // Do this both for search_hl and the match list.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4197 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4198 shl_flag = WIN_IS_POPUP(wp); // skip search_hl in a popup window
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4199 while (cur != NULL || shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4200 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4201 if (shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4202 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4203 shl = search_hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4204 shl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4205 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4206 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4207 shl = &cur->hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4208 if (shl->rm.regprog != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4209 && shl->lnum == 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4210 && re_multiline(shl->rm.regprog))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4211 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4212 if (shl->first_lnum == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4213 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4214 # ifdef FEAT_FOLDING
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4215 for (shl->first_lnum = lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4216 shl->first_lnum > wp->w_topline; --shl->first_lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4217 if (hasFoldingWin(wp, shl->first_lnum - 1,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4218 NULL, NULL, TRUE, NULL))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4219 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4220 # else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4221 shl->first_lnum = wp->w_topline;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4222 # endif
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4223 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4224 if (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4225 cur->pos.cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4226 pos_inprogress = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4227 n = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4228 while (shl->first_lnum < lnum && (shl->rm.regprog != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4229 || (cur != NULL && pos_inprogress)))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4230 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4231 next_search_hl(wp, search_hl, shl, shl->first_lnum, (colnr_T)n,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4232 shl == search_hl ? NULL : cur);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4233 pos_inprogress = cur == NULL || cur->pos.cur == 0
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4234 ? FALSE : TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4235 if (shl->lnum != 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4236 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4237 shl->first_lnum = shl->lnum
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4238 + shl->rm.endpos[0].lnum
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4239 - shl->rm.startpos[0].lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4240 n = shl->rm.endpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4241 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4242 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4243 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4244 ++shl->first_lnum;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4245 n = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4246 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4247 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4248 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4249 if (shl != search_hl && cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4250 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4251 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4252 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4253
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4254 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4255 * Prepare for 'hlsearch' and match highlighting in one window line.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4256 * Return TRUE if there is such highlighting and set "search_attr" to the
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4257 * current highlight attribute.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4258 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4259 int
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4260 prepare_search_hl_line(
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4261 win_T *wp,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4262 linenr_T lnum,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4263 colnr_T mincol,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4264 char_u **line,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4265 match_T *search_hl,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4266 int *search_attr)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4267 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4268 matchitem_T *cur; // points to the match list
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4269 match_T *shl; // points to search_hl or a match
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4270 int shl_flag; // flag to indicate whether search_hl
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4271 // has been processed or not
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4272 int area_highlighting = FALSE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4273
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4274 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4275 * Handle highlighting the last used search pattern and matches.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4276 * Do this for both search_hl and the match list.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4277 * Do not use search_hl in a popup window.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4278 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4279 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4280 shl_flag = WIN_IS_POPUP(wp);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4281 while (cur != NULL || shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4282 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4283 if (shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4284 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4285 shl = search_hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4286 shl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4287 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4288 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4289 shl = &cur->hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4290 shl->startcol = MAXCOL;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4291 shl->endcol = MAXCOL;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4292 shl->attr_cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4293 shl->is_addpos = FALSE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4294 if (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4295 cur->pos.cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4296 next_search_hl(wp, search_hl, shl, lnum, mincol,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4297 shl == search_hl ? NULL : cur);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4298
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4299 // Need to get the line again, a multi-line regexp may have made it
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4300 // invalid.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4301 *line = ml_get_buf(wp->w_buffer, lnum, FALSE);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4302
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4303 if (shl->lnum != 0 && shl->lnum <= lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4304 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4305 if (shl->lnum == lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4306 shl->startcol = shl->rm.startpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4307 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4308 shl->startcol = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4309 if (lnum == shl->lnum + shl->rm.endpos[0].lnum
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4310 - shl->rm.startpos[0].lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4311 shl->endcol = shl->rm.endpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4312 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4313 shl->endcol = MAXCOL;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4314 // Highlight one character for an empty match.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4315 if (shl->startcol == shl->endcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4316 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4317 if (has_mbyte && (*line)[shl->endcol] != NUL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4318 shl->endcol += (*mb_ptr2len)((*line) + shl->endcol);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4319 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4320 ++shl->endcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4321 }
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4322 if ((long)shl->startcol < mincol) // match at leftcol
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4323 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4324 shl->attr_cur = shl->attr;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4325 *search_attr = shl->attr;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4326 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4327 area_highlighting = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4328 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4329 if (shl != search_hl && cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4330 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4331 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4332 return area_highlighting;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4333 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4334
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4335 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4336 * For a position in a line: Check for start/end of 'hlsearch' and other
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4337 * matches.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4338 * After end, check for start/end of next match.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4339 * When another match, have to check for start again.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4340 * Watch out for matching an empty string!
18498
9e6d5a4abb1c patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents: 18301
diff changeset
4341 * Return the updated search_attr.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4342 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4343 int
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4344 update_search_hl(
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4345 win_T *wp,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4346 linenr_T lnum,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4347 colnr_T col,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4348 char_u **line,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4349 match_T *search_hl,
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4350 int *has_match_conc UNUSED,
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4351 int *match_conc UNUSED,
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4352 int did_line_attr,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4353 int lcs_eol_one)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4354 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4355 matchitem_T *cur; // points to the match list
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4356 match_T *shl; // points to search_hl or a match
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4357 int shl_flag; // flag to indicate whether search_hl
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4358 // has been processed or not
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4359 int pos_inprogress; // marks that position match search is in
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4360 // progress
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4361 int search_attr = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4362
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4363
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4364 // Do this for 'search_hl' and the match list (ordered by priority).
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4365 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4366 shl_flag = WIN_IS_POPUP(wp);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4367 while (cur != NULL || shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4368 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4369 if (shl_flag == FALSE
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4370 && ((cur != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4371 && cur->priority > SEARCH_HL_PRIORITY)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4372 || cur == NULL))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4373 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4374 shl = search_hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4375 shl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4376 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4377 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4378 shl = &cur->hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4379 if (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4380 cur->pos.cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4381 pos_inprogress = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4382 while (shl->rm.regprog != NULL || (cur != NULL && pos_inprogress))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4383 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4384 if (shl->startcol != MAXCOL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4385 && col >= shl->startcol
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4386 && col < shl->endcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4387 {
18251
c8a53c0daeed patch 8.1.2120: some MB_ macros are more complicated than necessary
Bram Moolenaar <Bram@vim.org>
parents: 18068
diff changeset
4388 int next_col = col + mb_ptr2len(*line + col);
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4389
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4390 if (shl->endcol < next_col)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4391 shl->endcol = next_col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4392 shl->attr_cur = shl->attr;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4393 # ifdef FEAT_CONCEAL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4394 // Match with the "Conceal" group results in hiding
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4395 // the match.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4396 if (cur != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4397 && shl != search_hl
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4398 && syn_name2id((char_u *)"Conceal") == cur->hlg_id)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4399 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4400 *has_match_conc = col == shl->startcol ? 2 : 1;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4401 *match_conc = cur->conceal_char;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4402 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4403 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4404 *has_match_conc = *match_conc = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4405 # endif
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4406 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4407 else if (col == shl->endcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4408 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4409 shl->attr_cur = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4410 next_search_hl(wp, search_hl, shl, lnum, col,
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4411 shl == search_hl ? NULL : cur);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4412 pos_inprogress = !(cur == NULL || cur->pos.cur == 0);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4413
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4414 // Need to get the line again, a multi-line regexp may have
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4415 // made it invalid.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4416 *line = ml_get_buf(wp->w_buffer, lnum, FALSE);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4417
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4418 if (shl->lnum == lnum)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4419 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4420 shl->startcol = shl->rm.startpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4421 if (shl->rm.endpos[0].lnum == 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4422 shl->endcol = shl->rm.endpos[0].col;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4423 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4424 shl->endcol = MAXCOL;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4425
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4426 if (shl->startcol == shl->endcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4427 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4428 // highlight empty match, try again after
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4429 // it
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4430 if (has_mbyte)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4431 shl->endcol += (*mb_ptr2len)(*line + shl->endcol);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4432 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4433 ++shl->endcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4434 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4435
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4436 // Loop to check if the match starts at the
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4437 // current position
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4438 continue;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4439 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4440 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4441 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4442 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4443 if (shl != search_hl && cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4444 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4445 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4446
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4447 // Use attributes from match with highest priority among 'search_hl' and
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4448 // the match list.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4449 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4450 shl_flag = WIN_IS_POPUP(wp);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4451 while (cur != NULL || shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4452 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4453 if (shl_flag == FALSE
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4454 && ((cur != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4455 && cur->priority > SEARCH_HL_PRIORITY)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4456 || cur == NULL))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4457 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4458 shl = search_hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4459 shl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4460 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4461 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4462 shl = &cur->hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4463 if (shl->attr_cur != 0)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4464 search_attr = shl->attr_cur;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4465 if (shl != search_hl && cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4466 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4467 }
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4468 // Only highlight one character after the last column.
17490
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4469 if (*(*line + col) == NUL && (did_line_attr >= 1
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4470 || (wp->w_p_list && lcs_eol_one == -1)))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4471 search_attr = 0;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4472 return search_attr;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4473 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4474
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4475 int
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4476 get_prevcol_hl_flag(win_T *wp, match_T *search_hl, long curcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4477 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4478 long prevcol = curcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4479 int prevcol_hl_flag = FALSE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4480 matchitem_T *cur; // points to the match list
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4481
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4482 // we're not really at that column when skipping some text
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4483 if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4484 ++prevcol;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4485
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4486 if (!search_hl->is_addpos && prevcol == (long)search_hl->startcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4487 prevcol_hl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4488 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4489 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4490 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4491 while (cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4492 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4493 if (!cur->hl.is_addpos && prevcol == (long)cur->hl.startcol)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4494 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4495 prevcol_hl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4496 break;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4497 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4498 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4499 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4500 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4501 return prevcol_hl_flag;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4502 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4503
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4504 /*
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4505 * Get highlighting for the char after the text in "char_attr" from 'hlsearch'
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4506 * or match highlighting.
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4507 */
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4508 void
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4509 get_search_match_hl(win_T *wp, match_T *search_hl, long col, int *char_attr)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4510 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4511 matchitem_T *cur; // points to the match list
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4512 match_T *shl; // points to search_hl or a match
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4513 int shl_flag; // flag to indicate whether search_hl
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4514 // has been processed or not
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4515
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4516 cur = wp->w_match_head;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4517 shl_flag = WIN_IS_POPUP(wp);
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4518 while (cur != NULL || shl_flag == FALSE)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4519 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4520 if (shl_flag == FALSE
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4521 && ((cur != NULL
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4522 && cur->priority > SEARCH_HL_PRIORITY)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4523 || cur == NULL))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4524 {
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4525 shl = search_hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4526 shl_flag = TRUE;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4527 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4528 else
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4529 shl = &cur->hl;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4530 if (col - 1 == (long)shl->startcol
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4531 && (shl == search_hl || !shl->is_addpos))
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4532 *char_attr = shl->attr;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4533 if (shl != search_hl && cur != NULL)
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4534 cur = cur->next;
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4535 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4536 }
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4537
367ef00c6258 patch 8.1.1743: 'hlsearch' and match highlighting in the wrong place
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
4538 #endif // FEAT_SEARCH_EXTRA
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4539
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4540 #if defined(FEAT_EVAL) || defined(PROTO)
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4541 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4542 static int
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4543 matchadd_dict_arg(typval_T *tv, char_u **conceal_char, win_T **win)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4544 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4545 dictitem_T *di;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4546
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4547 if (tv->v_type != VAR_DICT)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4548 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4549 emsg(_(e_dictreq));
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4550 return FAIL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4551 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4552
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4553 if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4554 *conceal_char = dict_get_string(tv->vval.v_dict,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4555 (char_u *)"conceal", FALSE);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4556
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4557 if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4558 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4559 *win = find_win_by_nr_or_id(&di->di_tv);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4560 if (*win == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4561 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4562 emsg(_(e_invalwindow));
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4563 return FAIL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4564 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4565 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4566
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4567 return OK;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4568 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4569 #endif
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4570
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4571 /*
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4572 * "clearmatches()" function
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4573 */
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4574 void
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4575 f_clearmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4576 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4577 #ifdef FEAT_SEARCH_EXTRA
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4578 win_T *win = get_optional_window(argvars, 0);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4579
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4580 if (win != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4581 clear_matches(win);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4582 #endif
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4583 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4584
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4585 /*
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4586 * "getmatches()" function
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4587 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4588 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4589 f_getmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4590 {
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4591 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4592 dict_T *dict;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4593 matchitem_T *cur;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4594 int i;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4595 win_T *win = get_optional_window(argvars, 0);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4596
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4597 if (rettv_list_alloc(rettv) == FAIL || win == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4598 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4599
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4600 cur = win->w_match_head;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4601 while (cur != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4602 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4603 dict = dict_alloc();
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4604 if (dict == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4605 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4606 if (cur->match.regprog == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4607 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4608 // match added with matchaddpos()
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4609 for (i = 0; i < MAXPOSMATCH; ++i)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4610 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4611 llpos_T *llpos;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4612 char buf[30]; // use 30 to avoid compiler warning
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4613 list_T *l;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4614
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4615 llpos = &cur->pos.pos[i];
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4616 if (llpos->lnum == 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4617 break;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4618 l = list_alloc();
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4619 if (l == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4620 break;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4621 list_append_number(l, (varnumber_T)llpos->lnum);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4622 if (llpos->col > 0)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4623 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4624 list_append_number(l, (varnumber_T)llpos->col);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4625 list_append_number(l, (varnumber_T)llpos->len);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4626 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4627 sprintf(buf, "pos%d", i + 1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4628 dict_add_list(dict, buf, l);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4629 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4630 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4631 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4632 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4633 dict_add_string(dict, "pattern", cur->pattern);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4634 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4635 dict_add_string(dict, "group", syn_id2name(cur->hlg_id));
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4636 dict_add_number(dict, "priority", (long)cur->priority);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4637 dict_add_number(dict, "id", (long)cur->id);
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4638 # if defined(FEAT_CONCEAL)
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4639 if (cur->conceal_char)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4640 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4641 char_u buf[MB_MAXBYTES + 1];
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4642
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4643 buf[(*mb_char2bytes)((int)cur->conceal_char, buf)] = NUL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4644 dict_add_string(dict, "conceal", (char_u *)&buf);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4645 }
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4646 # endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4647 list_append_dict(rettv->vval.v_list, dict);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4648 cur = cur->next;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4649 }
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4650 # endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4651 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4652
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4653 /*
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4654 * "setmatches()" function
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4655 */
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4656 void
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4657 f_setmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4658 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4659 #ifdef FEAT_SEARCH_EXTRA
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4660 list_T *l;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4661 listitem_T *li;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4662 dict_T *d;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4663 list_T *s = NULL;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4664 win_T *win = get_optional_window(argvars, 1);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4665
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4666 rettv->vval.v_number = -1;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4667 if (argvars[0].v_type != VAR_LIST)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4668 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4669 emsg(_(e_listreq));
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4670 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4671 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4672 if (win == NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4673 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4674
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4675 if ((l = argvars[0].vval.v_list) != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4676 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4677 // To some extent make sure that we are dealing with a list from
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4678 // "getmatches()".
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4679 li = l->lv_first;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4680 while (li != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4681 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4682 if (li->li_tv.v_type != VAR_DICT
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4683 || (d = li->li_tv.vval.v_dict) == NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4684 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4685 emsg(_(e_invarg));
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4686 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4687 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4688 if (!(dict_find(d, (char_u *)"group", -1) != NULL
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4689 && (dict_find(d, (char_u *)"pattern", -1) != NULL
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4690 || dict_find(d, (char_u *)"pos1", -1) != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4691 && dict_find(d, (char_u *)"priority", -1) != NULL
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4692 && dict_find(d, (char_u *)"id", -1) != NULL))
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4693 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4694 emsg(_(e_invarg));
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4695 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4696 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4697 li = li->li_next;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4698 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4699
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4700 clear_matches(win);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4701 li = l->lv_first;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4702 while (li != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4703 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4704 int i = 0;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4705 char buf[30]; // use 30 to avoid compiler warning
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4706 dictitem_T *di;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4707 char_u *group;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4708 int priority;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4709 int id;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4710 char_u *conceal;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4711
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4712 d = li->li_tv.vval.v_dict;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4713 if (dict_find(d, (char_u *)"pattern", -1) == NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4714 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4715 if (s == NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4716 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4717 s = list_alloc();
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4718 if (s == NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4719 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4720 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4721
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4722 // match from matchaddpos()
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4723 for (i = 1; i < 9; i++)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4724 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4725 sprintf((char *)buf, (char *)"pos%d", i);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4726 if ((di = dict_find(d, (char_u *)buf, -1)) != NULL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4727 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4728 if (di->di_tv.v_type != VAR_LIST)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4729 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4730
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4731 list_append_tv(s, &di->di_tv);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4732 s->lv_refcount++;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4733 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4734 else
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4735 break;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4736 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4737 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4738
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4739 group = dict_get_string(d, (char_u *)"group", TRUE);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4740 priority = (int)dict_get_number(d, (char_u *)"priority");
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4741 id = (int)dict_get_number(d, (char_u *)"id");
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4742 conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4743 ? dict_get_string(d, (char_u *)"conceal", TRUE)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4744 : NULL;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4745 if (i == 0)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4746 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4747 match_add(win, group,
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4748 dict_get_string(d, (char_u *)"pattern", FALSE),
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4749 priority, id, NULL, conceal);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4750 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4751 else
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4752 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4753 match_add(win, group, NULL, priority, id, s, conceal);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4754 list_unref(s);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4755 s = NULL;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4756 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4757 vim_free(group);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4758 vim_free(conceal);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4759
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4760 li = li->li_next;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4761 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4762 rettv->vval.v_number = 0;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4763 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4764 #endif
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4765 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4766
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4767 /*
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4768 * "matchadd()" function
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4769 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4770 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4771 f_matchadd(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4772 {
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4773 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4774 char_u buf[NUMBUFLEN];
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4775 char_u *grp = tv_get_string_buf_chk(&argvars[0], buf); // group
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4776 char_u *pat = tv_get_string_buf_chk(&argvars[1], buf); // pattern
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4777 int prio = 10; // default priority
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4778 int id = -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4779 int error = FALSE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4780 char_u *conceal_char = NULL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4781 win_T *win = curwin;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4782
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4783 rettv->vval.v_number = -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4784
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4785 if (grp == NULL || pat == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4786 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4787 if (argvars[2].v_type != VAR_UNKNOWN)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4788 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4789 prio = (int)tv_get_number_chk(&argvars[2], &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4790 if (argvars[3].v_type != VAR_UNKNOWN)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4791 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4792 id = (int)tv_get_number_chk(&argvars[3], &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4793 if (argvars[4].v_type != VAR_UNKNOWN
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4794 && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4795 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4796 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4797 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4798 if (error == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4799 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4800 if (id >= 1 && id <= 3)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4801 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4802 semsg(_("E798: ID is reserved for \":match\": %d"), id);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4803 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4804 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4805
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4806 rettv->vval.v_number = match_add(win, grp, pat, prio, id, NULL,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4807 conceal_char);
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4808 # endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4809 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4810
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4811 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4812 * "matchaddpos()" function
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4813 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4814 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4815 f_matchaddpos(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4816 {
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4817 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4818 char_u buf[NUMBUFLEN];
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4819 char_u *group;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4820 int prio = 10;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4821 int id = -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4822 int error = FALSE;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4823 list_T *l;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4824 char_u *conceal_char = NULL;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4825 win_T *win = curwin;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4826
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4827 rettv->vval.v_number = -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4828
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4829 group = tv_get_string_buf_chk(&argvars[0], buf);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4830 if (group == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4831 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4832
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4833 if (argvars[1].v_type != VAR_LIST)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4834 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4835 semsg(_(e_listarg), "matchaddpos()");
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4836 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4837 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4838 l = argvars[1].vval.v_list;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4839 if (l == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4840 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4841
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4842 if (argvars[2].v_type != VAR_UNKNOWN)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4843 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4844 prio = (int)tv_get_number_chk(&argvars[2], &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4845 if (argvars[3].v_type != VAR_UNKNOWN)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4846 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4847 id = (int)tv_get_number_chk(&argvars[3], &error);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4848
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4849 if (argvars[4].v_type != VAR_UNKNOWN
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4850 && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4851 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4852 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4853 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4854 if (error == TRUE)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4855 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4856
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4857 // id == 3 is ok because matchaddpos() is supposed to substitute :3match
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4858 if (id == 1 || id == 2)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4859 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4860 semsg(_("E798: ID is reserved for \":match\": %d"), id);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4861 return;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4862 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4863
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4864 rettv->vval.v_number = match_add(win, group, NULL, prio, id, l,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4865 conceal_char);
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4866 # endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4867 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4868
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4869 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4870 * "matcharg()" function
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4871 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4872 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4873 f_matcharg(typval_T *argvars UNUSED, typval_T *rettv)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4874 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4875 if (rettv_list_alloc(rettv) == OK)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4876 {
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4877 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4878 int id = (int)tv_get_number(&argvars[0]);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4879 matchitem_T *m;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4880
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4881 if (id >= 1 && id <= 3)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4882 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4883 if ((m = (matchitem_T *)get_match(curwin, id)) != NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4884 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4885 list_append_string(rettv->vval.v_list,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4886 syn_id2name(m->hlg_id), -1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4887 list_append_string(rettv->vval.v_list, m->pattern, -1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4888 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4889 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4890 {
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4891 list_append_string(rettv->vval.v_list, NULL, -1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4892 list_append_string(rettv->vval.v_list, NULL, -1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4893 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4894 }
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4895 # endif
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4896 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4897 }
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4898
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4899 /*
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4900 * "matchdelete()" function
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4901 */
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4902 void
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4903 f_matchdelete(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4904 {
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4905 # ifdef FEAT_SEARCH_EXTRA
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4906 win_T *win = get_optional_window(argvars, 1);
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4907
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4908 if (win == NULL)
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4909 rettv->vval.v_number = -1;
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4910 else
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4911 rettv->vval.v_number = match_delete(win,
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4912 (int)tv_get_number(&argvars[0]), TRUE);
17474
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4913 # endif
f8c197962c1e patch 8.1.1735: can't build with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 17472
diff changeset
4914 }
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
4915 #endif
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4916
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4917 #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4918 /*
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4919 * ":[N]match {group} {pattern}"
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4920 * Sets nextcmd to the start of the next command, if any. Also called when
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4921 * skipping commands to find the next command.
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4922 */
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4923 void
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4924 ex_match(exarg_T *eap)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4925 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4926 char_u *p;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4927 char_u *g = NULL;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4928 char_u *end;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4929 int c;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4930 int id;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4931
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4932 if (eap->line2 <= 3)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4933 id = eap->line2;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4934 else
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4935 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4936 emsg(_(e_invcmd));
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4937 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4938 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4939
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4940 // First clear any old pattern.
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4941 if (!eap->skip)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4942 match_delete(curwin, id, FALSE);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4943
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4944 if (ends_excmd(*eap->arg))
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4945 end = eap->arg;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4946 else if ((STRNICMP(eap->arg, "none", 4) == 0
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4947 && (VIM_ISWHITE(eap->arg[4]) || ends_excmd(eap->arg[4]))))
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4948 end = eap->arg + 4;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4949 else
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4950 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4951 p = skiptowhite(eap->arg);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4952 if (!eap->skip)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4953 g = vim_strnsave(eap->arg, (int)(p - eap->arg));
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4954 p = skipwhite(p);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4955 if (*p == NUL)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4956 {
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
4957 // There must be two arguments.
17488
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4958 vim_free(g);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4959 semsg(_(e_invarg2), eap->arg);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4960 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4961 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4962 end = skip_regexp(p + 1, *p, TRUE, NULL);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4963 if (!eap->skip)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4964 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4965 if (*end != NUL && !ends_excmd(*skipwhite(end + 1)))
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4966 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4967 vim_free(g);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4968 eap->errmsg = e_trailing;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4969 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4970 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4971 if (*end != *p)
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4972 {
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4973 vim_free(g);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4974 semsg(_(e_invarg2), p);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4975 return;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4976 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4977
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4978 c = *end;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4979 *end = NUL;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4980 match_add(curwin, g, p + 1, 10, id, NULL, NULL);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4981 vim_free(g);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4982 *end = c;
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4983 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4984 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4985 eap->nextcmd = find_nextcmd(end);
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4986 }
bba80d61ea73 patch 8.1.1742: still some match functions in evalfunc.c
Bram Moolenaar <Bram@vim.org>
parents: 17486
diff changeset
4987 #endif