*/
#include <lib-lib/lib-lib.h>
+#include <lib-lua/lib-lua.h>
-#include <lua.h>
-#include <lualib.h>
-#include <lauxlib.h>
-
-#include "lib-lua.h"
+#include "../alias.h"
+#include "../mutt.h"
static lua_State *L;
-static const luaL_Reg lualibs[] = {
- {"", luaopen_base},
- {LUA_LOADLIBNAME, luaopen_package},
- {LUA_TABLIBNAME, luaopen_table},
- {LUA_IOLIBNAME, luaopen_io},
- {LUA_STRLIBNAME, luaopen_string},
- {LUA_MATHLIBNAME, luaopen_math},
- {LUA_DBLIBNAME, luaopen_debug},
-};
-
-static const struct luaL_Reg madmutt_module_funcs[] = {
- {NULL, NULL}
-};
-
-static const struct {
- const char *key;
- const char *value;
-} madmutt_module_vars[] = {
- { "version", VERSION },
- /*
- ** .pp
- ** \fIThis is a read-only system property and specifies madmutt's
- ** version string.\fP
- */
- { "sysconfdir", SYSCONFDIR },
- /*
- ** .pp
- ** \fIThis is a read-only system property and specifies madmutt's
- ** subversion revision string.\fP
- */
- { "bindir", BINDIR },
- /*
- ** .pp
- ** \fIThis is a read-only system property and specifies the
- ** directory containing the madmutt binary.\fP
- */
- { "docdir", PKGDOCDIR },
- /*
- ** .pp
- ** \fIThis is a read-only system property and specifies the
- ** directory containing the madmutt documentation.\fP
- */
-#ifdef USE_HCACHE
-#if defined(HAVE_QDBM)
- {"hcache_backend", "qdbm" },
-#elif defined(HAVE_GDBM)
- {"hcache_backend", "gdbm" },
-#elif defined(HAVE_DB4)
- {"hcache_backend", "db4" },
-#else
- {"hcache_backend", "unknown" },
-#endif
- /*
- ** .pp
- ** \fIThis is a read-only system property and specifies the
- ** header chaching's database backend.\fP
- */
-#endif
-};
-
-void mlua_initialize(void)
+void luaM_initialize(void)
{
+ static const luaL_Reg lualibs[] = {
+ {"", luaopen_base},
+ {LUA_OSLIBNAME, luaopen_os},
+ {LUA_LOADLIBNAME, luaopen_package},
+ {LUA_TABLIBNAME, luaopen_table},
+ {LUA_IOLIBNAME, luaopen_io},
+ {LUA_STRLIBNAME, luaopen_string},
+ {LUA_MATHLIBNAME, luaopen_math},
+ {LUA_DBLIBNAME, luaopen_debug},
+ {"MCore", luaopen_MCore},
+ {"MTransport", luaopen_MTransport},
+ {"MAlias", luaopen_MAlias},
+ };
+
int i;
L = lua_open();
lua_pushstring(L, lualibs[i].name);
lua_call(L, 1, 0);
}
- luaL_register(L, "madmutt", madmutt_module_funcs);
-
- for (i = 0; i < countof(madmutt_module_vars); i++) {
- lua_pushstring(L, madmutt_module_vars[i].value);
- lua_setfield(L, -2, madmutt_module_vars[i].key);
- }
}
-void mlua_shutdown(void)
+void luaM_shutdown(void)
{
lua_close(L);
}
-int mlua_dofile(const char *filename)
+int luaM_dofile(const char *filename)
{
return luaL_dofile(L, filename);
}
-int mlua_wrap(void (*errfun)(const char *fmt, ...), int status)
+int luaM_wrap(void (*errfun)(const char *fmt, ...), int status)
{
if (status) {
(*errfun)("-[lua]-: %s\n", lua_tostring(L, -1));
return status;
}
+
+quadopt_t luaM_checkquadopt(lua_State *Ls, int narg)
+{
+ const char *s;
+ 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);
+ }
+ return i;
+}
+
+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;
+}
+
+char *luaM_pathnew(const char *val)
+{
+ char path[PATH_MAX];
+ _mutt_expand_path(path, sizeof(path), val, 0);
+ return m_strdup(path);
+}
+
+rx_t *luaM_rxnew(const char *val)
+{
+ if (m_strisempty(val))
+ val = ".";
+
+ return rx_compile(val, mutt_which_case(val));
+}
+