diff options
Diffstat (limited to 'src/gen/gen_events.lua')
-rw-r--r-- | src/gen/gen_events.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/gen/gen_events.lua b/src/gen/gen_events.lua new file mode 100644 index 0000000000..77f766bb28 --- /dev/null +++ b/src/gen/gen_events.lua @@ -0,0 +1,42 @@ +local fileio_enum_file = arg[1] +local names_file = arg[2] + +local auevents = require('nvim.auevents') +local events = auevents.events + +local enum_tgt = io.open(fileio_enum_file, 'w') +local names_tgt = io.open(names_file, 'w') + +enum_tgt:write([[ +// IWYU pragma: private, include "nvim/autocmd_defs.h" + +typedef enum auto_event {]]) +names_tgt:write([[ +static const struct event_name { + size_t len; + char *name; + int event; +} event_names[] = {]]) + +local aliases = 0 +for i, event in ipairs(events) do + enum_tgt:write(('\n EVENT_%s = %u,'):format(event[1]:upper(), i + aliases - 1)) + -- Events with positive keys aren't allowed in 'eventignorewin'. + local event_int = ('%sEVENT_%s'):format(event[3] and '-' or '', event[1]:upper()) + names_tgt:write(('\n {%u, "%s", %s},'):format(#event[1], event[1], event_int)) + for _, alias in ipairs(event[2]) do + aliases = aliases + 1 + names_tgt:write(('\n {%u, "%s", %s},'):format(#alias, alias, event_int)) + enum_tgt:write(('\n EVENT_%s = %u,'):format(alias:upper(), i + aliases - 1)) + end + if i == #events then -- Last item. + enum_tgt:write(('\n NUM_EVENTS = %u,'):format(i + aliases)) + end +end + +names_tgt:write('\n {0, NULL, (event_T)0},\n};\n') +names_tgt:write('\nstatic AutoCmdVec autocmds[NUM_EVENTS] = { 0 };\n') +names_tgt:close() + +enum_tgt:write('\n} event_T;\n') +enum_tgt:close() |