/* Register module */ LUA_API int luaopen_python(lua_State *L) { lua_Object python = lua_createtable(L); set_table_string(L, python, PY_UNICODE_ENCODING, "utf8"); set_table_string(L, python, PY_UNICODE_ENCODING_ERRORHANDLER, "strict"); set_table_number(L, python, PY_OBJECT_BY_REFERENCE, 0); set_table_number(L, python, PY_API_IS_EMBEDDED, 0); // If Python is inside Lua set_table_number(L, python, PY_LUA_TABLE_CONVERT, 0); // table convert ? lua_pushcfunction(L, py_args); lua_setglobal(L, PY_ARGS_FUNC); lua_pushcfunction(L, py_kwargs); lua_setglobal(L, PY_KWARGS_FUNC); lua_pushcfunction(L, py_args_array); lua_setglobal(L, PY_ARGS_ARRAY_FUNC); lua_pushobject(L, python); lua_setglobal(L, PY_API_NAME); // api python int index = 0; while (py_lib[index].name) { set_table_fn(L, python, py_lib[index].name, py_lib[index].func); index++; } // register all tag methods int ntag = lua_newtag(L); index = 0; while (lua_tag_methods[index].name) { lua_pushcfunction(L, lua_tag_methods[index].func); lua_settagmethod(L, ntag, lua_tag_methods[index].name); index++; } // tag event set_table_number(L, python, PY_API_TAG, ntag); PyObject *pyObject = Py_True; Py_INCREF(pyObject); set_table_usertag(L, python, PY_TRUE, py_object_container(L, pyObject, 0), ntag); pyObject = Py_False; Py_INCREF(pyObject); set_table_usertag(L, python, PY_FALSE, py_object_container(L, pyObject, 0), ntag); pyObject = Py_None; Py_INCREF(pyObject); set_table_usertag(L, python, PY_NONE, py_object_container(L, pyObject, 0), ntag); return 0; }
/* * Set default values to program's options. */ void init_options(void) { lua_newtable(lua); set_table_boolean("certificates", 1); set_table_boolean("crammd5", 1); set_table_boolean("create", 0); set_table_boolean("expunge", 1); set_table_number("keepalive", 29); set_table_boolean("namespace", 1); set_table_string("recover", "all"); set_table_boolean("starttls", 1); set_table_boolean("subscribe", 0); set_table_number("timeout", 60); lua_setglobal(lua, "options"); }