1#ifndef DEFINE_FUNC_ATTRIBUTES
2# define DEFINE_FUNC_ATTRIBUTES
3#endif
4#include "nvim/func_attr.h"
5#undef DEFINE_FUNC_ATTRIBUTES
6static void insert_enter(InsertState *s);
7static int insert_check(VimState *state);
8static int insert_execute(VimState *state, int key);
9static int insert_handle_key(InsertState *s);
10static void insert_do_complete(InsertState *s);
11static void insert_do_cindent(InsertState *s);
12static void ins_redraw(int ready );
13static void ins_ctrl_v(void);
14static void undisplay_dollar(void);
15static _Bool del_char_after_col(int limit_col);
16static void ins_ctrl_x(void);
17static _Bool check_compl_option(_Bool dict_opt);
18static _Bool ins_compl_accept_char(int c) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
19static int ins_compl_add(char_u *const str, int len, char_u *const fname, char_u *const *const cptext, const _Bool cptext_allocated, const Direction cdir, int flags_arg, const _Bool adup) FUNC_ATTR_NONNULL_ARG(1);
20static _Bool ins_compl_equal(compl_T *match, char_u *str, size_t len) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL;
21static void ins_compl_longest_match(compl_T *match);
22static void ins_compl_add_matches(int num_matches, char_u **matches, int icase) FUNC_ATTR_NONNULL_ALL;
23static int ins_compl_make_cyclic(void);
24static void ins_compl_del_pum(void);
25static _Bool pum_wanted(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
26static _Bool pum_enough_matches(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
27static void trigger_complete_changed_event(int cur);
28static void ins_compl_dictionaries(char_u *dict_start, char_u *pat, int flags, int thesaurus );
29static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir);
30static char_u *find_line_end(char_u *ptr);
31static void ins_compl_free(void);
32static void ins_compl_clear(void);
33static char_u *ins_compl_mode(void);
34static int ins_compl_bs(void);
35static _Bool ins_compl_need_restart(void) FUNC_ATTR_PURE;
36static void ins_compl_new_leader(void);
37static int ins_compl_len(void);
38static void ins_compl_addleader(int c);
39static void ins_compl_restart(void);
40static void ins_compl_set_original_text(char_u *str) FUNC_ATTR_NONNULL_ALL;
41static void ins_compl_addfrommatch(void);
42static _Bool ins_compl_prep(int c);
43static void ins_compl_fixRedoBufForLeader(char_u *ptr_arg);
44static buf_T *ins_compl_next_buf(buf_T *buf, int flag);
45static void expand_by_function(int type, char_u *base );
46static void ins_compl_add_list(list_T *const list);
47static void ins_compl_add_dict(dict_T *dict);
48static int ins_compl_get_exp(pos_T *ini);
49static void ins_compl_delete(void);
50static void ins_compl_insert(int in_compl_func);
51static dict_T *ins_compl_dict_alloc(compl_T *match);
52static int ins_compl_next(int allow_get_expansion, int count, int insert_match, int in_compl_func );
53static int ins_compl_key2dir(int c);
54static _Bool ins_compl_pum_key(int c) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
55static int ins_compl_key2count(int c);
56static _Bool ins_compl_use_match(int c) FUNC_ATTR_CONST FUNC_ATTR_WARN_UNUSED_RESULT;
57static int ins_complete(int c, _Bool enable_pum);
58static unsigned quote_meta(char_u *dest, char_u *src, int len);
59static void insert_special(int c, int allow_modmask, int ctrlv);
60static void internal_format(int textwidth, int second_indent, int flags, int format_only, int c );
61static void check_auto_format(_Bool end_insert );
62static void redo_literal(int c);
63static void start_arrow(pos_T *end_insert_pos );
64static void start_arrow_with_change(pos_T *end_insert_pos, _Bool end_change);
65static void start_arrow_common(pos_T *end_insert_pos, _Bool end_change);
66static void check_spell_redraw(void);
67static void spell_back_to_badword(void);
68static void stop_insert(pos_T *end_insert_pos, int esc, int nomove );
69static _Bool echeck_abbr(int c) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
70static int replace_pop(void);
71static void replace_join(int off );
72static void replace_pop_ins(void);
73static void mb_replace_pop_ins(int cc);
74static void replace_flush(void);
75static void replace_do_bs(int limit_col);
76static _Bool cindent_on(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT;
77static void ins_reg(void);
78static void ins_ctrl_g(void);
79static void ins_ctrl_hat(void);
80static _Bool ins_esc(long *count, int cmdchar, _Bool nomove) FUNC_ATTR_NONNULL_ARG(1);
81static void ins_ctrl_(void);
82static _Bool ins_start_select(int c) FUNC_ATTR_WARN_UNUSED_RESULT;
83static void ins_insert(int replaceState);
84static void ins_ctrl_o(void);
85static void ins_shift(int c, int lastc);
86static void ins_del(void);
87static void ins_bs_one(colnr_T *vcolp);
88static _Bool ins_bs(int c, int mode, int *inserted_space_p) FUNC_ATTR_NONNULL_ARG(3);
89static void ins_mouse(int c);
90static void ins_mousescroll(int dir);
91static void ins_left(void);
92static void ins_home(int c);
93static void ins_end(int c);
94static void ins_s_left(void);
95static void ins_right(void);
96static void ins_s_right(void);
97static void ins_up(int startcol );
98static void ins_pageup(void);
99static void ins_down(int startcol );
100static void ins_pagedown(void);
101static _Bool ins_tab(void) FUNC_ATTR_WARN_UNUSED_RESULT;
102static _Bool ins_eol(int c);
103static int ins_digraph(void);
104static int ins_ctrl_ey(int tc);
105static void ins_try_si(int c);
106static colnr_T get_nolist_virtcol(void);
107static char_u *do_insert_char_pre(int c);
108static int ins_apply_autocmds(event_T event);
109static void show_pum(int prev_w_wrow, int prev_w_leftcol);
110#include "nvim/func_attr.h"
111