aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/gen_lua_c_api_tags.lua19
1 files changed, 19 insertions, 0 deletions
diff --git a/scripts/gen_lua_c_api_tags.lua b/scripts/gen_lua_c_api_tags.lua
new file mode 100755
index 00000000..0bd56e13
--- /dev/null
+++ b/scripts/gen_lua_c_api_tags.lua
@@ -0,0 +1,19 @@
+#!/usr/bin/lua
+-- Copyright 2007-2015 Mitchell mitchell.att.foicica.com. See LICENSE.
+
+local f = io.open('../modules/ansi_c/lua_tags', 'w')
+-- Lua header files define API functions in a way ctags cannot detect.
+-- For example: `LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);`.
+-- The function name enclosed in parenthesis is causing the problem. A regex
+-- must be used to capture those definitions.
+local p = io.popen('ctags -o - --regex-c++="/\\(([a-zA-Z_]+)\\) +\\(/\\1/f/" '..
+ '../src/lua/src/lua.h ../src/lua/src/lauxlib.h')
+for line in p:read('*a'):gmatch('[^\n]+') do
+ -- Strip comment lines and replace file and ex_cmd fields with empty info.
+ if not line:find('^!') then
+ local tag, _, _, ext_fields = line:match('^(%S+)\t(%S+)\t(.-);"\t?(.*)$')
+ f:write(tag, '\t_\t0;"\t', ext_fields, '\n')
+ end
+end
+p:close()
+f:close()