/* syntax.c */
extern void syntax_start __ARGS((win_T *wp, linenr_T lnum));
extern void syn_stack_free_all __ARGS((buf_T *buf));
extern void syn_stack_apply_changes __ARGS((buf_T *buf));
extern void syntax_end_parsing __ARGS((linenr_T lnum));
extern int syntax_check_changed __ARGS((linenr_T lnum));
extern int get_syntax_attr __ARGS((colnr_T col, int *can_spell));
extern void syntax_clear __ARGS((buf_T *buf));
extern void ex_syntax __ARGS((exarg_T *eap));
extern int syntax_present __ARGS((buf_T *buf));
extern void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
extern char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
extern int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
extern int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
extern void init_highlight __ARGS((int both, int reset));
extern int load_colors __ARGS((char_u *name));
extern void do_highlight __ARGS((char_u *line, int forceit, int init));
extern void free_highlight __ARGS((void));
extern void restore_cterm_colors __ARGS((void));
extern void set_normal_colors __ARGS((void));
extern char_u *hl_get_font_name __ARGS((void));
extern void hl_set_font_name __ARGS((char_u *font_name));
extern void hl_set_bg_color_name __ARGS((char_u *name));
extern void hl_set_fg_color_name __ARGS((char_u *name));
extern void clear_hl_tables __ARGS((void));
extern int hl_combine_attr __ARGS((int char_attr, int prim_attr));
extern attrentry_T *syn_gui_attr2entry __ARGS((int attr));
extern int syn_attr2attr __ARGS((int attr));
extern attrentry_T *syn_term_attr2entry __ARGS((int attr));
extern attrentry_T *syn_cterm_attr2entry __ARGS((int attr));
extern char_u *highlight_has_attr __ARGS((int id, int flag, int modec));
extern char_u *highlight_color __ARGS((int id, char_u *what, int modec));
extern long_u highlight_gui_color_rgb __ARGS((int id, int fg));
extern int syn_name2id __ARGS((char_u *name));
extern int highlight_exists __ARGS((char_u *name));
extern char_u *syn_id2name __ARGS((int id));
extern int syn_namen2id __ARGS((char_u *linep, int len));
extern int syn_check_group __ARGS((char_u *pp, int len));
extern int syn_id2attr __ARGS((int hl_id));
extern int syn_id2colors __ARGS((int hl_id, guicolor_T *fgp, guicolor_T *bgp));
extern int syn_get_final_id __ARGS((int hl_id));
extern void highlight_gui_started __ARGS((void));
extern int highlight_changed __ARGS((void));
extern void set_context_in_highlight_cmd __ARGS((expand_T *xp, char_u *arg));
extern char_u *get_highlight_name __ARGS((expand_T *xp, int idx));
extern void free_highlight_fonts __ARGS((void));
/* vim: set ft=c : */
