diff --git a/SubtitleParse/src/AssTagParse.cs b/SubtitleParse/src/AssTagParse.cs index 6ec3f8e..485a5f8 100644 --- a/SubtitleParse/src/AssTagParse.cs +++ b/SubtitleParse/src/AssTagParse.cs @@ -677,9 +677,11 @@ private static void RecordTag(Span tag, StringBuilder tags) /// /// override tags block /// - public static List GetTagsFromOvrBlock(Span block) + public static List GetTagsFromOvrBlock(Span block) => GetTagsFromOvrBlock(block, out _); + public static List GetTagsFromOvrBlock(Span block, out string? warningTags) { List cal = []; + warningTags = null; if (IsOverrideBlock(block) && block.Length > 2) { @@ -728,6 +730,12 @@ public static List GetTagsFromOvrBlock(Span block) preOvr = preEndIndex; } } + else + { + SplitOnlyOvrTags(block[(preOvr + 1)..], cal); + valueStartIndex = -1; + warningTags = block[(preOvr + 1)..].ToString(); + } if (valueStartIndex == -1) { diff --git a/SubtitleParse/src/AssUtils/AssFontParse.cs b/SubtitleParse/src/AssUtils/AssFontParse.cs index 6edc22e..11c321a 100644 --- a/SubtitleParse/src/AssUtils/AssFontParse.cs +++ b/SubtitleParse/src/AssUtils/AssFontParse.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; using System.Text; using Mobsub.SubtitleParse.AssTypes; +using Microsoft.Extensions.Logging; +using ZLogger; namespace Mobsub.SubtitleParse.AssUtils; @@ -11,14 +14,16 @@ public class AssFontParse /// /// event line collection /// style collection + /// /// key is a string order by "font_used_name,font_weight,font_italic,font_encoding" (1 = true, 0 = false), value is rune collection - public static Dictionary> GetUsedFonts(List events, List styles) + public static Dictionary> GetUsedFonts(List events, List styles, ILogger? logger = null) { Dictionary> usedFontGlyphs = []; var lineNumberFirst = events.First().lineNumber; foreach (var eventLine in events) { + Debug.WriteLine(eventLine.lineNumber); if (!eventLine.IsDialogue) continue; var eventStyle = GetStyleByName(styles, eventLine.Style); var text = eventLine.Text.ToArray(); @@ -38,7 +43,7 @@ public static Dictionary> GetUsedFonts(List events, { if (slice.Length > 2) { - GetOverrideBlockFont(slice, eventStyle, styles, fn, fe, italic, weight, lineNumber, lineNumberFirst); + GetOverrideBlockFont(slice, eventStyle, styles, fn, fe, italic, weight, lineNumber, lineNumberFirst, logger); } } else if (slice.Length == 2 && AssConstants.IsEventSpecialCharPair(slice)) @@ -64,9 +69,9 @@ public static Dictionary> GetUsedFonts(List events, return usedFontGlyphs; } - public static Dictionary> GetUsedFontInfos(List events, List styles) + public static Dictionary> GetUsedFontInfos(List events, List styles, ILogger? logger = null) { - var maps = GetUsedFonts(events, styles); + var maps = GetUsedFonts(events, styles, logger); //return maps.ToDictionary(map => ParseAssFontInfo(map.Key), map => map.Value); Dictionary> result = []; foreach (var map in maps) @@ -144,9 +149,17 @@ public static AssStyle GetStyleByName(List styles, string styleName) /// /// /// - private static void GetOverrideBlockFont(Span tag, AssStyle eventStyle, List styles, StringBuilder fn, StringBuilder fe, StringBuilder italic, StringBuilder weight, int lineNumber, int lineNumberFirst) + /// + private static void GetOverrideBlockFont(Span tag, AssStyle eventStyle, List styles, StringBuilder fn, StringBuilder fe, StringBuilder italic, StringBuilder weight, int lineNumber, int lineNumberFirst, ILogger? logger = null) { - foreach (var ca in AssTagParse.GetTagsFromOvrBlock(tag)) + var tags = AssTagParse.GetTagsFromOvrBlock(tag, out var warningTags); + + if (warningTags is not null) + { + logger?.ZLogWarning($"Event line {lineNumber} ({lineNumber - lineNumberFirst}): {warningTags}"); + } + + foreach (var ca in tags) { GetOverrideFont(ca.AsSpan(), eventStyle, styles, fn, fe, italic, weight, lineNumber, lineNumberFirst); }