Fix for end font tag in ssa/ass - thx Milad :)

This commit is contained in:
niksedk 2014-09-09 21:45:52 +02:00
parent baf242d84a
commit b8794d3f2c
2 changed files with 17 additions and 45 deletions

View File

@ -369,7 +369,7 @@ Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
return list;
}
private static string FormatText(Paragraph p)
public static string FormatText(Paragraph p)
{
string text = p.Text.Replace(Environment.NewLine, "\\N");
text = text.Replace("<i>", @"{\i1}");
@ -384,13 +384,19 @@ Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
int count = 0;
while (text.Contains("<font ") && count < 10)
{
int start = text.IndexOf(@"<font ");
int start = text.IndexOf(@"<font ", StringComparison.Ordinal);
int end = text.IndexOf('>', start);
if (end > 0)
{
string fontTag = text.Substring(start + 4, end - (start + 4));
text = text.Remove(start, end - start + 1);
text = text.Replace("</font>", string.Empty);
int indexOfEndFont = text.IndexOf("</font>", start, StringComparison.Ordinal);
if (indexOfEndFont > 0)
{
text = text.Remove(indexOfEndFont, 7);
if (indexOfEndFont < text.Length - 9)
text = text.Insert(indexOfEndFont, "{\\c}");
}
fontTag = FormatTag(ref text, start, fontTag, "face=\"", "\"", "fn", "}");
fontTag = FormatTag(ref text, start, fontTag, "face='", "'", "fn", "}");
@ -403,7 +409,7 @@ Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
}
count++;
}
return text.Replace("}{", string.Empty);
return text.Replace("{\\c}", "@___@@").Replace("}{", string.Empty).Replace("@___@@", "{\\c}").Replace("{\\c}{\\c&", "{\\c&");
}
private static string FormatTag(ref string text, int start, string fontTag, string tag, string endSign, string ssaTagName, string endSsaTag)
@ -510,7 +516,10 @@ Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
else
text = text.Insert(start, "<font color=\"" + color + "\"" + extraTags + ">");
int indexOfEndTag = text.IndexOf("{\\c}", start);
if (indexOfEndTag > 0)
int indexOfNextColorTag = text.IndexOf("{\\c&", start);
if (indexOfNextColorTag > 0 && (indexOfNextColorTag < indexOfEndTag || indexOfEndTag == -1))
text = text.Insert(indexOfNextColorTag, "</font>");
else if (indexOfEndTag > 0)
text = text.Remove(indexOfEndTag, "{\\c}".Length).Insert(indexOfEndTag, "</font>");
else
text += "</font>";

View File

@ -121,50 +121,13 @@ Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
if (!string.IsNullOrEmpty(p.Extra) && isValidAssHeader && styles.Contains(p.Extra))
style = p.Extra;
if (p.IsComment)
sb.AppendLine(string.Format(commentWriteFormat, start, end, FormatText(p), style, layer, actor, effect));
sb.AppendLine(string.Format(commentWriteFormat, start, end, AdvancedSubStationAlpha.FormatText(p), style, layer, actor, effect));
else
sb.AppendLine(string.Format(paragraphWriteFormat, start, end, FormatText(p), style, layer, actor, effect));
sb.AppendLine(string.Format(paragraphWriteFormat, start, end, AdvancedSubStationAlpha.FormatText(p), style, layer, actor, effect));
}
return sb.ToString().Trim();
}
private static string FormatText(Paragraph p)
{
string text = p.Text.Replace(Environment.NewLine, "\\N");
text = text.Replace("<i>", @"{\i1}");
text = text.Replace("</i>", @"{\i0}");
text = text.Replace("</i>", @"{\i}");
text = text.Replace("<u>", @"{\u1}");
text = text.Replace("</u>", @"{\u0}");
text = text.Replace("</u>", @"{\u}");
text = text.Replace("<b>", @"{\b1}");
text = text.Replace("</b>", @"{\b0}");
text = text.Replace("</b>", @"{\b}");
int count = 0;
while (text.Contains("<font ") && count < 10)
{
int start = text.IndexOf(@"<font ");
int end = text.IndexOf('>', start);
if (end > 0)
{
string fontTag = text.Substring(start + 4, end - (start + 4));
text = text.Remove(start, end - start + 1);
text = text.Replace("</font>", string.Empty);
fontTag = FormatTag(ref text, start, fontTag, "face=\"", "\"", "fn", "}");
fontTag = FormatTag(ref text, start, fontTag, "face='", "'", "fn", "}");
fontTag = FormatTag(ref text, start, fontTag, "size=\"", "\"", "fs", "}");
fontTag = FormatTag(ref text, start, fontTag, "size='", "'", "fs", "}");
fontTag = FormatTag(ref text, start, fontTag, "color=\"", "\"", "c&H", "&}");
fontTag = FormatTag(ref text, start, fontTag, "color='", "'", "c&H", "&}");
}
count++;
}
return text;
}
private static void LoadStylesFromAdvancedSubstationAlpha(Subtitle subtitle, string title, string header, string headerNoStyles, StringBuilder sb)
{
try