diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2015-07-26 15:42:42 -0400 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2015-07-26 15:42:42 -0400 |
commit | a497bf4bfdc79b6fa52a846d7d0a884ba007f452 (patch) | |
tree | fde5de2fe376d3cd4b8f555705b41b00b138ef69 /scripts/genvimvim.lua | |
parent | 122ad63ac90542d2c2964b071783799cfcdf2e07 (diff) | |
parent | 6f35bcfb07bae585928e03301eb2f19813c3e400 (diff) | |
download | rneovim-a497bf4bfdc79b6fa52a846d7d0a884ba007f452.tar.gz rneovim-a497bf4bfdc79b6fa52a846d7d0a884ba007f452.tar.bz2 rneovim-a497bf4bfdc79b6fa52a846d7d0a884ba007f452.zip |
Merge pull request #2288 from ZyX-I/autovimsyn
Move part of syntax/vim.vim to syntax/vim/generated.vim
Diffstat (limited to 'scripts/genvimvim.lua')
-rw-r--r-- | scripts/genvimvim.lua | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/scripts/genvimvim.lua b/scripts/genvimvim.lua new file mode 100644 index 0000000000..9135c8e3ab --- /dev/null +++ b/scripts/genvimvim.lua @@ -0,0 +1,138 @@ +if arg[1] == '--help' then + print('Usage: genoptions.lua src/nvim runtime/syntax/vim/generated.vim') + os.exit(0) +end + +local nvimsrcdir = arg[1] +local syntax_file = arg[2] + +package.path = nvimsrcdir .. '/?.lua;' .. package.path + +local lld = {} +local syn_fd = io.open(syntax_file, 'w') +lld.line_length = 0 +local w = function(s) + syn_fd:write(s) + if s:find('\n') then + lld.line_length = #(s:gsub('.*\n', '')) + else + lld.line_length = lld.line_length + #s + end +end + +local options = require('options') +local auevents = require('auevents') +local ex_cmds = require('ex_cmds') + +local cmd_kw = function(prev_cmd, cmd) + if not prev_cmd then + return cmd:sub(1, 1) .. '[' .. cmd:sub(2) .. ']' + else + local shift = 1 + while cmd:sub(shift, shift) == prev_cmd:sub(shift, shift) do + shift = shift + 1 + end + if shift >= #cmd then + return cmd + else + return cmd:sub(1, shift) .. '[' .. cmd:sub(shift + 1) .. ']' + end + end +end + +vimcmd_start = 'syn keyword vimCommand contained ' +w(vimcmd_start) +local prev_cmd = nil +for _, cmd_desc in ipairs(ex_cmds) do + if lld.line_length > 850 then + w('\n' .. vimcmd_start) + end + local cmd = cmd_desc.command + if cmd:match('%w') and cmd ~= 'z' then + w(' ' .. cmd_kw(prev_cmd, cmd)) + end + prev_cmd = cmd +end + +local vimopt_start = 'syn keyword vimOption contained ' +w('\n\n' .. vimopt_start) + +for _, opt_desc in ipairs(options.options) do + if not opt_desc.varname or opt_desc.varname:sub(1, 7) ~= 'p_force' then + if lld.line_length > 850 then + w('\n' .. vimopt_start) + end + w(' ' .. opt_desc.full_name) + if opt_desc.abbreviation then + w(' ' .. opt_desc.abbreviation) + end + if opt_desc.type == 'bool' then + w(' inv' .. opt_desc.full_name) + w(' no' .. opt_desc.full_name) + if opt_desc.abbreviation then + w(' inv' .. opt_desc.abbreviation) + w(' no' .. opt_desc.abbreviation) + end + end + end +end + +w('\n\nsyn case ignore') +local vimau_start = 'syn keyword vimAutoEvent contained ' +w('\n\n' .. vimau_start) + +for _, au in ipairs(auevents.events) do + if not auevents.neovim_specific[au] then + if lld.line_length > 850 then + w('\n' .. vimau_start) + end + w(' ' .. au) + end +end +for au, _ in pairs(auevents.aliases) do + if not auevents.neovim_specific[au] then + if lld.line_length > 850 then + w('\n' .. vimau_start) + end + w(' ' .. au) + end +end + +local nvimau_start = 'syn keyword nvimAutoEvent contained ' +w('\n\n' .. nvimau_start) + +for au, _ in pairs(auevents.neovim_specific) do + if lld.line_length > 850 then + w('\n' .. nvimau_start) + end + w(' ' .. au) +end + +w('\n\nsyn case match') +local vimfun_start = 'syn keyword vimFuncName contained ' +w('\n\n' .. vimfun_start) +eval_fd = io.open(nvimsrcdir .. '/eval.c', 'r') +local started = 0 +for line in eval_fd:lines() do + if line == '} functions[] =' then + started = 1 + elseif started == 1 then + assert (line == '{') + started = 2 + elseif started == 2 then + if line == '};' then + break + end + local func_name = line:match('^ {"(%w+)",') + if func_name then + if lld.line_length > 850 then + w('\n' .. vimfun_start) + end + w(' ' .. func_name) + end + end +end +eval_fd:close() + +w('\n') +syn_fd:close() |