cr restyler v2

original made lots of assumptions about the default style (and cr's styles, to some extent)
v2 copies the values from the styles themselves, and only tags if the value is actually different.
works with _all_ styles, not just the 4 i put in v1. still can't help if the cr script doesn't use styles properly.
not quite done yet, still need to sort out the handling of inline tags, but very much usable
This commit is contained in:
garret 2021-08-15 23:33:55 +01:00
parent baf6fa9fea
commit f5bc664a4e
1 changed files with 32 additions and 20 deletions

View File

@ -1,40 +1,52 @@
script_name="CR Restyler"
script_description="become a fansubber with a click of a button"
script_author = "garret"
script_version = "2021-06-15"
script_version = "2.0.0-dev"
include("karaskel.lua")
include("cleantags.lua")
-- Main -> Default
-- Top -> an8
-- italics -> i1
-- flashback -> default
function add_tags(line)
local txt = line.text
local style = line.style
if style:match("Italics") then
-- TODO: detect already existing tags
-- probably need some kind of ass parsing, or a hack with match()
function add_tags(txt, italic, align) -- everything except txt is boolean. nil = don't change, !nil = change to this value
--[[not quite happy with this, it overwrites the alignment - ie line is "{\an4} blah blah" and style is an8, it just changes it to an8
realisticly this _probably_ won't be a problem, but still would like to try and stop it at some point to be safe
italics is fine, it just does {\i1\i0}, which is jank and bad but works fine so i won't worry about it too much]]
if italic == true then
txt="{\\i1}"..txt
elseif italics == false then
txt="{\\i0}"..txt
end
if style:match("Top") then
txt="{\\an8}"..txt
if align ~= nil then
txt="{\\an"..align.."}"..txt
end
line.text = cleantags(txt)
return line
txt = cleantags(txt)
return txt
end
function change_styles(line)
local style = line.style
if style:match("Top") or style:match("Italics") or style:match("Main") or style:match("Flashback") then
line.style="Default"
function get_new(old, new)
local i = nil
if old ~= new then
i = old
end
return line
return i
end
function main(sub, sel)
local _, styles = karaskel.collect_head(sub) -- i'd like to not have it log if possible
local new_style_name = "Default" -- the one we'll be changing stuff to - TODO: configurable
local new_style = styles[new_style_name]
for h, i in ipairs(sel) do
-- maybe don't do if the style has "sign" in the name?
-- need proper list of stuff cr uses
local line = sub[i]
line = add_tags(line)
line = change_styles(line)
local old_style = styles[line.style]
local italic = get_new(old_style.italic, new_style.italic)
local align = get_new(old_style.align, new_style.align)
line.style = new_style_name
line.text = add_tags(line.text, italic, align)
sub[i] = line
end
aegisub.set_undo_point(script_name)