Skip to content

Commit

Permalink
SubtitleParse: fix AssTagParse while the value block is not properly …
Browse files Browse the repository at this point in the history
…end, try logging it
  • Loading branch information
MIRIMIRIM committed Jul 31, 2024
1 parent 58d9485 commit d6b487c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 7 deletions.
10 changes: 9 additions & 1 deletion SubtitleParse/src/AssTagParse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -677,9 +677,11 @@ private static void RecordTag(Span<char> tag, StringBuilder tags)
/// </summary>
/// <param name="block">override tags block</param>
/// <returns></returns>
public static List<char[]> GetTagsFromOvrBlock(Span<char> block)
public static List<char[]> GetTagsFromOvrBlock(Span<char> block) => GetTagsFromOvrBlock(block, out _);
public static List<char[]> GetTagsFromOvrBlock(Span<char> block, out string? warningTags)
{
List<char[]> cal = [];
warningTags = null;

if (IsOverrideBlock(block) && block.Length > 2)
{
Expand Down Expand Up @@ -728,6 +730,12 @@ public static List<char[]> GetTagsFromOvrBlock(Span<char> block)
preOvr = preEndIndex;
}
}
else
{
SplitOnlyOvrTags(block[(preOvr + 1)..], cal);
valueStartIndex = -1;
warningTags = block[(preOvr + 1)..].ToString();
}

if (valueStartIndex == -1)
{
Expand Down
25 changes: 19 additions & 6 deletions SubtitleParse/src/AssUtils/AssFontParse.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using System.Diagnostics;
using System.Text;
using Mobsub.SubtitleParse.AssTypes;
using Microsoft.Extensions.Logging;
using ZLogger;

namespace Mobsub.SubtitleParse.AssUtils;

Expand All @@ -11,14 +14,16 @@ public class AssFontParse
/// </summary>
/// <param name="events">event line collection</param>
/// <param name="styles">style collection</param>
/// <param name="logger"></param>
/// <returns>key is a string order by "font_used_name,font_weight,font_italic,font_encoding" (1 = true, 0 = false), value is rune collection</returns>
public static Dictionary<string, List<Rune>> GetUsedFonts(List<AssEvent> events, List<AssStyle> styles)
public static Dictionary<string, List<Rune>> GetUsedFonts(List<AssEvent> events, List<AssStyle> styles, ILogger<AssTagParse>? logger = null)
{
Dictionary<string, List<Rune>> 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();
Expand All @@ -38,7 +43,7 @@ public static Dictionary<string, List<Rune>> GetUsedFonts(List<AssEvent> 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))
Expand All @@ -64,9 +69,9 @@ public static Dictionary<string, List<Rune>> GetUsedFonts(List<AssEvent> events,
return usedFontGlyphs;
}

public static Dictionary<AssFontInfo, List<Rune>> GetUsedFontInfos(List<AssEvent> events, List<AssStyle> styles)
public static Dictionary<AssFontInfo, List<Rune>> GetUsedFontInfos(List<AssEvent> events, List<AssStyle> styles, ILogger<AssTagParse>? logger = null)
{
var maps = GetUsedFonts(events, styles);
var maps = GetUsedFonts(events, styles, logger);
//return maps.ToDictionary(map => ParseAssFontInfo(map.Key), map => map.Value);
Dictionary<AssFontInfo, List<Rune>> result = [];
foreach (var map in maps)
Expand Down Expand Up @@ -144,9 +149,17 @@ public static AssStyle GetStyleByName(List<AssStyle> styles, string styleName)
/// <param name="weight"></param>
/// <param name="lineNumber"></param>
/// <param name="lineNumberFirst"></param>
private static void GetOverrideBlockFont(Span<char> tag, AssStyle eventStyle, List<AssStyle> styles, StringBuilder fn, StringBuilder fe, StringBuilder italic, StringBuilder weight, int lineNumber, int lineNumberFirst)
/// <param name="logger"></param>
private static void GetOverrideBlockFont(Span<char> tag, AssStyle eventStyle, List<AssStyle> styles, StringBuilder fn, StringBuilder fe, StringBuilder italic, StringBuilder weight, int lineNumber, int lineNumberFirst, ILogger<AssTagParse>? 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);
}
Expand Down

0 comments on commit d6b487c

Please sign in to comment.