From 9ee251930d7a9af1e76d22a2a64fccb5e2b9ac6d Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Tue, 17 Aug 2021 10:31:07 +0200 Subject: [PATCH] SCRIPT: Opt for a one file script, with first the declaration then the implementation --- rsc/lua/module.lua | 6 +-- src/Lib/Script/CRTPLuaScriptObject.hh | 3 -- .../CRTPLuaScriptObject/ModuleDeclaration.cc | 29 +---------- src/Lib/Script/LuaContext.cc | 11 ++--- utils/lua/sample-spec.lua | 29 ----------- utils/lua/sample-spec.module | 48 +++++++++++++++---- 6 files changed, 47 insertions(+), 79 deletions(-) delete mode 100644 utils/lua/sample-spec.lua diff --git a/rsc/lua/module.lua b/rsc/lua/module.lua index 8975ff8e..3468636a 100644 --- a/rsc/lua/module.lua +++ b/rsc/lua/module.lua @@ -86,21 +86,19 @@ end -- The module declaration block -- DeclareModule { --- name = ..., description = ..., file = ..., author = ..., +-- name = ..., description = ..., author = ..., -- revision = ..., imports = { ... }, options = { ... }, -- fuctions = { ... }, jobs = { ... } -- } --- DeclareModule { name = ..., file = ..., author = ... } +-- DeclareModule { name = ..., author = ... } function DeclareModule(tbl) ___checkTable(tbl) if not tbl.name then error("Invalid DeclareModule block, Missing name", 2) end - if not tbl.file then error("Invalid DeclareModule block, Missing file", 2) end if not tbl.author then error("Invalid DeclareModule block, Missing author", 2) end local module = ModuleDeclaration() -- Standard things module:setName(tbl.name) - module:setImplementationFile(tbl.file) module:setAuthorName(tbl.author) -- Optional simple things diff --git a/src/Lib/Script/CRTPLuaScriptObject.hh b/src/Lib/Script/CRTPLuaScriptObject.hh index 989f0140..7405442e 100644 --- a/src/Lib/Script/CRTPLuaScriptObject.hh +++ b/src/Lib/Script/CRTPLuaScriptObject.hh @@ -240,7 +240,6 @@ script_class (ModuleDeclaration) { static int setAuthorName(lua_State *const) noexcept; static int setRevision(lua_State *const) noexcept; static int setDescription(lua_State *const) noexcept; - static int setImplementationFile(lua_State *const) noexcept; static int setImports(lua_State *const) noexcept; static int setOptions(lua_State *const) noexcept; static int setFunctions(lua_State *const) noexcept; @@ -257,7 +256,6 @@ script_class (ModuleDeclaration) { LUA_DECL_METHOD(ModuleDeclaration, setDescription), LUA_DECL_METHOD(ModuleDeclaration, setRevision), LUA_DECL_METHOD(ModuleDeclaration, setAuthorName), - LUA_DECL_METHOD(ModuleDeclaration, setImplementationFile), LUA_DECL_METHOD(ModuleDeclaration, setImports), LUA_DECL_METHOD(ModuleDeclaration, setOptions), LUA_DECL_METHOD(ModuleDeclaration, setFunctions), @@ -279,7 +277,6 @@ public: std::string authorName{}; std::string revision{}; std::string moduleDescription{}; - std::string implementationFile{}; std::vector<OptionDeclaration *> moduleOptions{}; std::vector<FunctionDeclaration *> moduleFunctions{}; std::vector<JobDeclaration *> moduleJobs{}; diff --git a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc index 82910f87..2b97727c 100644 --- a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc +++ b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc @@ -101,21 +101,6 @@ ModuleDeclaration::setDescription(lua_State *const L) noexcept LUA_RETURN_NOTHING(L); } -int -ModuleDeclaration::setImplementationFile(lua_State *const L) noexcept -{ - auto *const self = ModuleDeclaration::CHECK(L, 1); - auto *const context = LuaContext::getContext(L); - self->implementationFile = CHECK_STRING_VIEW(L, 2); - Utils::trim(self->implementationFile); - self->implementationFile = - QFileInfo(QFileInfo(context->getCurrentLuaFile().c_str()).absoluteDir(), - self->implementationFile.c_str()) - .absoluteFilePath() - .toStdString(); - LUA_RETURN_NOTHING(L); -} - int ModuleDeclaration::setImports(lua_State *const L) noexcept { @@ -200,23 +185,11 @@ ModuleDeclaration::validateModule(lua_State *const L) const noexcept auto *const context = LuaContext::getContext(L); // Minimal module file - if (moduleName.empty() || authorName.empty() || implementationFile.empty()) { + if (moduleName.empty() || authorName.empty()) { context->setFailed("The module does not have the minimal required information"); return false; } - // Implementation file exists, relative to the .module file - { - QString moduleFile = context->getCurrentLuaFile().c_str(); - QFileInfo moduleInfo(moduleFile); - QFileInfo fileInfo(moduleInfo.absoluteDir(), implementationFile.c_str()); - if (!fileInfo.exists()) { - context->setFailed("The module " + moduleName + - " does not have a valid implementation file"); - return false; - } - } - // Imports { std::vector<std::string> usedImports{}; diff --git a/src/Lib/Script/LuaContext.cc b/src/Lib/Script/LuaContext.cc index 9ca957e8..bf874c2a 100644 --- a/src/Lib/Script/LuaContext.cc +++ b/src/Lib/Script/LuaContext.cc @@ -77,12 +77,6 @@ LuaContext::loadDocument(std::shared_ptr<ScriptDocument> doc) noexcept return Code::Error; } - auto *const mod = getModule(lastLoadedModule); - const QFileInfo impl(mod->implementationFile.c_str()); - if (Code::Success != loadFile(impl.absoluteFilePath().toStdString().c_str())) { - setFailed("Failed to load implementation file"); - return Code::Error; - } return Code::Success; } @@ -130,6 +124,11 @@ LuaContext::loadFile(const char *file) noexcept QString LuaContext::getLastLuaError() noexcept { + const int type = lua_type(L, -1); + if (type != LUA_TSTRING) { + return QString("No lua error detected..."); + } + const char *error = lua_tostring(L, -1); QString ret = QString("%1").arg(error); lua_pop(L, 1); diff --git a/utils/lua/sample-spec.lua b/utils/lua/sample-spec.lua deleted file mode 100644 index 21e7dea0..00000000 --- a/utils/lua/sample-spec.lua +++ /dev/null @@ -1,29 +0,0 @@ --- vim: ft=lua -global = Vivy:global { } -module = Vivy:module { "sample-spec" } - -utils = module:import { "utils" } -prettyPrint = module:import { "utils", "prettyPrint" } - -tripleCopySyl = module:export { "tripleCopySyl", function (syl) - return { syl:copy(), syl:copy(), syl:copy() } -end } - -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 <= global:start() then line.start = global:start() end - if line.finish >= global:finish() then line.finish = global:finish() end - return line -end } - -module:export { "create_syllabes", SYLLABE, function (opt, syl) - local newSyls = tripleCopySyl(syl) - newSyls[1].start = syl.line.start - newSyls[1].finish = syl.start - newSyls[3].finish = syl.line.finish - newSyls[3].start = syl.finish - return newSyls -end } diff --git a/utils/lua/sample-spec.module b/utils/lua/sample-spec.module index c65d82e2..74ad9edb 100644 --- a/utils/lua/sample-spec.module +++ b/utils/lua/sample-spec.module @@ -1,17 +1,17 @@ --- vim: ft=lua -custom_opt = DeclareOption { option1 = false } -time_opt = DeclareOption { preTime = -900, postTime = 300, } -color_opt = DeclareOption { color1 = Vivy:newColor("#314159") } +--- Declaration + +local custom_opt = DeclareOption { option1 = false } +local time_opt = DeclareOption { preTime = -900, postTime = 300, } +local color_opt = DeclareOption { color1 = Vivy:newColor("#314159") } -DeclareModule { +local module = DeclareModule { name = "sample-spec", description = "Sample script used for the specification proposition", - file = "sample-spec.lua", author = "Vivy", revision = "rev-1254", imports = { "utils" }, options = { custom_opt, time_opt, color_opt }, - functions = { + functions = { DeclareFunction { "tripleCopySyl" }, DeclareFunction { "printFoo" }, ImportFunction { "utils", "prettyPrint" }, @@ -19,6 +19,36 @@ DeclareModule { jobs = { DeclareJob { "set_retime", options = { time_opt } }, DeclareJob { "demultiply_syllabes" }, - ImportJob { "utils", "color_after_read_3", options = { color_opt } }, - }, + ImportJob { "utils", "color_after_read_3", "utils", options = { color_opt } } + } } + +--- Implementation + +local utils = module:import { "utils" } +local prettyPrint = module:import { "utils", "prettyPrint" } + +local tripleCopySyl = module:export { "tripleCopySyl", function (syl) + return { syl:copy(), syl:copy(), syl:copy() } +end } + +module:export { "printFoo", function () prettyPrint ("Bar") end } + +module:export { "retime_lines", LINE, function (opt, line) + line.start = line.start + opt.preTime + line.finish = line.start + opt.postTime + if line.start <= 0 then line.start = 0 end + if line.finish >= Vivy:finish() then line.finish = Vivy:finish() end + return line +end } + +module:export { "create_syllabes", SYLLABE, function (opt, syl) + local newSyls = tripleCopySyl(syl) + newSyls[1].start = syl.line.start + newSyls[1].finish = syl.start + newSyls[3].finish = syl.line.finish + newSyls[3].start = syl.finish + return newSyls +end } + +-- vim: ft=lua -- GitLab