diff --git a/clean-k-tags.lua b/clean-k-tags.lua index 2b7de39..c1daf07 100644 --- a/clean-k-tags.lua +++ b/clean-k-tags.lua @@ -5,26 +5,39 @@ 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) - 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.]+[^}]-}.*)$" - for _, i in ipairs(sel) do - 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 - subs[i] = line - before, tag, k1, between, k2, after = line.text:match(expr) + 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