mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-28 15:02:35 +01:00
Fix for end font tag in ssa/ass - thx Milad :)
This commit is contained in:
parent
baf242d84a
commit
b8794d3f2c
@ -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>";
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user