diff --git a/duetto-meika.lua b/duetto-meika.lua new file mode 100644 index 0000000..f33c9ce --- /dev/null +++ b/duetto-meika.lua @@ -0,0 +1,57 @@ +local tr = aegisub.gettext + +script_name = tr"DUETTO MEIKA" +script_description = tr"changes the styles of a line where there is a marker" +script_author = "amoethyst" + +function duetto(subs, sel) + styles = {} + + -- create the style map + for _, line in ipairs(subs) do + if line.class == "style" then + styles[line.name] = line + end + end + + -- duetto~ + for _, i in ipairs(sel) do + line = subs[i] + + current_style = styles[line.style] + -- match every `s:` marker + for style_name in line.text:gmatch("{s:([^}]*)}") do + if style_name ~= current_style.name then + + style = styles[style_name] + -- build the tags to use the new style + style_string = "{" + if current_style.color1 ~= style.color1 then + style_string = style_string .. "\\c1" .. style.color1 + end + if current_style.color2 ~= style.color2 then + style_string = style_string .. "\\c2" .. style.color2 + end + if current_style.color3 ~= style.color3 then + style_string = style_string .. "\\c3" .. style.color3 + end + if current_style.color4 ~= style.color4 then + style_string = style_string .. "\\c4" .. style.color4 + end + style_string = style_string .. "}" + + -- set style + line.text = line.text:gsub("{s:" .. style_name .. "}", style_string, 1) + current_style = style + else + -- remove marker to not break everything + line.text = line.text:gsub("{s:" .. style_name .. "}", "", 1) + end + end + subs[i] = line + end + + aegisub.set_undo_point(script_name) +end + +aegisub.register_macro(script_name, script_description, duetto)