From 49f5b1ae448f66c33f3388ca9ea98423a03b115b Mon Sep 17 00:00:00 2001 From: red5h4d0w <45214944+red5h4d0w@users.noreply.github.com> Date: Sun, 2 Feb 2025 16:24:35 -0500 Subject: [PATCH 1/3] :construction: make karaskel aware of style change with caveat that it works only if the reset style tag is placed after the \k (ex: {\k20\rStyle Name} --- automation/include/karaskel-auto4.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/automation/include/karaskel-auto4.lua b/automation/include/karaskel-auto4.lua index f5f17a708b..326e654ebb 100644 --- a/automation/include/karaskel-auto4.lua +++ b/automation/include/karaskel-auto4.lua @@ -272,10 +272,19 @@ function karaskel.preproc_line_size(meta, styles, line) line.width, line.height, line.descent, line.extlead = aegisub.text_extents(line.styleref, line.text_stripped) line.width = line.width * meta.video_x_correct_factor + local cur_style = line.styleref + -- Calculate syllable sizing for s = 0, line.kara.n do local syl = line.kara[s] - syl.style = line.styleref + + -- Detect any reset style tags + local style_reset_name = syl.text:match("%{.*\\%r([^}\\]+)") + if style_reset_name and styles[style_reset_name] then + cur_style = styles[style_reset_name] + end + + syl.style = cur_style syl.width, syl.height = aegisub.text_extents(syl.style, syl.text_spacestripped) syl.width = syl.width * meta.video_x_correct_factor syl.prespacewidth = aegisub.text_extents(syl.style, syl.prespace) * meta.video_x_correct_factor From f643909ae0b67f0059e9f5f979270acc185b092f Mon Sep 17 00:00:00 2001 From: red5h4d0w <45214944+red5h4d0w@users.noreply.github.com> Date: Sun, 2 Feb 2025 17:30:46 -0500 Subject: [PATCH 2/3] assume furi use parent syl style --- automation/include/karaskel-auto4.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/automation/include/karaskel-auto4.lua b/automation/include/karaskel-auto4.lua index 326e654ebb..1e4fc7406f 100644 --- a/automation/include/karaskel-auto4.lua +++ b/automation/include/karaskel-auto4.lua @@ -283,7 +283,7 @@ function karaskel.preproc_line_size(meta, styles, line) if style_reset_name and styles[style_reset_name] then cur_style = styles[style_reset_name] end - + syl.style = cur_style syl.width, syl.height = aegisub.text_extents(syl.style, syl.text_spacestripped) syl.width = syl.width * meta.video_x_correct_factor @@ -302,6 +302,9 @@ function karaskel.preproc_line_size(meta, styles, line) for f = 1, line.furi.n do local furi = line.furi[f] furi.style = line.furistyle + if styles[furi.syl.style.name .. "-furigana"] then + furi.style = styles[furi.syl.style.name .. "-furigana"] + end furi.width, furi.height = aegisub.text_extents(furi.style, furi.text) furi.width = furi.width * meta.video_x_correct_factor furi.prespacewidth = 0 From 2ec9e5d006434edecc5b01e934d62eb2b17ea2dd Mon Sep 17 00:00:00 2001 From: red5h4d0w <45214944+red5h4d0w@users.noreply.github.com> Date: Sun, 2 Feb 2025 18:12:03 -0500 Subject: [PATCH 3/3] workaround style change at end of syllable --- automation/include/karaskel-auto4.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/automation/include/karaskel-auto4.lua b/automation/include/karaskel-auto4.lua index 1e4fc7406f..1bc58b35d8 100644 --- a/automation/include/karaskel-auto4.lua +++ b/automation/include/karaskel-auto4.lua @@ -278,13 +278,17 @@ function karaskel.preproc_line_size(meta, styles, line) for s = 0, line.kara.n do local syl = line.kara[s] + syl.style = cur_style -- Detect any reset style tags - local style_reset_name = syl.text:match("%{.*\\%r([^}\\]+)") + local _, reset_end, style_reset_name = syl.text:find("%{.*\\%r([^}\\]+)") if style_reset_name and styles[style_reset_name] then cur_style = styles[style_reset_name] + -- match does not include final } + if reset_end + 1 < #syl.text then + syl.style = cur_style + end end - syl.style = cur_style syl.width, syl.height = aegisub.text_extents(syl.style, syl.text_spacestripped) syl.width = syl.width * meta.video_x_correct_factor syl.prespacewidth = aegisub.text_extents(syl.style, syl.prespace) * meta.video_x_correct_factor