1#ifndef DEFINE_FUNC_ATTRIBUTES
2# define DEFINE_FUNC_ATTRIBUTES
3#endif
4#include "nvim/func_attr.h"
5#undef DEFINE_FUNC_ATTRIBUTES
6static inline struct hl_group *HL_TABLE(void);
7static void clear_syn_state(synstate_T *p);
8static void clear_current_state(void);
9static void syn_sync(win_T *wp, linenr_T start_lnum, synstate_T *last_valid);
10static void save_chartab(char_u *chartab);
11static void restore_chartab(char_u *chartab);
12static int syn_match_linecont(linenr_T lnum);
13static void syn_start_line(void);
14static void syn_update_ends(int startofline);
15static void syn_stack_free_block(synblock_T *block);
16static void syn_stack_alloc(void);
17static void syn_stack_apply_changes_block(synblock_T *block, buf_T *buf);
18static int syn_stack_cleanup(void);
19static void syn_stack_free_entry(synblock_T *block, synstate_T *p);
20static synstate_T *syn_stack_find_entry(linenr_T lnum);
21static synstate_T *store_current_state(void);
22static void load_current_state(synstate_T *from);
23static int syn_stack_equal(synstate_T *sp);
24static void invalidate_current_state(void);
25static void validate_current_state(void);
26static _Bool syn_finish_line(const _Bool syncing );
27static int syn_current_attr(const _Bool syncing, const _Bool displaying, _Bool *const can_spell, const _Bool keep_state );
28static int did_match_already(int idx, garray_T *gap);
29static stateitem_T *push_next_match(void);
30static void check_state_ends(void);
31static void update_si_attr(int idx);
32static void check_keepend(void);
33static void update_si_end(stateitem_T *sip, int startcol, int force );
34static void push_current_state(int idx);
35static void pop_current_state(void);
36static void find_endpos(int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_endpos, long *flagsp, lpos_T *end_endpos, int *end_idx, reg_extmatch_T *start_ext );
37static void limit_pos(lpos_T *pos, lpos_T *limit);
38static void limit_pos_zero(lpos_T *pos, lpos_T *limit);
39static void syn_add_end_off(lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra );
40static void syn_add_start_off(lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra );
41static char_u *syn_getcurline(void);
42static int syn_regexec(regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st);
43static int check_keyword_id(char_u *const line, const int startcol, int *const endcolp, long *const flagsp, int16_t **const next_listp, stateitem_T *const cur_si, int *const ccharp );
44static keyentry_T *match_keyword(char_u *keyword, hashtab_T *ht, stateitem_T *cur_si);
45static void syn_cmd_conceal(exarg_T *eap, int syncing);
46static void syn_cmd_case(exarg_T *eap, int syncing);
47static void syn_cmd_spell(exarg_T *eap, int syncing);
48static void syn_cmd_iskeyword(exarg_T *eap, int syncing);
49static void syntax_sync_clear(void);
50static void syn_remove_pattern(synblock_T *block, int idx);
51static void syn_clear_pattern(synblock_T *block, int i);
52static void syn_clear_cluster(synblock_T *block, int i);
53static void syn_cmd_clear(exarg_T *eap, int syncing);
54static void syn_clear_one(const int id, const _Bool syncing);
55static void syn_cmd_on(exarg_T *eap, int syncing);
56static void syn_cmd_enable(exarg_T *eap, int syncing);
57static void syn_cmd_reset(exarg_T *eap, int syncing);
58static void syn_cmd_manual(exarg_T *eap, int syncing);
59static void syn_cmd_off(exarg_T *eap, int syncing);
60static void syn_cmd_onoff(exarg_T *eap, char *name) FUNC_ATTR_NONNULL_ALL;
61static void syn_cmd_list(exarg_T *eap, int syncing );
62static void syn_lines_msg(void);
63static void syn_match_msg(void);
64static void syn_list_one(const int id, const _Bool syncing, const _Bool link_only );
65static void syn_list_flags(struct name_list *nlist, int flags, int attr);
66static void syn_list_cluster(int id);
67static void put_id_list(const char *const name, const int16_t *const list, const int attr);
68static void put_pattern(const char *const s, const int c, const synpat_T *const spp, const int attr);
69static _Bool syn_list_keywords(const int id, const hashtab_T *const ht, _Bool did_header, const int attr );
70static void syn_clear_keyword(int id, hashtab_T *ht);
71static void clear_keywtab(hashtab_T *ht);
72static void add_keyword(char_u *const name, const int id, const int flags, int16_t *const cont_in_list, int16_t *const next_list, const int conceal_char);
73static char_u *get_group_name(char_u *arg, char_u **name_end );
74static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt, int *conceal_char, int skip );
75static void syn_incl_toplevel(int id, int *flagsp);
76static void syn_cmd_include(exarg_T *eap, int syncing);
77static void syn_cmd_keyword(exarg_T *eap, int syncing);
78static void syn_cmd_match(exarg_T *eap, int syncing );
79static void syn_cmd_region(exarg_T *eap, int syncing );
80static int syn_compare_stub(const void *const v1, const void *const v2);
81static void syn_combine_list(int16_t **const clstr1, int16_t **const clstr2, const int list_op);
82static int syn_scl_name2id(char_u *name);
83static int syn_scl_namen2id(char_u *linep, int len);
84static int syn_check_cluster(char_u *pp, int len);
85static int syn_add_cluster(char_u *name);
86static void syn_cmd_cluster(exarg_T *eap, int syncing);
87static void init_syn_patterns(void);
88static char_u *get_syn_pattern(char_u *arg, synpat_T *ci);
89static void syn_cmd_sync(exarg_T *eap, int syncing);
90static int get_id_list(char_u **const arg, const int keylen, int16_t **const list, const _Bool skip );
91static int16_t *copy_id_list(const int16_t *const list);
92static int in_id_list(stateitem_T *cur_si, int16_t *list, struct sp_syn *ssp, int contained );
93static void syn_clear_time(syn_time_T *st);
94static void syntime_clear(void);
95static int syn_compare_syntime(const void *v1, const void *v2);
96static void syntime_report(void);
97static int hl_has_settings(int idx, int check_link);
98static void highlight_clear(int idx);
99static void highlight_list_one(const int id);
100static _Bool highlight_list_arg(const int id, _Bool didh, const int type, int iarg, char_u *const sarg, const char *const name);
101static _Bool syn_list_header(const _Bool did_header, const int outlen, const int id, _Bool force_newline);
102static void set_hl_attr(int idx);
103static int syn_add_group(char_u *name);
104static void syn_unadd_group(void);
105static void combine_stl_hlt(int id, int id_S, int id_alt, int hlcnt, int i, int hlf, int *table) FUNC_ATTR_NONNULL_ALL;
106static void highlight_list(void);
107static void highlight_list_two(int cnt, int attr);
108#include "nvim/func_attr.h"
109