-- Automation 4 test file -- Create a Filter feature that does some kara stuff script_name = "Automation 4 test 6" script_description = "Test basic export filters" script_author = "Niels Martin Hansen" script_version = "1" include("utils.lua") function test6_2(subtitles, config) --[[for i = 1, #subtitles do local l = subtitles[i] if l.class == "dialogue" then local nl = table.copy(l) nl.text = "Copied!" subtitles.insert(i, nl) break end end]] end function test6(subtitles, config) aegisub.progress.task("Collecting style data") local styles = {} for i = 1, #subtitles do aegisub.debug.out("finding styles, line " .. i) local l = subtitles[i] if l.class == "dialogue" then break end if l.class == "style" then aegisub.debug.out(" found style: " .. l.name) styles[l.name] = l end aegisub.progress.set(100 * i / #subtitles) end local res = {} local i = 1 while i <= #subtitles do aegisub.debug.out("producing effect, line " .. i) local l = subtitles[i] if l.class == "dialogue" then aegisub.debug.out(" found dialogue: " .. l.text) local res = {} do_line(styles, l, config, res) aegisub.debug.out(" lines returned by do_line: " .. #res) for j,nl in ipairs(res) do subtitles.insert(i+j, nl) end aegisub.debug.out(" done inserting generated lines") subtitles.delete(i) i = i + #res else aegisub.debug.out(" not dialogue") i = i + 1 end aegisub.progress.task(string.format("Producing effect (%d/%d)", i, #subtitles)) aegisub.progress.set(100 * i / #subtitles) end end function do_line(styles, line, config, res) local k = aegisub.parse_karaoke_data(line) aegisub.debug.out(" syllables generated from line: " .. #k) local left = 0 for j = 1, #k do aegisub.debug.out(" syllable " .. j .. " is: " .. k[j].text) local nl = table.copy(line) nl.text = string.format("{\\t(%d,%d,\\fscx50)\\pos(%d,20)}%s", k[j].start_time, k[j].end_time, left, k[j].text_stripped) left = left + (aegisub.text_extents(styles[nl.style], k[j].text_stripped)) table.insert(res, nl) end end aegisub.register_filter("Stupid karaoke", "Makes some more karaoke-like stuff", 2000, test6, nil) aegisub.register_filter("Lame test", "Simple test of filters, just inserting a new line", 2000, test6_2)