From 354f96c081aad88bd86e19f7a0eb629626a90ca4 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 16 Jun 2007 21:57:14 +0000 Subject: [PATCH] kara-templater retime() function implemented, tested and working :) Originally committed to SVN as r1226. --- automation/autoload/kara-templater.lua | 44 +++++++++++++++++- automation/tests/kara-templater-retime.ass | 29 ++++++++++++ ...uto4-kara-templater-retime-explanation.png | Bin 0 -> 11125 bytes 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 automation/tests/kara-templater-retime.ass create mode 100644 docs/auto4-kara-templater-retime-explanation.png diff --git a/automation/autoload/kara-templater.lua b/automation/autoload/kara-templater.lua index 3c992f074..f032e1433 100644 --- a/automation/autoload/kara-templater.lua +++ b/automation/autoload/kara-templater.lua @@ -256,6 +256,47 @@ function apply_templates(meta, styles, subs, templates) } tenv.tenv = tenv + tenv.retime = function(mode, addstart, addend) + local line, syl = tenv.line, tenv.syl + local newstart, newend = line.start_time, line.end_time + addstart = addstart or 0 + addend = addend or 0 + if mode == "syl" then + newstart = line.start_time + syl.start_time + addstart + newend = line.start_time + syl.end_time + addend + elseif mode == "presyl" then + newstart = line.start_time + syl.start_time + addstart + newend = line.start_time + syl.start_time + addend + elseif mode == "postsyl" then + newstart = line.start_time + syl.end_time + addstart + newend = line.start_time + syl.end_time + addend + elseif mode == "preline" then + newstart = line.start_time + addstart + newend = line.start_time + addend + elseif mode == "postline" then + newstart = line.end_time + addstart + newend = line.end_time + addend + elseif mode == "start2syl" then + newstart = line.start_time + addstart + newend = line.start_time + syl.start_time + addend + elseif mode == "syl2end" then + newstart = line.start_time + syl.end_time + addstart + newend = line.end_time + addend + elseif mode == "set" or mode == "abs" then + newstart = addstart + newend = addend + elseif mode == "sylpct" then + newstart = line.start_time + syl.start_time + addstart*syl.duration/100 + newend = line.start_time + syl.start_time + addend*syl.duration/100 + -- wishlist: something for fade-over effects, + -- "time between previous line and this" and + -- "time between this line and next" + end + line.start_time = newstart + line.end_time = newend + return "" + end + -- run all run-once code snippets for k, t in pairs(templates.once) do assert(t.code, "WTF, a 'once' template without code?") @@ -375,8 +416,7 @@ function apply_line(meta, styles, subs, line, templates, tenv) tenv.orgline = line tenv.line = nil tenv.syl = nil - tenv.char = nil - tenv.furi = nil + tenv.basesyl = nil -- Apply all line templates aegisub.debug.out(5, "Running line templates\n") diff --git a/automation/tests/kara-templater-retime.ass b/automation/tests/kara-templater-retime.ass new file mode 100644 index 000000000..c9176540d --- /dev/null +++ b/automation/tests/kara-templater-retime.ass @@ -0,0 +1,29 @@ +[Script Info] +Title: Default Aegisub file +ScriptType: v4.00+ +WrapStyle: 0 +PlayResX: 640 +PlayResY: 480 +Video Aspect Ratio: 0 +Video Zoom: 8 +Video Position: 500 +Last Style Storage: Default +Video File: ?dummy:50.000000:1000:640:480:226:221:236:c + +[V4+ Styles] +Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding +Style: Default,Arial,50,&H00FFFFFF,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,5,10,10,10,0 + +[Events] +Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("abs",1000,2000)!{\pos($x,$y)\1c&H0000FF&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("preline",-100)!{\pos($x,$y)\1c&H000000&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("start2syl")!{\pos($x,$y)\1c&HFF0000&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("presyl",-200,0)!{\pos($x,$y)\1a&HFF&\3c&H0000FF&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("syl")!{\pos($x,$y)\1c&H00FF00&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("postsyl",0,200)!{\pos($x,$y)\1a&HFF&\3c&H00FF00&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("syl2end",200,0)!{\pos($x,$y)\1c&HFF00FF&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("postline",0,100)!{\pos($x,$y)\1c&H00FFFF&} +Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template noblank,!retime("sylpct",50,100)!{\pos($center,$middle)\an5\1a&HFF&\3c&HFFFFFF&\fscy300\t(\3a&HFF&)} +Dialogue: 0,0:00:10.00,0:00:11.00,Default,,0000,0000,0000,,{\k30}ha{\k20}hi{\k50}ho +Dialogue: 0,0:00:11.00,0:00:16.00,Default,,0000,0000,0000,, \ No newline at end of file diff --git a/docs/auto4-kara-templater-retime-explanation.png b/docs/auto4-kara-templater-retime-explanation.png new file mode 100644 index 0000000000000000000000000000000000000000..5af9f06b211b7df8692bc3d1c82ae864ff35779e GIT binary patch literal 11125 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 M*F>l2%H2o*2gcqK_W%F@ literal 0 HcmV?d00001