diff options
author | garret <garret@airmail.cc> | 2024-11-17 01:28:33 +0000 |
---|---|---|
committer | garret <garret@airmail.cc> | 2024-11-17 01:28:33 +0000 |
commit | 8074e6ddb06899a3f359fd8db47a70133471829b (patch) | |
tree | 502b692e23470c760ea4cd74f0e4f8ebc9468d8e /shenanigans-poc.lua | |
parent | 80f92954b9873cd0532bf4b2d684c147d36d6a5d (diff) | |
download | aegisub-scripts-8074e6ddb06899a3f359fd8db47a70133471829b.tar.gz aegisub-scripts-8074e6ddb06899a3f359fd8db47a70133471829b.tar.bz2 aegisub-scripts-8074e6ddb06899a3f359fd8db47a70133471829b.zip |
mark the shenanigans proof-of-concept as such
Diffstat (limited to 'shenanigans-poc.lua')
-rw-r--r-- | shenanigans-poc.lua | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/shenanigans-poc.lua b/shenanigans-poc.lua new file mode 100644 index 0000000..bce22fc --- /dev/null +++ b/shenanigans-poc.lua @@ -0,0 +1,81 @@ +script_name = "Import Shenanigans" +script_description = "imports shenanigans" +script_author = "garret" +script_version = "0.1.1" +script_namespace = "garret.shenanigans" + +local SHENAN_PATTERN = "shenan ([^;]*)" + +local haveDepCtrl, DependencyControl, depctrl = pcall(require, "l0.DependencyControl") +local parser +if haveDepCtrl then + depctrl = DependencyControl({ + --feed="TODO", + { + { + "myaa.ASSParser", + version = "0.0.4", -- very sketch about this + url = "http://github.com/TypesettingTools/Myaamori-Aegisub-Scripts", + feed = "https://raw.githubusercontent.com/TypesettingTools/Myaamori-Aegisub-Scripts/master/DependencyControl.json", + optional = true, + }, + }, + }) + parser = depctrl:requireModules() +end + +local function main(sub) + local imports = {} + local i = 1 + + -- using a while/repeat until loop instead of a for here, so i can fuck around with the number + -- i do this to skip past shenanigans that've already been added without deleting them + + repeat + local line = sub[i] + if line.class == "dialogue" then + if line.effect == "import" then + local f = io.open(aegisub.decode_path(line.text), "r") + local imported_sub = parser.parse_file(f).events + f:close() + + for _, imported_line in ipairs(imported_sub) do + if imported_line.class == "dialogue" then + local name = imported_line.effect:match(SHENAN_PATTERN) + if name then + imports[name] = imports[name] or {} -- declare if not present + table.insert(imports[name], imported_line) + end + end + end + elseif line.effect ~= "" then + aegisub.log(5, i..": has effect: "..line.effect) + local name = line.effect:match(SHENAN_PATTERN) + local shenans = imports[name] + if shenans == nil then + + elseif shenans ~= "done" then + for idx, val in ipairs(shenans) do + sub.insert(i + idx, val) + end + sub.delete(sub, i) + i = i + #shenans - 1 + imports[name] = "done" + elseif shenans == "done" then + aegisub.log(5, "deleting "..line.text) + sub.delete(sub, i) + i = i - 1 -- the next line has now moved up 1, so we need to move up 1 as well + -- something about 2 hard problems + end + end + end + if i >= #sub then i = #sub end -- otherwise you can get out of range errors + i = i + 1 + until i == #sub + 1 +end + +if haveDepCtrl then + depctrl:registerMacro(main) +else + aegisub.register_macro(script_name, script_description, main) +end |