Add automatic generation of headers

- The 'stripdecls.py' script replaces declarations in all headers by includes to
  generated headers.
  `ag '#\s*if(?!ndef NEOVIM_).*((?!#\s*endif).*\n)*#ifdef INCLUDE_GENERATED'`
  was used for this.
- Add and integrate gendeclarations.lua into the build system to generate the
  required includes.
- Add -Wno-unused-function
- Made a bunch of old-style definitions ANSI

This adds a requirement: all type and structure definitions must be present
before INCLUDE_GENERATED_DECLARATIONS-protected include.

Warning: mch_expandpath (path.h.generated.h) was moved manually. So far it is
the only exception.
This commit is contained in:
ZyX
2014-05-10 17:24:13 +04:00
committed by Thiago de Arruda
parent 880957ad4e
commit 70929f7e16
154 changed files with 2190 additions and 6184 deletions

View File

@@ -81,6 +81,16 @@ static garray_T highlight_ga; /* highlight groups for 'highlight' option */
#define MAX_HL_ID 20000 /* maximum value for a highlight ID. */
/* different types of offsets that are possible */
#define SPO_MS_OFF 0 /* match start offset */
#define SPO_ME_OFF 1 /* match end offset */
#define SPO_HS_OFF 2 /* highl. start offset */
#define SPO_HE_OFF 3 /* highl. end offset */
#define SPO_RS_OFF 4 /* region start offset */
#define SPO_RE_OFF 5 /* region end offset */
#define SPO_LC_OFF 6 /* leading context offset */
#define SPO_COUNT 7
/* Flags to indicate an additional string for highlight name completion. */
static int include_none = 0; /* when 1 include "nvim/None" */
static int include_default = 0; /* when 1 include "nvim/default" */
@@ -97,40 +107,6 @@ static int hl_attr_table[] =
{HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE,
HL_INVERSE, 0};
static int get_attr_entry(garray_T *table, attrentry_T *aep);
static void syn_unadd_group(void);
static void set_hl_attr(int idx);
static void highlight_list_one(int id);
static int highlight_list_arg(int id, int didh, int type, int iarg,
char_u *sarg,
char *name);
static int syn_add_group(char_u *name);
static int syn_list_header(int did_header, int outlen, int id);
static int hl_has_settings(int idx, int check_link);
static void highlight_clear(int idx);
/*
* An attribute number is the index in attr_table plus ATTR_OFF.
*/
#define ATTR_OFF (HL_ALL + 1)
#define SYN_NAMELEN 50 /* maximum length of a syntax name */
/* different types of offsets that are possible */
#define SPO_MS_OFF 0 /* match start offset */
#define SPO_ME_OFF 1 /* match end offset */
#define SPO_HS_OFF 2 /* highl. start offset */
#define SPO_HE_OFF 3 /* highl. end offset */
#define SPO_RS_OFF 4 /* region start offset */
#define SPO_RE_OFF 5 /* region end offset */
#define SPO_LC_OFF 6 /* leading context offset */
#define SPO_COUNT 7
static char *(spo_name_tab[SPO_COUNT]) =
{"ms=", "me=", "hs=", "he=", "rs=", "re=", "lc="};
/*
* The patterns that are being searched for are stored in a syn_pattern.
* A match item consists of one pattern.
@@ -162,6 +138,87 @@ typedef struct syn_pattern {
int sp_startcol; /* next match in sp_line_id line */
} synpat_T;
typedef struct syn_cluster_S {
char_u *scl_name; /* syntax cluster name */
char_u *scl_name_u; /* uppercase of scl_name */
short *scl_list; /* IDs in this syntax cluster */
} syn_cluster_T;
/*
* For the current state we need to remember more than just the idx.
* When si_m_endpos.lnum is 0, the items other than si_idx are unknown.
* (The end positions have the column number of the next char)
*/
typedef struct state_item {
int si_idx; /* index of syntax pattern or
KEYWORD_IDX */
int si_id; /* highlight group ID for keywords */
int si_trans_id; /* idem, transparency removed */
int si_m_lnum; /* lnum of the match */
int si_m_startcol; /* starting column of the match */
lpos_T si_m_endpos; /* just after end posn of the match */
lpos_T si_h_startpos; /* start position of the highlighting */
lpos_T si_h_endpos; /* end position of the highlighting */
lpos_T si_eoe_pos; /* end position of end pattern */
int si_end_idx; /* group ID for end pattern or zero */
int si_ends; /* if match ends before si_m_endpos */
int si_attr; /* attributes in this state */
long si_flags; /* HL_HAS_EOL flag in this state, and
* HL_SKIP* for si_next_list */
int si_seqnr; /* sequence number */
int si_cchar; /* substitution character for conceal */
short *si_cont_list; /* list of contained groups */
short *si_next_list; /* nextgroup IDs after this item ends */
reg_extmatch_T *si_extmatch; /* \z(...\) matches from start
* pattern */
} stateitem_T;
/*
* Struct to reduce the number of arguments to get_syn_options(), it's used
* very often.
*/
typedef struct {
int flags; /* flags for contained and transparent */
int keyword; /* TRUE for ":syn keyword" */
int *sync_idx; /* syntax item for "grouphere" argument, NULL
if not allowed */
char has_cont_list; /* TRUE if "cont_list" can be used */
short *cont_list; /* group IDs for "contains" argument */
short *cont_in_list; /* group IDs for "containedin" argument */
short *next_list; /* group IDs for "nextgroup" argument */
} syn_opt_arg_T;
typedef struct {
proftime_T total;
int count;
int match;
proftime_T slowest;
proftime_T average;
int id;
char_u *pattern;
} time_entry_T;
struct name_list {
int flag;
char *name;
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "syntax.c.generated.h"
#endif
/*
* An attribute number is the index in attr_table plus ATTR_OFF.
*/
#define ATTR_OFF (HL_ALL + 1)
#define SYN_NAMELEN 50 /* maximum length of a syntax name */
static char *(spo_name_tab[SPO_COUNT]) =
{"ms=", "me=", "hs=", "he=", "rs=", "re=", "lc="};
/* The sp_off_flags are computed like this:
* offset from the start of the matched text: (1 << SPO_XX_OFF)
* offset from the end of the matched text: (1 << (SPO_XX_OFF + SPO_COUNT))
@@ -198,12 +255,6 @@ static int current_flags = 0;
static int current_seqnr = 0;
static int current_sub_char = 0;
typedef struct syn_cluster_S {
char_u *scl_name; /* syntax cluster name */
char_u *scl_name_u; /* uppercase of scl_name */
short *scl_list; /* IDs in this syntax cluster */
} syn_cluster_T;
/*
* Methods of combining two clusters
*/
@@ -265,56 +316,12 @@ static int keepend_level = -1;
static char msg_no_items[] = N_("No Syntax items defined for this buffer");
/*
* For the current state we need to remember more than just the idx.
* When si_m_endpos.lnum is 0, the items other than si_idx are unknown.
* (The end positions have the column number of the next char)
*/
typedef struct state_item {
int si_idx; /* index of syntax pattern or
KEYWORD_IDX */
int si_id; /* highlight group ID for keywords */
int si_trans_id; /* idem, transparency removed */
int si_m_lnum; /* lnum of the match */
int si_m_startcol; /* starting column of the match */
lpos_T si_m_endpos; /* just after end posn of the match */
lpos_T si_h_startpos; /* start position of the highlighting */
lpos_T si_h_endpos; /* end position of the highlighting */
lpos_T si_eoe_pos; /* end position of end pattern */
int si_end_idx; /* group ID for end pattern or zero */
int si_ends; /* if match ends before si_m_endpos */
int si_attr; /* attributes in this state */
long si_flags; /* HL_HAS_EOL flag in this state, and
* HL_SKIP* for si_next_list */
int si_seqnr; /* sequence number */
int si_cchar; /* substitution character for conceal */
short *si_cont_list; /* list of contained groups */
short *si_next_list; /* nextgroup IDs after this item ends */
reg_extmatch_T *si_extmatch; /* \z(...\) matches from start
* pattern */
} stateitem_T;
#define KEYWORD_IDX -1 /* value of si_idx for keywords */
#define ID_LIST_ALL (short *)-1 /* valid of si_cont_list for containing all
but contained groups */
static int next_seqnr = 0; /* value to use for si_seqnr */
/*
* Struct to reduce the number of arguments to get_syn_options(), it's used
* very often.
*/
typedef struct {
int flags; /* flags for contained and transparent */
int keyword; /* TRUE for ":syn keyword" */
int *sync_idx; /* syntax item for "grouphere" argument, NULL
if not allowed */
char has_cont_list; /* TRUE if "cont_list" can be used */
short *cont_list; /* group IDs for "contains" argument */
short *cont_in_list; /* group IDs for "containedin" argument */
short *next_list; /* group IDs for "nextgroup" argument */
} syn_opt_arg_T;
/*
* The next possible match in the current line for any pattern is remembered,
* to avoid having to try for a match in each column.
@@ -360,115 +367,10 @@ static int current_line_id = 0; /* unique number for current line */
#define CUR_STATE(idx) ((stateitem_T *)(current_state.ga_data))[idx]
static void syn_sync(win_T *wp, linenr_T lnum, synstate_T *last_valid);
static int syn_match_linecont(linenr_T lnum);
static void syn_start_line(void);
static void syn_update_ends(int startofline);
static void syn_stack_alloc(void);
static int syn_stack_cleanup(void);
static void syn_stack_free_entry(synblock_T *block, synstate_T *p);
static synstate_T *syn_stack_find_entry(linenr_T lnum);
static synstate_T *store_current_state(void);
static void load_current_state(synstate_T *from);
static void invalidate_current_state(void);
static int syn_stack_equal(synstate_T *sp);
static void validate_current_state(void);
static int syn_finish_line(int syncing);
static int syn_current_attr(int syncing, int displaying, int *can_spell,
int keep_state);
static int did_match_already(int idx, garray_T *gap);
static stateitem_T *push_next_match(stateitem_T *cur_si);
static void check_state_ends(void);
static void update_si_attr(int idx);
static void check_keepend(void);
static void update_si_end(stateitem_T *sip, int startcol, int force);
static short *copy_id_list(short *list);
static int in_id_list(stateitem_T *item, short *cont_list,
struct sp_syn *ssp,
int contained);
static void push_current_state(int idx);
static void pop_current_state(void);
static void syn_clear_time(syn_time_T *tt);
static void syntime_clear(void);
static int syn_compare_syntime(const void *v1, const void *v2);
static void syntime_report(void);
static int syn_time_on = FALSE;
# define IF_SYN_TIME(p) (p)
static void syn_stack_apply_changes_block(synblock_T *block, buf_T *buf);
static 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);
static void clear_syn_state(synstate_T *p);
static void clear_current_state(void);
static void limit_pos(lpos_T *pos, lpos_T *limit);
static void limit_pos_zero(lpos_T *pos, lpos_T *limit);
static void syn_add_end_off(lpos_T *result, regmmatch_T *regmatch,
synpat_T *spp, int idx,
int extra);
static void syn_add_start_off(lpos_T *result, regmmatch_T *regmatch,
synpat_T *spp, int idx,
int extra);
static char_u *syn_getcurline(void);
static int syn_regexec(regmmatch_T *rmp, linenr_T lnum, colnr_T col,
syn_time_T *st);
static int check_keyword_id(char_u *line, int startcol, int *endcol,
long *flags, short **next_list,
stateitem_T *cur_si,
int *ccharp);
static keyentry_T *match_keyword(char_u *keyword, hashtab_T *ht,
stateitem_T *cur_si);
static void syn_cmd_case(exarg_T *eap, int syncing);
static void syn_cmd_spell(exarg_T *eap, int syncing);
static void syntax_sync_clear(void);
static void syn_remove_pattern(synblock_T *block, int idx);
static void syn_clear_pattern(synblock_T *block, int i);
static void syn_clear_cluster(synblock_T *block, int i);
static void syn_cmd_clear(exarg_T *eap, int syncing);
static void syn_cmd_conceal(exarg_T *eap, int syncing);
static void syn_clear_one(int id, int syncing);
static void syn_cmd_on(exarg_T *eap, int syncing);
static void syn_cmd_enable(exarg_T *eap, int syncing);
static void syn_cmd_reset(exarg_T *eap, int syncing);
static void syn_cmd_manual(exarg_T *eap, int syncing);
static void syn_cmd_off(exarg_T *eap, int syncing);
static void syn_cmd_onoff(exarg_T *eap, char *name);
static void syn_cmd_list(exarg_T *eap, int syncing);
static void syn_lines_msg(void);
static void syn_match_msg(void);
static void syn_stack_free_block(synblock_T *block);
static void syn_list_one(int id, int syncing, int link_only);
static void syn_list_cluster(int id);
static void put_id_list(char_u *name, short *list, int attr);
static void put_pattern(char *s, int c, synpat_T *spp, int attr);
static int syn_list_keywords(int id, hashtab_T *ht, int did_header,
int attr);
static void syn_clear_keyword(int id, hashtab_T *ht);
static void clear_keywtab(hashtab_T *ht);
static void add_keyword(char_u *name, int id, int flags,
short *cont_in_list, short *next_list,
int conceal_char);
static char_u *get_group_name(char_u *arg, char_u **name_end);
static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt,
int *conceal_char);
static void syn_cmd_include(exarg_T *eap, int syncing);
static void syn_cmd_keyword(exarg_T *eap, int syncing);
static void syn_cmd_match(exarg_T *eap, int syncing);
static void syn_cmd_region(exarg_T *eap, int syncing);
static int syn_compare_stub(const void *v1, const void *v2);
static void syn_cmd_cluster(exarg_T *eap, int syncing);
static int syn_scl_name2id(char_u *name);
static int syn_scl_namen2id(char_u *linep, int len);
static int syn_check_cluster(char_u *pp, int len);
static int syn_add_cluster(char_u *name);
static void init_syn_patterns(void);
static char_u *get_syn_pattern(char_u *arg, synpat_T *ci);
static void syn_cmd_sync(exarg_T *eap, int syncing);
static int get_id_list(char_u **arg, int keylen, short **list);
static void syn_combine_list(short **clstr1, short **clstr2,
int list_op);
static void syn_incl_toplevel(int id, int *flagsp);
/*
* Start the syntax recognition for a line. This function is normally called
@@ -3518,12 +3420,6 @@ static void syn_match_msg(void)
static int last_matchgroup;
struct name_list {
int flag;
char *name;
};
static void syn_list_flags(struct name_list *nl, int flags, int attr);
/*
* List one syntax item, for ":syntax" or "syntax list syntax_name".
@@ -5788,16 +5684,6 @@ char_u *get_syntime_arg(expand_T *xp, int idx)
return NULL;
}
typedef struct {
proftime_T total;
int count;
int match;
proftime_T slowest;
proftime_T average;
int id;
char_u *pattern;
} time_entry_T;
static int syn_compare_syntime(const void *v1, const void *v2)
{
const time_entry_T *s1 = v1;
@@ -7688,8 +7574,6 @@ int highlight_changed(void)
return OK;
}
static void highlight_list(void);
static void highlight_list_two(int cnt, int attr);
/*
* Handle command line completion for :highlight command.