mirror of
https://github.com/neovim/neovim.git
synced 2025-10-16 06:46:07 +00:00
generators: separate source generators from scripts
This commit is contained in:
65
src/nvim/generators/gen_events.lua
Normal file
65
src/nvim/generators/gen_events.lua
Normal file
@@ -0,0 +1,65 @@
|
||||
if arg[1] == '--help' then
|
||||
print('Usage: gen_events.lua src/nvim enum_file event_names_file')
|
||||
os.exit(0)
|
||||
end
|
||||
|
||||
local nvimsrcdir = arg[1]
|
||||
local fileio_enum_file = arg[2]
|
||||
local names_file = arg[3]
|
||||
|
||||
package.path = nvimsrcdir .. '/?.lua;' .. package.path
|
||||
|
||||
local auevents = require('auevents')
|
||||
local events = auevents.events
|
||||
local aliases = auevents.aliases
|
||||
|
||||
enum_tgt = io.open(fileio_enum_file, 'w')
|
||||
names_tgt = io.open(names_file, 'w')
|
||||
|
||||
enum_tgt:write('typedef enum auto_event {')
|
||||
names_tgt:write([[
|
||||
static const struct event_name {
|
||||
size_t len;
|
||||
char *name;
|
||||
event_T event;
|
||||
} event_names[] = {]])
|
||||
|
||||
for i, event in ipairs(events) do
|
||||
if i > 1 then
|
||||
comma = ',\n'
|
||||
else
|
||||
comma = '\n'
|
||||
end
|
||||
enum_tgt:write(('%s EVENT_%s = %u'):format(comma, event:upper(), i - 1))
|
||||
names_tgt:write(('%s {%u, "%s", EVENT_%s}'):format(comma, #event, event, event:upper()))
|
||||
end
|
||||
|
||||
for alias, event in pairs(aliases) do
|
||||
names_tgt:write((',\n {%u, "%s", EVENT_%s}'):format(#alias, alias, event:upper()))
|
||||
end
|
||||
|
||||
names_tgt:write(',\n {0, NULL, (event_T)0}')
|
||||
|
||||
enum_tgt:write('\n} event_T;\n')
|
||||
names_tgt:write('\n};\n')
|
||||
|
||||
enum_tgt:write(('\n#define NUM_EVENTS %u\n'):format(#events))
|
||||
names_tgt:write('\nstatic AutoPat *first_autopat[NUM_EVENTS] = {\n ')
|
||||
line_len = 1
|
||||
for i = 1,((#events) - 1) do
|
||||
line_len = line_len + #(' NULL,')
|
||||
if line_len > 80 then
|
||||
names_tgt:write('\n ')
|
||||
line_len = 1 + #(' NULL,')
|
||||
end
|
||||
names_tgt:write(' NULL,')
|
||||
end
|
||||
if line_len + #(' NULL') > 80 then
|
||||
names_tgt:write('\n NULL')
|
||||
else
|
||||
names_tgt:write(' NULL')
|
||||
end
|
||||
names_tgt:write('\n};\n')
|
||||
|
||||
enum_tgt:close()
|
||||
names_tgt:close()
|
Reference in New Issue
Block a user