From f7d5a224824890e9ea7d4b989c9fbe55711f2c7f 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 d21cd78b10..4631396fd5 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 51629be3e610670b9a371054e60c2a417a3552f1 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 4631396fd5..a305ea66ec 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 abcc5cde5f019209b5fed5fefe5d5f05a3451dc9 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 a305ea66ec..487548812a 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