X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lua%2Fruntime.c;h=1e806c4240cf6586fefd5fec5f2bb91939bdd4ed;hp=34de3bb944aaf2c0558670c73fad6c445b7e148b;hb=58e0ddff3bd5e1b9455e8c3ebb1f4b9e7dd71920;hpb=cc707c1e986b60f2c1c1932d0789038d465a7a59 diff --git a/lib-lua/runtime.c b/lib-lua/runtime.c index 34de3bb..1e806c4 100644 --- a/lib-lua/runtime.c +++ b/lib-lua/runtime.c @@ -20,6 +20,10 @@ #include #include +#include "../alias.h" +#include "../mutt.h" +#include "../charset.h" + static lua_State *L; void luaM_initialize(void) @@ -33,7 +37,11 @@ void luaM_initialize(void) {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_DBLIBNAME, luaopen_debug}, - {"madmutt", luaopen_madmutt}, + {"MCore", luaopen_MCore}, + {"MTransport", luaopen_MTransport}, + {"MAlias", luaopen_MAlias}, + {"MCharset", luaopen_MCharset}, + {"Mime", luaopen_Mime}, }; int i; @@ -70,8 +78,21 @@ int luaM_wrap(void (*errfun)(const char *fmt, ...), int status) quadopt_t luaM_checkquadopt(lua_State *Ls, int narg) { const char *s; - int i = luaL_checkinteger(Ls, narg); + int i; + + if (lua_type(Ls, narg) == LUA_TSTRING) { + s = lua_tostring(Ls, narg); + switch (mlua_which_token(s, -1)) { + case LTK_YES: return M_YES; + case LTK_NO: return M_NO; + case LTK_ASK_YES: return M_ASKYES; + case LTK_ASK_NO: return M_ASKNO; + default: + break; + } + } + i = luaL_checkinteger(Ls, narg); if (i & ~3) { s = lua_pushfstring(Ls, "int in [0-3] expected, got %d", i); return luaL_argerror(Ls, narg, s); @@ -79,3 +100,50 @@ quadopt_t luaM_checkquadopt(lua_State *Ls, int narg) return i; } +void luaM_pushquadopt(lua_State *Ls, int val) +{ + switch (val) { + case M_YES: return lua_pushstring(Ls, "yes"); + case M_NO: return lua_pushstring(Ls, "no"); + case M_ASKYES: return lua_pushstring(Ls, "ask-yes"); + case M_ASKNO: return lua_pushstring(Ls, "ask-no"); + default: return lua_pushnil(Ls); + } +} + +const char *luaM_checkrx(lua_State *Ls, int narg) +{ + const char *s = luaL_checkstring(Ls, narg); + char buf[STRING]; + + if (rx_validate(s, buf, ssizeof(buf))) { + s = lua_pushfstring(Ls, "invalid regexp: `%s'", buf); + luaL_argerror(Ls, narg, s); + return NULL; + } + + return s; +} + +rx_t *luaM_rxnew(const char *val) +{ + if (m_strisempty(val)) + val = "."; + + return rx_compile(val, mutt_which_case(val)); +} + +char *luaM_pathnew(const char *val) +{ + char path[PATH_MAX]; + _mutt_expand_path(path, sizeof(path), val, 0); + return m_strdup(path); +} + + +void luaM_pushaddr(lua_State *Ls, address_t *addr) +{ + char s[HUGE_STRING] = ""; + rfc822_addrcat(s, sizeof(s), addr, 0); + lua_pushstring(Ls, s); +}