mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
Fix for DCiname and italic - thx Marco :)
This commit is contained in:
parent
f0688308b8
commit
65f47f4517
@ -83,10 +83,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
string languageEnglishName;
|
||||
try
|
||||
{
|
||||
string languageShortName = LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle);
|
||||
var languageShortName = LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle);
|
||||
var ci = CultureInfo.CreateSpecificCulture(languageShortName);
|
||||
languageEnglishName = ci.EnglishName;
|
||||
int indexOfStartP = languageEnglishName.IndexOf('(');
|
||||
var indexOfStartP = languageEnglishName.IndexOf('(');
|
||||
if (indexOfStartP > 1)
|
||||
{
|
||||
languageEnglishName = languageEnglishName.Remove(indexOfStartP).Trim();
|
||||
@ -97,10 +97,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
languageEnglishName = "English";
|
||||
}
|
||||
|
||||
string hex = Guid.NewGuid().ToString().RemoveChar('-');
|
||||
var hex = Guid.NewGuid().ToString().RemoveChar('-');
|
||||
hex = hex.Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-");
|
||||
|
||||
string xmlStructure = "<DCSubtitle Version=\"1.0\">" + Environment.NewLine +
|
||||
var xmlStructure = "<DCSubtitle Version=\"1.0\">" + Environment.NewLine +
|
||||
" <SubtitleID>" + hex.ToLowerInvariant() + "</SubtitleID>" + Environment.NewLine +
|
||||
" <MovieTitle></MovieTitle>" + Environment.NewLine +
|
||||
" <ReelNumber>1</ReelNumber>" + Environment.NewLine +
|
||||
@ -115,7 +115,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
xml.PreserveWhitespace = true;
|
||||
|
||||
var ss = Configuration.Settings.SubtitleSettings;
|
||||
string loadedFontId = "Font1";
|
||||
var loadedFontId = "Font1";
|
||||
if (!string.IsNullOrEmpty(ss.CurrentDCinemaFontId))
|
||||
{
|
||||
loadedFontId = ss.CurrentDCinemaFontId;
|
||||
@ -137,7 +137,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
xml.DocumentElement.SelectSingleNode("Language").InnerText = ss.CurrentDCinemaLanguage;
|
||||
xml.DocumentElement.SelectSingleNode("LoadFont").Attributes["URI"].InnerText = ss.CurrentDCinemaFontUri;
|
||||
xml.DocumentElement.SelectSingleNode("LoadFont").Attributes["Id"].InnerText = loadedFontId;
|
||||
int fontSize = ss.CurrentDCinemaFontSize;
|
||||
var fontSize = ss.CurrentDCinemaFontSize;
|
||||
xml.DocumentElement.SelectSingleNode("Font").Attributes["Id"].InnerText = loadedFontId;
|
||||
xml.DocumentElement.SelectSingleNode("Font").Attributes["Color"].InnerText = "FF" + Utilities.ColorToHex(ss.CurrentDCinemaFontColor).TrimStart('#').ToUpperInvariant();
|
||||
xml.DocumentElement.SelectSingleNode("Font").Attributes["Effect"].InnerText = ss.CurrentDCinemaFontEffect;
|
||||
@ -145,8 +145,8 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
xml.DocumentElement.SelectSingleNode("Font").Attributes["Size"].InnerText = ss.CurrentDCinemaFontSize.ToString();
|
||||
|
||||
var mainListFont = xml.DocumentElement.SelectSingleNode("Font");
|
||||
int no = 0;
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
var no = 0;
|
||||
foreach (var p in subtitle.Paragraphs)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(p.Text))
|
||||
{
|
||||
@ -184,11 +184,11 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
bool alignVCenter = p.Text.StartsWith("{\\a9}", StringComparison.Ordinal) || p.Text.StartsWith("{\\a10}", StringComparison.Ordinal) || p.Text.StartsWith("{\\a11}", StringComparison.Ordinal) || // sub station alpha
|
||||
p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal); // advanced sub station alpha
|
||||
|
||||
string text = Utilities.RemoveSsaTags(p.Text);
|
||||
var text = Utilities.RemoveSsaTags(p.Text);
|
||||
|
||||
var lines = text.SplitToLines();
|
||||
int vPos;
|
||||
int vPosFactor = (int)Math.Round(fontSize / 7.4);
|
||||
var vPosFactor = (int)Math.Round(fontSize / 7.4);
|
||||
if (alignVTop)
|
||||
{
|
||||
vPos = Configuration.Settings.SubtitleSettings.DCinemaBottomMargin; // Bottom margin is normally 8
|
||||
@ -202,10 +202,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
vPos = (lines.Count * vPosFactor) - vPosFactor + Configuration.Settings.SubtitleSettings.DCinemaBottomMargin; // Bottom margin is normally 8
|
||||
}
|
||||
|
||||
bool isItalic = false;
|
||||
int fontNo = 0;
|
||||
var isItalic = false;
|
||||
var fontNo = 0;
|
||||
var fontColors = new Stack<string>();
|
||||
foreach (string line in lines)
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var textNode = xml.CreateElement("Text");
|
||||
|
||||
@ -256,7 +256,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
direction.InnerText = "horizontal";
|
||||
textNode.Attributes.Append(direction);
|
||||
|
||||
int i = 0;
|
||||
var i = 0;
|
||||
var txt = new StringBuilder();
|
||||
var html = new StringBuilder();
|
||||
XmlNode nodeTemp = xml.CreateElement("temp");
|
||||
@ -308,14 +308,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
}
|
||||
else if (line.Substring(i).StartsWith("<font color=", StringComparison.Ordinal) && line.Substring(i + 3).Contains('>'))
|
||||
{
|
||||
int endOfFont = line.IndexOf('>', i);
|
||||
var endOfFont = line.IndexOf('>', i);
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
nodeTemp.InnerText = txt.ToString();
|
||||
html.Append(nodeTemp.InnerXml);
|
||||
txt.Clear();
|
||||
}
|
||||
string c = GetDCinemaColorString(line.Substring(i + 12, endOfFont - (i + 12)));
|
||||
var c = GetDCinemaColorString(line.Substring(i + 12, endOfFont - (i + 12)));
|
||||
fontColors.Push(c);
|
||||
fontNo++;
|
||||
i = endOfFont;
|
||||
@ -464,7 +464,8 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
no++;
|
||||
}
|
||||
}
|
||||
string s = ToUtf8XmlString(xml).Replace("encoding=\"utf-8\"", "encoding=\"UTF-8\"");
|
||||
|
||||
var s = ToUtf8XmlString(xml).Replace("encoding=\"utf-8\"", "encoding=\"UTF-8\"");
|
||||
while (s.Contains("</Font> ") || s.Contains(" <Font ") || s.Contains(Environment.NewLine + "<Font ") || s.Contains("</Font>" + Environment.NewLine))
|
||||
{
|
||||
while (s.Contains(" Font"))
|
||||
@ -577,7 +578,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
|
||||
if (node.Attributes?["Color"] != null)
|
||||
{
|
||||
ss.CurrentDCinemaFontColor = System.Drawing.ColorTranslator.FromHtml("#" + node.Attributes["Color"].InnerText);
|
||||
ss.CurrentDCinemaFontColor = ColorTranslator.FromHtml("#" + node.Attributes["Color"].InnerText);
|
||||
}
|
||||
|
||||
if (node.Attributes?["Effect"] != null)
|
||||
@ -822,13 +823,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
}
|
||||
|
||||
var hex = s.TrimStart('#');
|
||||
for (int i = s.Length - 1; i >= 0; i--)
|
||||
for (var i = s.Length - 1; i >= 0; i--)
|
||||
{
|
||||
if (!CharUtils.IsHexadecimal(s[i]))
|
||||
{
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
return "#" + hex;
|
||||
}
|
||||
|
||||
@ -836,7 +838,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
var parts = s.Split(':', '.', ',');
|
||||
|
||||
int milliseconds = int.Parse(parts[3]) * 4; // 000 to 249
|
||||
var milliseconds = int.Parse(parts[3]) * 4; // 000 to 249
|
||||
if (s.Contains('.'))
|
||||
{
|
||||
milliseconds = int.Parse(parts[3].PadRight(3, '0'));
|
||||
@ -854,6 +856,5 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
return $"{time.Hours:00}:{time.Minutes:00}:{time.Seconds:00}:{time.Milliseconds / 4:000}";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -231,18 +231,18 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
vPos = lines.Count * vPosFactor - vPosFactor + Configuration.Settings.SubtitleSettings.DCinemaBottomMargin; // Bottom margin is normally 8
|
||||
}
|
||||
|
||||
bool isItalic = false;
|
||||
int fontNo = 0;
|
||||
Stack<string> fontColors = new Stack<string>();
|
||||
foreach (string line in lines)
|
||||
var isItalic = false;
|
||||
var fontNo = 0;
|
||||
var fontColors = new Stack<string>();
|
||||
foreach (var line in lines)
|
||||
{
|
||||
XmlNode textNode = xml.CreateElement("dcst:Text", "dcst");
|
||||
var textNode = xml.CreateElement("dcst:Text", "dcst");
|
||||
|
||||
XmlAttribute vPosition = xml.CreateAttribute("Vposition");
|
||||
var vPosition = xml.CreateAttribute("Vposition");
|
||||
vPosition.InnerText = vPos.ToString();
|
||||
textNode.Attributes.Append(vPosition);
|
||||
|
||||
XmlAttribute vAlign = xml.CreateAttribute("Valign");
|
||||
var vAlign = xml.CreateAttribute("Valign");
|
||||
if (alignVTop)
|
||||
{
|
||||
vAlign.InnerText = "top";
|
||||
@ -258,7 +258,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
|
||||
textNode.Attributes.Append(vAlign); textNode.Attributes.Append(vAlign);
|
||||
|
||||
XmlAttribute hAlign = xml.CreateAttribute("Halign");
|
||||
var hAlign = xml.CreateAttribute("Halign");
|
||||
if (alignLeft)
|
||||
{
|
||||
hAlign.InnerText = "left";
|
||||
@ -274,14 +274,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
|
||||
textNode.Attributes.Append(hAlign);
|
||||
|
||||
XmlAttribute direction = xml.CreateAttribute("Direction");
|
||||
var direction = xml.CreateAttribute("Direction");
|
||||
direction.InnerText = "ltr";
|
||||
textNode.Attributes.Append(direction);
|
||||
|
||||
int i = 0;
|
||||
var i = 0;
|
||||
var txt = new StringBuilder();
|
||||
var html = new StringBuilder();
|
||||
XmlNode nodeTemp = xml.CreateElement("temp");
|
||||
var nodeTemp = xml.CreateElement("temp");
|
||||
while (i < line.Length)
|
||||
{
|
||||
if (!isItalic && line.Substring(i).StartsWith("<i>"))
|
||||
@ -299,15 +299,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
XmlNode fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
|
||||
XmlAttribute italic = xml.CreateAttribute("Italic");
|
||||
var fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
var italic = xml.CreateAttribute("Italic");
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
|
||||
if (line.Length > i + 5 && line.Substring(i + 4).StartsWith("</font>"))
|
||||
{
|
||||
XmlAttribute fontColor = xml.CreateAttribute("Color");
|
||||
var fontColor = xml.CreateAttribute("Color");
|
||||
fontColor.InnerText = fontColors.Pop();
|
||||
fontNode.Attributes.Append(fontColor);
|
||||
fontNo--;
|
||||
@ -323,7 +322,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
}
|
||||
else if (line.Substring(i).StartsWith("<font color=") && line.Substring(i + 3).Contains('>'))
|
||||
{
|
||||
int endOfFont = line.IndexOf('>', i);
|
||||
var endOfFont = line.IndexOf('>', i);
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
nodeTemp.InnerText = txt.ToString();
|
||||
@ -339,15 +338,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
XmlNode fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
|
||||
XmlAttribute fontColor = xml.CreateAttribute("Color");
|
||||
var fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
var fontColor = xml.CreateAttribute("Color");
|
||||
fontColor.InnerText = fontColors.Pop();
|
||||
fontNode.Attributes.Append(fontColor);
|
||||
|
||||
if (line.Length > i + 9 && line.Substring(i + 7).StartsWith("</i>"))
|
||||
{
|
||||
XmlAttribute italic = xml.CreateAttribute("Italic");
|
||||
var italic = xml.CreateAttribute("Italic");
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
isItalic = false;
|
||||
@ -372,15 +370,14 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
XmlNode fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
|
||||
XmlAttribute fontColor = xml.CreateAttribute("Color");
|
||||
var fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
var fontColor = xml.CreateAttribute("Color");
|
||||
fontColor.InnerText = fontColors.Peek();
|
||||
fontNode.Attributes.Append(fontColor);
|
||||
|
||||
if (isItalic)
|
||||
{
|
||||
XmlAttribute italic = xml.CreateAttribute("Italic");
|
||||
var italic = xml.CreateAttribute("Italic");
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
}
|
||||
@ -390,18 +387,18 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
}
|
||||
else if (html.Length > 0 && html.ToString().StartsWith("<dcst:Font "))
|
||||
{
|
||||
XmlDocument temp = new XmlDocument();
|
||||
var temp = new XmlDocument();
|
||||
temp.LoadXml("<root>" + html.ToString().Replace("dcst:Font", "Font") + "</root>");
|
||||
XmlNode fontNode = xml.CreateElement("dcst:Font");
|
||||
var fontNode = xml.CreateElement("dcst:Font");
|
||||
fontNode.InnerXml = temp.DocumentElement.SelectSingleNode("Font").InnerXml;
|
||||
foreach (XmlAttribute a in temp.DocumentElement.SelectSingleNode("Font").Attributes)
|
||||
{
|
||||
XmlAttribute newA = xml.CreateAttribute(a.Name);
|
||||
var newA = xml.CreateAttribute(a.Name);
|
||||
newA.InnerText = a.InnerText;
|
||||
fontNode.Attributes.Append(newA);
|
||||
}
|
||||
|
||||
XmlAttribute fontColor = xml.CreateAttribute("Color");
|
||||
var fontColor = xml.CreateAttribute("Color");
|
||||
fontColor.InnerText = fontColors.Peek();
|
||||
fontNode.Attributes.Append(fontColor);
|
||||
|
||||
@ -413,13 +410,11 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
{
|
||||
if (txt.Length > 0)
|
||||
{
|
||||
XmlNode fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
|
||||
XmlAttribute italic = xml.CreateAttribute("Italic");
|
||||
var fontNode = xml.CreateElement("dcst:Font", "dcst");
|
||||
var italic = xml.CreateAttribute("Italic");
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(line);
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(txt.ToString());
|
||||
html.Append(fontNode.OuterXml);
|
||||
}
|
||||
}
|
||||
@ -431,6 +426,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
html.Append(nodeTemp.InnerXml);
|
||||
}
|
||||
}
|
||||
|
||||
textNode.InnerXml = html.ToString();
|
||||
if (html.Length == 0)
|
||||
{
|
||||
|
@ -420,7 +420,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(line);
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(txt.ToString());
|
||||
html.Append(fontNode.OuterXml);
|
||||
}
|
||||
}
|
||||
|
@ -420,7 +420,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
||||
italic.InnerText = "yes";
|
||||
fontNode.Attributes.Append(italic);
|
||||
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(line);
|
||||
fontNode.InnerText = HtmlUtil.RemoveHtmlTags(txt.ToString());
|
||||
html.Append(fontNode.OuterXml);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user