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());  		}  	} | 
 Swift
 Swift