diff options
| author | Peng Wu <epico@dhcp-65-116.nay.redhat.com> | 2010-03-11 10:45:43 +0800 |
|---|---|---|
| committer | Peng Wu <alexepico@gmail.com> | 2010-05-19 10:09:31 +0800 |
| commit | ea36603015ab31469aa59eff8ee09880d006f83d (patch) | |
| tree | 573bf50d7cc8add25c14df6796e6c0b5a9104ddd /lua | |
| parent | a00e941af1ecef13149d8ca2adfbfca3b6725f26 (diff) | |
| download | ibus-libpinyin-ea36603015ab31469aa59eff8ee09880d006f83d.tar.gz ibus-libpinyin-ea36603015ab31469aa59eff8ee09880d006f83d.tar.xz ibus-libpinyin-ea36603015ab31469aa59eff8ee09880d006f83d.zip | |
lua plugin hello world is ok.
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lua-plugin-init.c | 69 | ||||
| -rw-r--r-- | lua/lua-plugin.h | 10 | ||||
| -rw-r--r-- | lua/test-lua-plugin.c | 21 | ||||
| -rw-r--r-- | lua/test.lua | 1 |
4 files changed, 79 insertions, 22 deletions
diff --git a/lua/lua-plugin-init.c b/lua/lua-plugin-init.c index 4dcd5a6..0ee2677 100644 --- a/lua/lua-plugin-init.c +++ b/lua/lua-plugin-init.c @@ -5,23 +5,55 @@ #include "lualib.h" #include "lauxlib.h" -/* the Lua interpreter */ -static lua_State * L = NULL; +#include "lua-plugin.h" -static int lua_plugin_init(){ - /* initialize Lua */ - L = lua_open(); - +static const luaL_Reg lualibs[] = { + {"", luaopen_base}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_IMELIBNAME, luaopen_ime}, + {NULL, NULL} +}; + + +void lua_plugin_openlibs (lua_State *L) { + const luaL_Reg *lib = lualibs; + for (; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_pushstring(L, lib->name); + lua_call(L, 1, 0); + } +} + + +int lua_plugin_init(lua_State *L){ /* enable libs in sandbox */ - luaopen_base(L); - luaopen_io(L); - luaopen_string(L); - luaopen_math(L); - luaopen_table(L); - - + lua_plugin_openlibs(L); + + return 0; +} + +int lua_plugin_fini(lua_State *L){ + lua_close(L); +} + +static int ime_get_last_commit(lua_State* L){ + /*TODO: not implemented. */ + g_assert_not_reached(); + lua_pushstring(L, ""); + return 1; } +static int ime_get_version(lua_State* L){ + /* TODO: replace this with C macros. */ + lua_pushstring(L, "ibus-pinyin 1.2.99"); + return 1; +} + + static const luaL_Reg imelib[] = { {"get_last_commit", ime_get_last_commit}, {"get_version", ime_get_version}, @@ -39,15 +71,8 @@ static const luaL_Reg imelib[] = { {NULL, NULL} }; -static int ime_get_last_commit(lua_State* L){ - /*TODO: not implemented. */ - g_assert_not_reached(); - lua_pushstring(L, ""); +LUALIB_API int luaopen_ime (lua_State *L) { + luaL_register(L, LUA_IMELIBNAME, imelib); return 1; } -static int ime_get_version(lua_State* L){ - /* TODO: replace this with C macros. */ - lua_pushstring(L, "ibus-pinyin 1.2.99"); - return 1; -} diff --git a/lua/lua-plugin.h b/lua/lua-plugin.h new file mode 100644 index 0000000..b2fe8e5 --- /dev/null +++ b/lua/lua-plugin.h @@ -0,0 +1,10 @@ +#ifndef LUA_PLUGIN_H +#define LUA_PLUGIN_H + +int lua_plugin_init(lua_State * L); +int lua_plugin_fini(lua_State * L); + +#define LUA_IMELIBNAME "ime" +LUALIB_API int (luaopen_ime) (lua_State *L); + +#endif diff --git a/lua/test-lua-plugin.c b/lua/test-lua-plugin.c new file mode 100644 index 0000000..5dec834 --- /dev/null +++ b/lua/test-lua-plugin.c @@ -0,0 +1,21 @@ +#include <stdio.h> + +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" + +#include "lua-plugin.h" + +static lua_State * L = NULL; + +int main(int argc, char * argv[]){ + printf("starting test...\n"); + + /* initialize Lua */ + L = lua_open(); + + lua_plugin_init(L); + luaL_dofile(L, "test.lua"); + lua_plugin_fini(L); + return 0; +} diff --git a/lua/test.lua b/lua/test.lua new file mode 100644 index 0000000..184c9f0 --- /dev/null +++ b/lua/test.lua @@ -0,0 +1 @@ +print(ime.get_version()) |
