amoegisub/clean-k-tags.lua

47 lines
1.2 KiB
Lua

local tr = aegisub.gettext
script_name = tr"Clean k tags"
script_description = tr"Remove double k tags"
script_author = "amoethyst"
script_version = "1.0"
local double_k = "^(.-{\\k[^}]-)(\\k.+)$"
-- if the first tag is K/kf this would break the timing for the previous timing
local expr = "^(.-){\\(ko?)([0-9.]+)[^}]-}([^{]-){\\[kK][fo]?([0-9.]+)[^}]-}( -{(\\[kK][fo]?)[0-9.]+[^}]-}.*)$"
function _special_k(subs, i)
line = subs[i]
before, after = line.text:match(double_k)
while after ~= nil do
line.text = before .. "}{" .. after
before, after = line.text:match(double_k)
end
before, tag, k1, between, k2, after = line.text:match(expr)
while after ~= nil do
line.text = before .. "{\\" .. tag .. tonumber(k1) + tonumber(k2) .. "}" .. between .. after
before, tag, k1, between, k2, after = line.text:match(expr)
end
return line
end
function special_k(subs, sel)
for _, i in ipairs(sel) do
ok, res = pcall(_special_k, subs, i)
if ok then
subs[i] = res
else
aegisub.log("error on line " .. i .. ": " .. line.text .. "\n")
aegisub.log(res .. "\n")
end
end
end
aegisub.register_macro(script_name, script_description, special_k)