From 2fed4573e8ca0755aefd2ffbc6135d9d3431195b Mon Sep 17 00:00:00 2001 From: Tera <1527149+Denoder@users.noreply.github.com> Date: Wed, 8 Oct 2025 21:31:08 +0300 Subject: [PATCH 1/6] Fix subtitle regex formatting They changed 1 value and everything just decided to fuck up. This should cover all bases (maybe) for the styles. Also added checks for the Script Info because PlayRes was being added twice for 1 episode because it already had it. added SubtitleLanguage because I wanted it :| --- crunchy.ts | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/crunchy.ts b/crunchy.ts index f038e6d..11474fb 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2676,78 +2676,78 @@ export default class Crunchy implements ServiceClass { // Fix fonts switch (langItem.cr_locale) { case 'de-DE': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; }); break; case 'id-ID': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'hi-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'ta-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'te-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'vi-VN': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'ms-MY': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'th-TH': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'zh-CN': case 'zh-HK': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'ru-RU': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; }); break; case 'it-IT': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; }); break; case 'ar-SA': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; }); break; case 'fr-FR': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; }); break; case 'pt-BR': - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; }); break; default: - sBody = sBody.replace(/^Style:\s*([^,]+),.*?,(\d+),0,0,0,0$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; @@ -2757,9 +2757,21 @@ export default class Crunchy implements ServiceClass { // Add PlayResX, PlayResY, Timer and WrapStyle const idx = lines.findIndex((l) => l.trim() === '[Script Info]'); - if (idx !== -1) { - lines.splice(idx + 3, 0, `PlayResX: ${playResX}`, `PlayResY: ${playResY}`, 'Timer: 0.0000', 'WrapStyle: 0'); - } + if (idx !== -1) { + const hasPlayResX = lines.some(l => l.match(/^PlayResX:/)); + const hasPlayResY = lines.some(l => l.match(/^PlayResY:/)); + const hasTimer = lines.some(l => l.match(/^Timer:/)); + const hasWrapStyle = lines.some(l => l.match(/^WrapStyle:/)); + + const toInsert = [`SubtitleLanguage: ${langItem.name}`]; + + if (!hasPlayResX) toInsert.push(`PlayResX: ${playResX}`); + if (!hasPlayResY) toInsert.push(`PlayResY: ${playResY}`); + if (!hasTimer) toInsert.push('Timer: 0.0000'); + if (!hasWrapStyle) toInsert.push('WrapStyle: 0'); + + lines.splice(idx + 3, 0, ...toInsert); + } sBody = lines.join('\n'); } @@ -3307,3 +3319,4 @@ export default class Crunchy implements ServiceClass { return episodeList; } } + From f86341f340068ba816b80860d4b88961c811459e Mon Sep 17 00:00:00 2001 From: Tera <1527149+Denoder@users.noreply.github.com> Date: Wed, 8 Oct 2025 21:35:59 +0300 Subject: [PATCH 2/6] Align --- crunchy.ts | 157 +++++++++++++++++++++++++++-------------------------- 1 file changed, 79 insertions(+), 78 deletions(-) diff --git a/crunchy.ts b/crunchy.ts index 11474fb..52ec163 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2674,84 +2674,84 @@ export default class Crunchy implements ServiceClass { sBody = sBody.replace(/,,,,25.00,,/g, ',,0,0,0,,').replace('PlayDepth: 0\n', ''); // Fix fonts - switch (langItem.cr_locale) { - case 'de-DE': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; - }); - break; - case 'id-ID': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'hi-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'ta-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'te-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'vi-VN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'ms-MY': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'th-TH': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'zh-CN': - case 'zh-HK': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'ru-RU': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; - }); - break; - case 'it-IT': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; - }); - break; - case 'ar-SA': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; - }); - break; - case 'fr-FR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; - }); - break; - case 'pt-BR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; - }); - break; - default: - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name) => { - return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - } + switch (langItem.cr_locale) { + case 'de-DE': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; + }); + break; + case 'id-ID': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'hi-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'ta-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'te-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'vi-VN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'ms-MY': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'th-TH': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'zh-CN': + case 'zh-HK': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'ru-RU': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; + }); + break; + case 'it-IT': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; + }); + break; + case 'ar-SA': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; + }); + break; + case 'fr-FR': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; + }); + break; + case 'pt-BR': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; + }); + break; + default: + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + } const lines = sBody.split('\n'); @@ -3320,3 +3320,4 @@ export default class Crunchy implements ServiceClass { } } + From 4ec767decfcf2909e2d77e7abd861a85d1a36aa1 Mon Sep 17 00:00:00 2001 From: Tera <1527149+Denoder@users.noreply.github.com> Date: Wed, 8 Oct 2025 21:39:03 +0300 Subject: [PATCH 3/6] is the formatting fixed? --- crunchy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crunchy.ts b/crunchy.ts index 52ec163..590515b 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2748,7 +2748,7 @@ export default class Crunchy implements ServiceClass { break; default: sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,2,0010,0010,0018,0`; }); break; } @@ -3321,3 +3321,4 @@ export default class Crunchy implements ServiceClass { } + From fbcf0121ef50393bbe4d2f48fa47bb1af867d2c2 Mon Sep 17 00:00:00 2001 From: Tera <1527149+Denoder@users.noreply.github.com> Date: Wed, 8 Oct 2025 21:46:21 +0300 Subject: [PATCH 4/6] Update crunchy.ts --- crunchy.ts | 157 +++++++++++++++++++++++++++-------------------------- 1 file changed, 79 insertions(+), 78 deletions(-) diff --git a/crunchy.ts b/crunchy.ts index 590515b..dc620c7 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2674,84 +2674,84 @@ export default class Crunchy implements ServiceClass { sBody = sBody.replace(/,,,,25.00,,/g, ',,0,0,0,,').replace('PlayDepth: 0\n', ''); // Fix fonts - switch (langItem.cr_locale) { - case 'de-DE': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; - }); - break; - case 'id-ID': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'hi-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'ta-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'te-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; - }); - break; - case 'vi-VN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'ms-MY': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'th-TH': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'zh-CN': - case 'zh-HK': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; - }); - break; - case 'ru-RU': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; - }); - break; - case 'it-IT': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; - }); - break; - case 'ar-SA': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; - }); - break; - case 'fr-FR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; - }); - break; - case 'pt-BR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; - }); - break; - default: - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { - return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,2,0010,0010,0018,0`; - }); - break; - } + switch (langItem.cr_locale) { + case 'de-DE': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; + }); + break; + case 'id-ID': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'hi-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'ta-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'te-IN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + case 'vi-VN': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'ms-MY': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'th-TH': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'zh-CN': + case 'zh-HK': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; + }); + break; + case 'ru-RU': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; + }); + break; + case 'it-IT': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; + }); + break; + case 'ar-SA': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; + }); + break; + case 'fr-FR': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; + }); + break; + case 'pt-BR': + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; + }); + break; + default: + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; + }); + break; + } const lines = sBody.split('\n'); @@ -3322,3 +3322,4 @@ export default class Crunchy implements ServiceClass { + From deb3e2407f8d9e47f1352bccc818df100e6c3bb2 Mon Sep 17 00:00:00 2001 From: Tera <1527149+Denoder@users.noreply.github.com> Date: Thu, 9 Oct 2025 00:36:33 +0300 Subject: [PATCH 5/6] Update crunchy.ts --- crunchy.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/crunchy.ts b/crunchy.ts index dc620c7..52b20f1 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2676,78 +2676,78 @@ export default class Crunchy implements ServiceClass { // Fix fonts switch (langItem.cr_locale) { case 'de-DE': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Arial,23,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,${align},0,0,20,1`; }); break; case 'id-ID': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'hi-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Mangal,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'ta-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Noto Sans Tamil,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'te-IN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Noto Sans Telugu,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; case 'vi-VN': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'ms-MY': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'th-TH': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Noto Sans Thai,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'zh-CN': case 'zh-HK': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Arial Unicode MS,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H7F404040,-1,0,0,0,100,100,0,0,1,2,1,${align},0020,0020,0022,0`; }); break; case 'ru-RU': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Tahoma,22,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0025,204`; }); break; case 'it-IT': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,${align},0010,0010,0015,1`; }); break; case 'ar-SA': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Adobe Arabic,26,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,0,${align},0010,0010,0018,0`; }); break; case 'fr-FR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,1,1,${align},0002,0002,0025,1`; }); break; case 'pt-BR': - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Trebuchet MS,22,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,1,${align},0040,0040,0015,0`; }); break; default: - sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+,\d+,.+$/gm, (match, name, align) => { + sBody = sBody.replace(/^Style:\s*([^,]+),[^,]+\s*,\s*[\d.]+(?:,[^,]+){15},(\d+)(?:,[^,]+){3},(\d+)$/gm, (match, name, align) => { return `Style: ${name},Trebuchet MS,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,${align},0010,0010,0018,0`; }); break; From 958296c900f41e5b1b3122f1bad3a31c08562027 Mon Sep 17 00:00:00 2001 From: Denoder Date: Wed, 8 Oct 2025 18:15:08 -0400 Subject: [PATCH 6/6] Fix formatting --- crunchy.ts | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/crunchy.ts b/crunchy.ts index 52b20f1..6df37df 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -2757,21 +2757,21 @@ export default class Crunchy implements ServiceClass { // Add PlayResX, PlayResY, Timer and WrapStyle const idx = lines.findIndex((l) => l.trim() === '[Script Info]'); - if (idx !== -1) { - const hasPlayResX = lines.some(l => l.match(/^PlayResX:/)); - const hasPlayResY = lines.some(l => l.match(/^PlayResY:/)); - const hasTimer = lines.some(l => l.match(/^Timer:/)); - const hasWrapStyle = lines.some(l => l.match(/^WrapStyle:/)); + if (idx !== -1) { + const hasPlayResX = lines.some((l) => l.match(/^PlayResX:/)); + const hasPlayResY = lines.some((l) => l.match(/^PlayResY:/)); + const hasTimer = lines.some((l) => l.match(/^Timer:/)); + const hasWrapStyle = lines.some((l) => l.match(/^WrapStyle:/)); - const toInsert = [`SubtitleLanguage: ${langItem.name}`]; + const toInsert = [`SubtitleLanguage: ${langItem.name}`]; - if (!hasPlayResX) toInsert.push(`PlayResX: ${playResX}`); - if (!hasPlayResY) toInsert.push(`PlayResY: ${playResY}`); - if (!hasTimer) toInsert.push('Timer: 0.0000'); - if (!hasWrapStyle) toInsert.push('WrapStyle: 0'); + if (!hasPlayResX) toInsert.push(`PlayResX: ${playResX}`); + if (!hasPlayResY) toInsert.push(`PlayResY: ${playResY}`); + if (!hasTimer) toInsert.push('Timer: 0.0000'); + if (!hasWrapStyle) toInsert.push('WrapStyle: 0'); - lines.splice(idx + 3, 0, ...toInsert); - } + lines.splice(idx + 3, 0, ...toInsert); + } sBody = lines.join('\n'); } @@ -3319,7 +3319,3 @@ export default class Crunchy implements ServiceClass { return episodeList; } } - - - -