add timings copier
for copying song timings, so eng+romaji+moonrunes all line up
This commit is contained in:
parent
d636f1b008
commit
a9cd2df73f
|
@ -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
|
Loading…
Reference in New Issue