1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
|