diff options
author | garret <garret@airmail.cc> | 2022-06-17 22:56:29 +0100 |
---|---|---|
committer | garret <garret@airmail.cc> | 2022-06-17 22:56:29 +0100 |
commit | a9cd2df73f08fd8373d45cdb8dbdb63f5039c59e (patch) | |
tree | d8ee7d495965aa8b26ea8d03058166ef5b0c0331 /macros | |
parent | d636f1b008fa1dfc665b9eff2764002202631e13 (diff) | |
download | aegisub-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
Diffstat (limited to 'macros')
-rw-r--r-- | macros/garret.timings_copier.lua | 54 |
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 |