diff options
Diffstat (limited to 'pos2an.lua')
-rw-r--r-- | pos2an.lua | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/pos2an.lua b/pos2an.lua new file mode 100644 index 0000000..7b67b00 --- /dev/null +++ b/pos2an.lua @@ -0,0 +1,69 @@ +script_name = "pos -> an" +script_description = "double click the video then snap to an \\an" +script_author = "garret" +script_version = "1" + + +local function escape_pattern(txt) + local magic_chars = "%^%$%(%)%%.%[%]%*%+%-%?" + return txt:gsub("(["..magic_chars.."])", "%%%1") +end + +local function main(sub, sel) + local vidx, vidy = aegisub.video_size() + local left = vidx * 0.25 + local right = vidx - (vidx * 0.25) + local top = vidy * 0.32 + local bottom = vidy - (vidx * 0.35) + -- todo: have these customisable in a gui in v2 + + if not vidx then + aegisub.log("open a video") + aegisub.cancel() + -- todo: might be nice to use script res for this + -- but realistically if youre using this, youve got a video open + end + for _, i in ipairs(sel) do + local line = sub[i] + local x + local y + local tag + local c = 0 + line.text = string.gsub(line.text, "\\an%d", "") + line.text = string.gsub(line.text, "{}", "") + for postag, posx, posy in string.gmatch(line.text, "{[^}]*(\\pos%(([^,]+), *([^)]+)%))[^}]*}") do + if c == 0 then + x = tonumber(posx) + y = tonumber(posy) + tag = escape_pattern(postag) + end + c = c + 1 + end + if c == 0 then goto continue end + -- aegi is luajit + + local s + + if y <= top then + s = "t" elseif + y >= bottom then s = "b" + else s = "c" end + + if x <= left then + s = s.."l" elseif + x >= right then s = s.."r" + else s = s.."c" end + + local AN_MAP = { + tl = 7, tc = 8, tr = 9, + cl = 4, cc = 5, cr = 6, + bl = 1, bc = 2, br = 3, + } + + line.text = string.gsub(line.text, tag, "\\an"..AN_MAP[s]) + sub[i] = line + ::continue:: + end +end + +aegisub.register_macro(script_name, script_description, main) |