aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgarret <garret@airmail.cc>2022-06-17 22:56:29 +0100
committergarret <garret@airmail.cc>2022-06-17 22:56:29 +0100
commita9cd2df73f08fd8373d45cdb8dbdb63f5039c59e (patch)
treed8ee7d495965aa8b26ea8d03058166ef5b0c0331
parentd636f1b008fa1dfc665b9eff2764002202631e13 (diff)
downloadaegisub-scripts-a9cd2df73f08fd8373d45cdb8dbdb63f5039c59e.tar.gz
aegisub-scripts-a9cd2df73f08fd8373d45cdb8dbdb63f5039c59e.tar.bz2
aegisub-scripts-a9cd2df73f08fd8373d45cdb8dbdb63f5039c59e.zip
add timings copier
for copying song timings, so eng+romaji+moonrunes all line up
-rw-r--r--macros/garret.timings_copier.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/macros/garret.timings_copier.lua b/macros/garret.timings_copier.lua
new file mode 100644
index 0000000..8b79cc0
--- /dev/null
+++ b/macros/garret.timings_copier.lua
@@ -0,0 +1,54 @@
+script_name = "Timings copier"
+script_description = "for copying song timings"
+script_version = "1.0.0"
+script_author = "garret"
+script_namespace = "garret.timings_copier"
+
+local haveDepCtrl, DependencyControl, depctrl = pcall(require, "l0.DependencyControl")
+if haveDepCtrl then
+ depctrl = DependencyControl {}
+end
+
+local function get_blocks(sub, sel)
+ local src_style = sub[sel[1]].style
+ local src_len = 1
+ for i = 2, #sel do
+ if sub[sel[i]].style == src_style then
+ src_len = src_len + 1
+ else
+ break
+ end
+ end
+ local blocks = #sel / src_len
+ if blocks % 1 ~= 0 then
+ aegisub.log(0, "FATAL: Block lengths are not equal!\n")
+ aegisub.log(3, "HINT: Each \"block\" of lines must be the same length, e.g. you can't have less romaji than english, or vice versa. a block is a group of consecutive lines with the same style.")
+ aegisub.cancel()
+ else
+ return src_len, blocks
+ end
+end
+
+local function copy(sub, sel, offset, blocks)
+ for index = 1, offset do
+ line = sub[sel[index]]
+ for mul = 1, blocks - 1 do
+ block_line = sub[sel[offset * mul + index]]
+ block_line.start_time = line.start_time
+ block_line.end_time = line.end_time
+ sub[sel[offset * mul + index]] = block_line
+ end
+ end
+end
+
+local function main(sub, sel)
+ offset, blocks = get_blocks(sub, sel)
+ copy(sub, sel, offset, blocks)
+ aegisub.set_undo_point(script_name)
+end
+
+if haveDepCtrl then
+ depctrl:registerMacro(main)
+else
+ aegisub.register_macro(script_name, script_description, main)
+end