diff --git a/rsc/lua/lib.lua b/rsc/lua/lib.lua index a73f1364bfd08643e0223126ab95d0f542085a70..b8f400e7da65e89c369686f306a35e0159cf75f0 100644 --- a/rsc/lua/lib.lua +++ b/rsc/lua/lib.lua @@ -43,15 +43,14 @@ StdType = enum { "NUMBER", "COLOR", "BOOLEAN", + "STRING", } -- Vivy global object construction -os = nil -io = nil -debug = nil -Vivy = { } -Version = { MAJOR = 0, MINOR = 1, PATCH = 0, LABEL = "alpha" } -Vivy["Fun"] = FreeFunctions() +os, io, debug = nil, nil, nil +Vivy = { } +Version = { MAJOR = 0, MINOR = 1, PATCH = 0, LABEL = "alpha" } +Vivy["___Fun"] = FreeFunctions() Vivy["Version"] = setmetatable(Version, { __tostring = function () @@ -68,7 +67,18 @@ Vivy["Version"] = setmetatable(Version, { end }) --- Standard color creation function +function Vivy:global () return Vivy.___Fun end + +function Vivy:module (tbl) + if type(tbl) == "table" and #tbl == 1 then + return Vivy.___Fun.getModule(tbl[1]) + elseif type(tbl) == "string" then + return Vivy.___Fun.getModule(tbl) + else + error("Invalid argument, you should pass a single string", 2) + end +end + function Vivy:newColor (colorString) -- Not implemented return false @@ -81,4 +91,4 @@ Vivy["Vivy"] = Vivy -- Vivy keyword... setrometatable(Vivy) generalize(Iterable) -print = Vivy.Fun.print +print = Vivy.___Fun.print diff --git a/src/Lib/Script/CRTPLuaScriptObject.cc b/src/Lib/Script/CRTPLuaScriptObject.cc index 87ae0a28682f5a8ac9626939c4ec49fa7123c038..21cf5f0d98ae53dbf23f4f2c05a3fa2bfe62787b 100644 --- a/src/Lib/Script/CRTPLuaScriptObject.cc +++ b/src/Lib/Script/CRTPLuaScriptObject.cc @@ -8,13 +8,38 @@ using namespace Vivy::Script; // FreeFunctions int -FreeFunctions::print(lua_State *L) noexcept +FreeFunctions::print(lua_State *const L) noexcept { const std::string_view arg = CHECK_STRING_VIEW(L, 1); out(LuaContext::getContext(L)) << "OUT: " << arg << "\n"; LUA_RETURN_NOTHING(L); } +int +FreeFunctions::getModule(lua_State *const L) noexcept +{ + const auto *const context = LuaContext::getContext(L); + const std::string_view modName = CHECK_STRING_VIEW(L, 1); + [[maybe_unused]] const ModuleDeclaration *const mod = context->getModule(modName); + return 1; +} + +int +FreeFunctions::start(lua_State *const L) noexcept +{ + lua_settop(L, 0); + lua_pushinteger(L, 0); + return 1; +} + +int +FreeFunctions::finish(lua_State *const L) noexcept +{ + lua_settop(L, 0); + lua_pushinteger(L, 0); + return 1; +} + // ModuleDeclaration bool diff --git a/src/Lib/Script/CRTPLuaScriptObject.hh b/src/Lib/Script/CRTPLuaScriptObject.hh index 1c09bc203862bca3f00dd6b53c501c725b154fe3..c51b8e6afd462508d5fde1c4207897b543ef9bc3 100644 --- a/src/Lib/Script/CRTPLuaScriptObject.hh +++ b/src/Lib/Script/CRTPLuaScriptObject.hh @@ -271,9 +271,15 @@ public: script_class (FreeFunctions) { LUA_SCRIPTABLE_CLASS(FreeFunctions) - static int print(lua_State *) noexcept; + static int print(lua_State *const) noexcept; + static int getModule(lua_State *const) noexcept; + static int start(lua_State *const) noexcept; + static int finish(lua_State *const) noexcept; method_list metaMethods = { luaRegDefaultGC }; - method_list methods = { LUA_DECL_METHOD(FreeFunctions, print), LUA_DECL_CREATE(FreeFunctions) }; + method_list methods = { LUA_DECL_METHOD(FreeFunctions, getModule), + LUA_DECL_METHOD(FreeFunctions, start), + LUA_DECL_METHOD(FreeFunctions, finish), + LUA_DECL_METHOD(FreeFunctions, print), LUA_DECL_CREATE(FreeFunctions) }; }; } diff --git a/utils/lua/sample-spec.lua b/utils/lua/sample-spec.lua index 824ffef7f07479e808c787f95f7e49fc15fae14f..21e7dea097b9c71acc85f055ac6696fd37310fec 100644 --- a/utils/lua/sample-spec.lua +++ b/utils/lua/sample-spec.lua @@ -14,7 +14,7 @@ module:export { "printFoo", function () prettyPrint ("Bar") end } module:export { "retime_lines", LINE, function (opt, line) line.start = line.start + opt.preTime line.finish = line.finish + opt.postTime - if line.start <= 0 then line.start = 0 end + if line.start <= global:start() then line.start = global:start() end if line.finish >= global:finish() then line.finish = global:finish() end return line end }