diff options
Diffstat (limited to 'Sluift/Lua/FunctionRegistry.cpp')
-rw-r--r-- | Sluift/Lua/FunctionRegistry.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/Sluift/Lua/FunctionRegistry.cpp b/Sluift/Lua/FunctionRegistry.cpp index 99ea096..df24d9c 100644 --- a/Sluift/Lua/FunctionRegistry.cpp +++ b/Sluift/Lua/FunctionRegistry.cpp @@ -7,6 +7,9 @@ #include <Sluift/Lua/FunctionRegistry.h> #include <Swiften/Base/foreach.h> +#include <Sluift/Lua/LuaUtils.h> +#include <Sluift/Lua/Exception.h> +#include <Sluift/globals.h> using namespace Swift::Lua; @@ -21,25 +24,19 @@ FunctionRegistry& FunctionRegistry::getInstance() { return instance; } -void FunctionRegistry::addFunction(const std::string& name, lua_CFunction function, const std::string& type) { +void FunctionRegistry::addFunction( + const std::string& name, lua_CFunction function, const std::string& type, + const std::string& helpDescription, const std::string& helpParameters, const std::string& helpOptions) { Registration registration; registration.name = name; registration.function = function; registration.type = type; + registration.helpDescription = helpDescription; + registration.helpParameters = helpParameters; + registration.helpOptions = helpOptions; registrations.push_back(registration); } -std::string FunctionRegistry::getMetaTableNameForType(const std::string& type) { - return "Sluift_" + type; -} - -void FunctionRegistry::registerTypeMetaTable(lua_State* L, const std::string& type) { - luaL_newmetatable(L, getMetaTableNameForType(type).c_str()); - lua_pushvalue(L, -1); - lua_setfield(L, -2, "__index"); - addFunctionsToTable(L, type); -} - void FunctionRegistry::createFunctionTable(lua_State* L, const std::string& type) { lua_newtable(L); addFunctionsToTable(L, type); @@ -49,6 +46,12 @@ void FunctionRegistry::addFunctionsToTable(lua_State* L, const std::string& type foreach(const Registration& registration, registrations) { if (registration.type == type) { lua_pushcclosure(L, registration.function, 0); + if (!registration.helpDescription.empty()) { + Lua::registerHelp(L, -1, registration.helpDescription, registration.helpParameters, registration.helpOptions); + } + else { + Lua::registerExtraHelp(L, -1, registration.type + "." + registration.name); + } lua_setfield(L, -2, registration.name.c_str()); } } |