aboutsummaryrefslogtreecommitdiffstats
path: root/pos2an.lua
diff options
context:
space:
mode:
Diffstat (limited to 'pos2an.lua')
-rw-r--r--pos2an.lua69
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)