Try to handle Arabic in WebVTT better - thx OmrSi :)

Fix  #3383
This commit is contained in:
Nikolaj Olsson 2019-02-23 14:13:44 +01:00
parent 58bd2bd72a
commit ad8358d501

View File

@ -231,7 +231,6 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
foreach (var paragraph in subtitle.Paragraphs) foreach (var paragraph in subtitle.Paragraphs)
{ {
paragraph.Text = ColorWebVttToHtml(paragraph.Text); paragraph.Text = ColorWebVttToHtml(paragraph.Text);
paragraph.Text = System.Net.WebUtility.HtmlDecode(paragraph.Text);
} }
subtitle.Renumber(); subtitle.Renumber();
@ -368,7 +367,13 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{ {
if (p.Text.Contains('<')) if (p.Text.Contains('<'))
{ {
string text = p.Text; string text = p.Text
.Replace("<c.arabic>", string.Empty)
.Replace("</c.arabic>", string.Empty)
.Replace("&rlm;", "\u202B")
.Replace("&lmr;", "\u202A");
text = System.Net.WebUtility.HtmlDecode(text);
var match = regexWebVttColorMulti.Match(text); var match = regexWebVttColorMulti.Match(text);
while (match.Success) while (match.Success)
@ -438,18 +443,25 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
var match = regex.Match(res); var match = regex.Match(res);
while (match.Success) while (match.Success)
{ {
var fontString = "<font color=\"" + match.Value.Substring(3, match.Value.Length - 4) + "\">"; var value = match.Value.Substring(3, match.Value.Length - 4);
if (match.Value.StartsWith("<c.color", StringComparison.Ordinal)) if (match.Value.StartsWith("<c.color", StringComparison.Ordinal))
fontString = "<font color=\"#" + match.Value.Substring(3 + 5, match.Value.Length - 4 - 5) + "\">";
fontString = fontString.Trim('"').Trim('\'');
res = res.Remove(match.Index, match.Length).Insert(match.Index, fontString);
var endIndex = res.IndexOf("</c>", match.Index, StringComparison.OrdinalIgnoreCase);
if (endIndex >= 0)
{ {
res = res.Remove(endIndex, 4).Insert(endIndex, "</font>"); value = "#" + match.Value.Substring(3 + 5, match.Value.Length - 4 - 5);
} }
match = regex.Match(res);
if (value != "arabic")
{
var fontString = "<font color=\"" + value + "\">";
fontString = fontString.Trim('"').Trim('\'');
res = res.Remove(match.Index, match.Length).Insert(match.Index, fontString);
var endIndex = res.IndexOf("</c>", match.Index, StringComparison.OrdinalIgnoreCase);
if (endIndex >= 0)
{
res = res.Remove(endIndex, 4).Insert(endIndex, "</font>");
}
}
match = regex.Match(res, match.Index + 1);
} }
return res; return res;
} }
@ -573,7 +585,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
internal static TimeCode GetTimeCodeFromString(string time) internal static TimeCode GetTimeCodeFromString(string time)
{ {
// hh:mm:ss.mmm // hh:mm:ss.mmm
string[] timeCode = time.Trim().Split(':', '.', ' '); var timeCode = time.Trim().Split(':', '.', ' ');
return new TimeCode(int.Parse(timeCode[0]), return new TimeCode(int.Parse(timeCode[0]),
int.Parse(timeCode[1]), int.Parse(timeCode[1]),
int.Parse(timeCode[2]), int.Parse(timeCode[2]),