mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-28 06:52:35 +01:00
Minor TTML refact
This commit is contained in:
parent
91dbe44dc4
commit
d6941c4ca1
@ -21,10 +21,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
public override bool IsTimeBased => true;
|
public override bool IsTimeBased => true;
|
||||||
|
|
||||||
public static string TTMLNamespace = "http://www.w3.org/ns/ttml";
|
public static string TtmlNamespace = "http://www.w3.org/ns/ttml";
|
||||||
public static string TTMLParameterNamespace = "http://www.w3.org/ns/ttml#parameter";
|
public static string TtmlParameterNamespace = "http://www.w3.org/ns/ttml#parameter";
|
||||||
public static string TTMLStylingNamespace = "http://www.w3.org/ns/ttml#styling";
|
public static string TtmlStylingNamespace = "http://www.w3.org/ns/ttml#styling";
|
||||||
public static string TTMLMetadataNamespace = "http://www.w3.org/ns/ttml#metadata";
|
public static string TtmlMetadataNamespace = "http://www.w3.org/ns/ttml#metadata";
|
||||||
|
|
||||||
public override bool IsMine(List<string> lines, string fileName)
|
public override bool IsMine(List<string> lines, string fileName)
|
||||||
{
|
{
|
||||||
@ -106,27 +106,27 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
var styleNode = xml.CreateNode(XmlNodeType.Element, string.Empty, "style", nsmgr.LookupNamespace("ttml"));
|
var styleNode = xml.CreateNode(XmlNodeType.Element, string.Empty, "style", nsmgr.LookupNamespace("ttml"));
|
||||||
|
|
||||||
XmlAttribute attr = xml.CreateAttribute("xml:id", TTMLStylingNamespace);
|
XmlAttribute attr = xml.CreateAttribute("xml:id", TtmlStylingNamespace);
|
||||||
attr.InnerText = name;
|
attr.InnerText = name;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
attr = xml.CreateAttribute("tts:fontFamily", TTMLStylingNamespace);
|
attr = xml.CreateAttribute("tts:fontFamily", TtmlStylingNamespace);
|
||||||
attr.InnerText = fontFamily;
|
attr.InnerText = fontFamily;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
attr = xml.CreateAttribute("tts:fontWeight", TTMLStylingNamespace);
|
attr = xml.CreateAttribute("tts:fontWeight", TtmlStylingNamespace);
|
||||||
attr.InnerText = fontWeight;
|
attr.InnerText = fontWeight;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
attr = xml.CreateAttribute("tts:fontStyle", TTMLStylingNamespace);
|
attr = xml.CreateAttribute("tts:fontStyle", TtmlStylingNamespace);
|
||||||
attr.InnerText = fontStyle;
|
attr.InnerText = fontStyle;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
attr = xml.CreateAttribute("tts:color", TTMLStylingNamespace);
|
attr = xml.CreateAttribute("tts:color", TtmlStylingNamespace);
|
||||||
attr.InnerText = color;
|
attr.InnerText = color;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
attr = xml.CreateAttribute("tts:fontSize", TTMLStylingNamespace);
|
attr = xml.CreateAttribute("tts:fontSize", TtmlStylingNamespace);
|
||||||
attr.InnerText = fontSize;
|
attr.InnerText = fontSize;
|
||||||
styleNode.Attributes.Append(attr);
|
styleNode.Attributes.Append(attr);
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
var x = new XmlDocument();
|
var x = new XmlDocument();
|
||||||
x.LoadXml(subtitle.Header);
|
x.LoadXml(subtitle.Header);
|
||||||
var xnsmgr = new XmlNamespaceManager(x.NameTable);
|
var xnsmgr = new XmlNamespaceManager(x.NameTable);
|
||||||
xnsmgr.AddNamespace("ttml", TTMLNamespace);
|
xnsmgr.AddNamespace("ttml", TtmlNamespace);
|
||||||
hasStyleHead = x.DocumentElement.SelectSingleNode("ttml:head", xnsmgr) != null;
|
hasStyleHead = x.DocumentElement.SelectSingleNode("ttml:head", xnsmgr) != null;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
@ -167,12 +167,12 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
var xml = new XmlDocument();
|
var xml = new XmlDocument();
|
||||||
var nsmgr = new XmlNamespaceManager(xml.NameTable);
|
var nsmgr = new XmlNamespaceManager(xml.NameTable);
|
||||||
nsmgr.AddNamespace("ttml", TTMLNamespace);
|
nsmgr.AddNamespace("ttml", TtmlNamespace);
|
||||||
nsmgr.AddNamespace("ttp", TTMLParameterNamespace);
|
nsmgr.AddNamespace("ttp", TtmlParameterNamespace);
|
||||||
nsmgr.AddNamespace("tts", TTMLStylingNamespace);
|
nsmgr.AddNamespace("tts", TtmlStylingNamespace);
|
||||||
nsmgr.AddNamespace("ttm", TTMLMetadataNamespace);
|
nsmgr.AddNamespace("ttm", TtmlMetadataNamespace);
|
||||||
string xmlStructure = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine +
|
string xmlStructure = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine +
|
||||||
"<tt xmlns=\"" + TTMLNamespace + "\" xmlns:ttp=\"" + TTMLParameterNamespace + "\" ttp:timeBase=\"media\" xmlns:tts=\"" + TTMLStylingNamespace + "\" xml:lang=\"en\" xmlns:ttm=\"" + TTMLMetadataNamespace + "\">" + Environment.NewLine +
|
"<tt xmlns=\"" + TtmlNamespace + "\" xmlns:ttp=\"" + TtmlParameterNamespace + "\" ttp:timeBase=\"media\" xmlns:tts=\"" + TtmlStylingNamespace + "\" xml:lang=\"en\" xmlns:ttm=\"" + TtmlMetadataNamespace + "\">" + Environment.NewLine +
|
||||||
" <head>" + Environment.NewLine +
|
" <head>" + Environment.NewLine +
|
||||||
" <metadata>" + Environment.NewLine +
|
" <metadata>" + Environment.NewLine +
|
||||||
" <ttm:title></ttm:title>" + Environment.NewLine +
|
" <ttm:title></ttm:title>" + Environment.NewLine +
|
||||||
@ -237,10 +237,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Declare namespaces in the root node if not declared
|
// Declare namespaces in the root node if not declared
|
||||||
xml.DocumentElement.SetAttribute("xmlns", TTMLNamespace);
|
xml.DocumentElement.SetAttribute("xmlns", TtmlNamespace);
|
||||||
xml.DocumentElement.SetAttribute("xmlns:ttp", TTMLParameterNamespace);
|
xml.DocumentElement.SetAttribute("xmlns:ttp", TtmlParameterNamespace);
|
||||||
xml.DocumentElement.SetAttribute("xmlns:tts", TTMLStylingNamespace);
|
xml.DocumentElement.SetAttribute("xmlns:tts", TtmlStylingNamespace);
|
||||||
xml.DocumentElement.SetAttribute("xmlns:ttm", TTMLMetadataNamespace);
|
xml.DocumentElement.SetAttribute("xmlns:ttm", TtmlMetadataNamespace);
|
||||||
|
|
||||||
XmlNode body = xml.DocumentElement.SelectSingleNode("ttml:body", nsmgr);
|
XmlNode body = xml.DocumentElement.SelectSingleNode("ttml:body", nsmgr);
|
||||||
string defaultStyle = Guid.NewGuid().ToString();
|
string defaultStyle = Guid.NewGuid().ToString();
|
||||||
@ -271,7 +271,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
if (p.NewSection)
|
if (p.NewSection)
|
||||||
{
|
{
|
||||||
div = xml.CreateElement("div", TTMLNamespace);
|
div = xml.CreateElement("div", TtmlNamespace);
|
||||||
divParentNode.AppendChild(div);
|
divParentNode.AppendChild(div);
|
||||||
}
|
}
|
||||||
XmlNode paragraph = MakeParagraph(subtitle, xml, defaultStyle, no, headerStyles, regions, p);
|
XmlNode paragraph = MakeParagraph(subtitle, xml, defaultStyle, no, headerStyles, regions, p);
|
||||||
@ -282,7 +282,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
foreach (string language in languages)
|
foreach (string language in languages)
|
||||||
{
|
{
|
||||||
div = xml.CreateElement("div", TTMLNamespace);
|
div = xml.CreateElement("div", TtmlNamespace);
|
||||||
XmlAttribute attr = xml.CreateAttribute("xml:lang", "http://www.w3.org/XML/1998/namespace");
|
XmlAttribute attr = xml.CreateAttribute("xml:lang", "http://www.w3.org/XML/1998/namespace");
|
||||||
attr.Value = language;
|
attr.Value = language;
|
||||||
div.Attributes.Append(attr);
|
div.Attributes.Append(attr);
|
||||||
@ -290,11 +290,11 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
bool firstParagraph = true;
|
bool firstParagraph = true;
|
||||||
foreach (Paragraph p in subtitle.Paragraphs)
|
foreach (Paragraph p in subtitle.Paragraphs)
|
||||||
{
|
{
|
||||||
if (p.Language == language)
|
if (p.Language.Equals(language, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
if (p.NewSection && !firstParagraph)
|
if (p.NewSection && !firstParagraph)
|
||||||
{
|
{
|
||||||
div = xml.CreateElement("div", TTMLNamespace);
|
div = xml.CreateElement("div", TtmlNamespace);
|
||||||
attr = xml.CreateAttribute("xml:lang", "http://www.w3.org/XML/1998/namespace");
|
attr = xml.CreateAttribute("xml:lang", "http://www.w3.org/XML/1998/namespace");
|
||||||
attr.Value = language;
|
attr.Value = language;
|
||||||
div.Attributes.Append(attr);
|
div.Attributes.Append(attr);
|
||||||
@ -321,7 +321,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
if (p.NewSection)
|
if (p.NewSection)
|
||||||
{
|
{
|
||||||
div = xml.CreateElement("div", TTMLNamespace);
|
div = xml.CreateElement("div", TtmlNamespace);
|
||||||
divParentNode.AppendChild(div);
|
divParentNode.AppendChild(div);
|
||||||
}
|
}
|
||||||
if (convertedFromSubStationAlpha && string.IsNullOrEmpty(p.Style))
|
if (convertedFromSubStationAlpha && string.IsNullOrEmpty(p.Style))
|
||||||
@ -348,7 +348,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
var x = new XmlDocument();
|
var x = new XmlDocument();
|
||||||
x.LoadXml(new TimedText10().ToText(new Subtitle(), "tt")); // load default xml
|
x.LoadXml(new TimedText10().ToText(new Subtitle(), "tt")); // load default xml
|
||||||
var xnsmgr = new XmlNamespaceManager(x.NameTable);
|
var xnsmgr = new XmlNamespaceManager(x.NameTable);
|
||||||
xnsmgr.AddNamespace("ttml", TTMLNamespace);
|
xnsmgr.AddNamespace("ttml", TtmlNamespace);
|
||||||
var styleHead = x.DocumentElement.SelectSingleNode("ttml:head", xnsmgr);
|
var styleHead = x.DocumentElement.SelectSingleNode("ttml:head", xnsmgr);
|
||||||
styleHead.SelectSingleNode("ttml:styling", xnsmgr).RemoveAll();
|
styleHead.SelectSingleNode("ttml:styling", xnsmgr).RemoveAll();
|
||||||
foreach (string styleName in AdvancedSubStationAlpha.GetStylesFromHeader(subtitle.Header))
|
foreach (string styleName in AdvancedSubStationAlpha.GetStylesFromHeader(subtitle.Header))
|
||||||
@ -423,8 +423,8 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
text = string.Join("<br/>", text.SplitToLines());
|
text = string.Join("<br/>", text.SplitToLines());
|
||||||
XmlDocument paragraphContent = new XmlDocument();
|
XmlDocument paragraphContent = new XmlDocument();
|
||||||
paragraphContent.LoadXml(string.Format("<root>{0}</root>", text));
|
paragraphContent.LoadXml($"<root>{text}</root>");
|
||||||
ConvertParagraphNodeToTTMLNode(paragraphContent.DocumentElement, xml, paragraph);
|
ConvertParagraphNodeToTtmlNode(paragraphContent.DocumentElement, xml, paragraph);
|
||||||
}
|
}
|
||||||
catch // Wrong markup, clear it
|
catch // Wrong markup, clear it
|
||||||
{
|
{
|
||||||
@ -462,7 +462,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsFontSize = GetEffect(p, "tts:fontSize");
|
string ttsFontSize = GetEffect(p, "tts:fontSize");
|
||||||
if (!string.IsNullOrEmpty(ttsFontSize))
|
if (!string.IsNullOrEmpty(ttsFontSize))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsFontSizeAttribute = xml.CreateAttribute("tts:fontSize", TTMLStylingNamespace);
|
XmlAttribute ttsFontSizeAttribute = xml.CreateAttribute("tts:fontSize", TtmlStylingNamespace);
|
||||||
ttsFontSizeAttribute.InnerText = ttsFontSize;
|
ttsFontSizeAttribute.InnerText = ttsFontSize;
|
||||||
paragraph.Attributes.Append(ttsFontSizeAttribute);
|
paragraph.Attributes.Append(ttsFontSizeAttribute);
|
||||||
}
|
}
|
||||||
@ -470,7 +470,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsFontFamily = GetEffect(p, "tts:fontFamily");
|
string ttsFontFamily = GetEffect(p, "tts:fontFamily");
|
||||||
if (!string.IsNullOrEmpty(ttsFontFamily))
|
if (!string.IsNullOrEmpty(ttsFontFamily))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsFontFamilyAttribute = xml.CreateAttribute("tts:fontFamily", TTMLStylingNamespace);
|
XmlAttribute ttsFontFamilyAttribute = xml.CreateAttribute("tts:fontFamily", TtmlStylingNamespace);
|
||||||
ttsFontFamilyAttribute.InnerText = ttsFontFamily;
|
ttsFontFamilyAttribute.InnerText = ttsFontFamily;
|
||||||
paragraph.Attributes.Append(ttsFontFamilyAttribute);
|
paragraph.Attributes.Append(ttsFontFamilyAttribute);
|
||||||
}
|
}
|
||||||
@ -478,7 +478,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsBackgroundColor = GetEffect(p, "tts:backgroundColor");
|
string ttsBackgroundColor = GetEffect(p, "tts:backgroundColor");
|
||||||
if (!string.IsNullOrEmpty(ttsBackgroundColor))
|
if (!string.IsNullOrEmpty(ttsBackgroundColor))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsBackgroundColorAttribute = xml.CreateAttribute("tts:backgroundColor", TTMLStylingNamespace);
|
XmlAttribute ttsBackgroundColorAttribute = xml.CreateAttribute("tts:backgroundColor", TtmlStylingNamespace);
|
||||||
ttsBackgroundColorAttribute.InnerText = ttsBackgroundColor;
|
ttsBackgroundColorAttribute.InnerText = ttsBackgroundColor;
|
||||||
paragraph.Attributes.Append(ttsBackgroundColorAttribute);
|
paragraph.Attributes.Append(ttsBackgroundColorAttribute);
|
||||||
}
|
}
|
||||||
@ -486,7 +486,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsOrigin = GetEffect(p, "tts:origin");
|
string ttsOrigin = GetEffect(p, "tts:origin");
|
||||||
if (!string.IsNullOrEmpty(ttsOrigin))
|
if (!string.IsNullOrEmpty(ttsOrigin))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsOriginAttribute = xml.CreateAttribute("tts:origin", TTMLStylingNamespace);
|
XmlAttribute ttsOriginAttribute = xml.CreateAttribute("tts:origin", TtmlStylingNamespace);
|
||||||
ttsOriginAttribute.InnerText = ttsOrigin;
|
ttsOriginAttribute.InnerText = ttsOrigin;
|
||||||
paragraph.Attributes.Append(ttsOriginAttribute);
|
paragraph.Attributes.Append(ttsOriginAttribute);
|
||||||
}
|
}
|
||||||
@ -494,7 +494,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsExtent = GetEffect(p, "tts:extent");
|
string ttsExtent = GetEffect(p, "tts:extent");
|
||||||
if (!string.IsNullOrEmpty(ttsExtent))
|
if (!string.IsNullOrEmpty(ttsExtent))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsExtentAttribute = xml.CreateAttribute("tts:extent", TTMLStylingNamespace);
|
XmlAttribute ttsExtentAttribute = xml.CreateAttribute("tts:extent", TtmlStylingNamespace);
|
||||||
ttsExtentAttribute.InnerText = ttsExtent;
|
ttsExtentAttribute.InnerText = ttsExtent;
|
||||||
paragraph.Attributes.Append(ttsExtentAttribute);
|
paragraph.Attributes.Append(ttsExtentAttribute);
|
||||||
}
|
}
|
||||||
@ -502,7 +502,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
string ttsTextAlign = GetEffect(p, "tts:textAlign");
|
string ttsTextAlign = GetEffect(p, "tts:textAlign");
|
||||||
if (!string.IsNullOrEmpty(ttsTextAlign))
|
if (!string.IsNullOrEmpty(ttsTextAlign))
|
||||||
{
|
{
|
||||||
XmlAttribute ttsTextAlignAttribute = xml.CreateAttribute("tts:textAlign", TTMLStylingNamespace);
|
XmlAttribute ttsTextAlignAttribute = xml.CreateAttribute("tts:textAlign", TtmlStylingNamespace);
|
||||||
ttsTextAlignAttribute.InnerText = ttsTextAlign;
|
ttsTextAlignAttribute.InnerText = ttsTextAlign;
|
||||||
paragraph.Attributes.Append(ttsTextAlignAttribute);
|
paragraph.Attributes.Append(ttsTextAlignAttribute);
|
||||||
}
|
}
|
||||||
@ -519,7 +519,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
return paragraph;
|
return paragraph;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ConvertParagraphNodeToTTMLNode(XmlNode node, XmlDocument ttmlXml, XmlNode ttmlNode)
|
private static void ConvertParagraphNodeToTtmlNode(XmlNode node, XmlDocument ttmlXml, XmlNode ttmlNode)
|
||||||
{
|
{
|
||||||
foreach (XmlNode child in node.ChildNodes)
|
foreach (XmlNode child in node.ChildNodes)
|
||||||
{
|
{
|
||||||
@ -532,37 +532,37 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
XmlNode br = ttmlXml.CreateElement("br");
|
XmlNode br = ttmlXml.CreateElement("br");
|
||||||
ttmlNode.AppendChild(br);
|
ttmlNode.AppendChild(br);
|
||||||
|
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, br);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, br);
|
||||||
}
|
}
|
||||||
else if (child.Name == "i")
|
else if (child.Name == "i")
|
||||||
{
|
{
|
||||||
XmlNode span = ttmlXml.CreateElement("span");
|
XmlNode span = ttmlXml.CreateElement("span");
|
||||||
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontStyle", TTMLStylingNamespace);
|
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontStyle", TtmlStylingNamespace);
|
||||||
attr.InnerText = "italic";
|
attr.InnerText = "italic";
|
||||||
span.Attributes.Append(attr);
|
span.Attributes.Append(attr);
|
||||||
ttmlNode.AppendChild(span);
|
ttmlNode.AppendChild(span);
|
||||||
|
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, span);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, span);
|
||||||
}
|
}
|
||||||
else if (child.Name == "b")
|
else if (child.Name == "b")
|
||||||
{
|
{
|
||||||
XmlNode span = ttmlXml.CreateElement("span");
|
XmlNode span = ttmlXml.CreateElement("span");
|
||||||
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontWeight", TTMLStylingNamespace);
|
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontWeight", TtmlStylingNamespace);
|
||||||
attr.InnerText = "bold";
|
attr.InnerText = "bold";
|
||||||
span.Attributes.Append(attr);
|
span.Attributes.Append(attr);
|
||||||
ttmlNode.AppendChild(span);
|
ttmlNode.AppendChild(span);
|
||||||
|
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, span);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, span);
|
||||||
}
|
}
|
||||||
else if (child.Name == "u")
|
else if (child.Name == "u")
|
||||||
{
|
{
|
||||||
XmlNode span = ttmlXml.CreateElement("span");
|
XmlNode span = ttmlXml.CreateElement("span");
|
||||||
XmlAttribute attr = ttmlXml.CreateAttribute("tts:textDecoration", TTMLStylingNamespace);
|
XmlAttribute attr = ttmlXml.CreateAttribute("tts:textDecoration", TtmlStylingNamespace);
|
||||||
attr.InnerText = "underline";
|
attr.InnerText = "underline";
|
||||||
span.Attributes.Append(attr);
|
span.Attributes.Append(attr);
|
||||||
ttmlNode.AppendChild(span);
|
ttmlNode.AppendChild(span);
|
||||||
|
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, span);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, span);
|
||||||
}
|
}
|
||||||
else if (child.Name == "font")
|
else if (child.Name == "font")
|
||||||
{
|
{
|
||||||
@ -570,25 +570,25 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
if (child.Attributes["face"] != null)
|
if (child.Attributes["face"] != null)
|
||||||
{
|
{
|
||||||
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontFamily", TTMLStylingNamespace);
|
XmlAttribute attr = ttmlXml.CreateAttribute("tts:fontFamily", TtmlStylingNamespace);
|
||||||
attr.InnerText = child.Attributes["face"].Value;
|
attr.InnerText = child.Attributes["face"].Value;
|
||||||
span.Attributes.Append(attr);
|
span.Attributes.Append(attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child.Attributes["color"] != null)
|
if (child.Attributes["color"] != null)
|
||||||
{
|
{
|
||||||
XmlAttribute attr = ttmlXml.CreateAttribute("tts:color", TTMLStylingNamespace);
|
XmlAttribute attr = ttmlXml.CreateAttribute("tts:color", TtmlStylingNamespace);
|
||||||
attr.InnerText = child.Attributes["color"].Value;
|
attr.InnerText = child.Attributes["color"].Value;
|
||||||
span.Attributes.Append(attr);
|
span.Attributes.Append(attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ttmlNode.AppendChild(span);
|
ttmlNode.AppendChild(span);
|
||||||
|
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, span);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, span);
|
||||||
}
|
}
|
||||||
else // Default - skip node
|
else // Default - skip node
|
||||||
{
|
{
|
||||||
ConvertParagraphNodeToTTMLNode(child, ttmlXml, ttmlNode);
|
ConvertParagraphNodeToTtmlNode(child, ttmlXml, ttmlNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -596,7 +596,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
public static bool AddDefaultRegionIfNotExists(XmlDocument xml, string region)
|
public static bool AddDefaultRegionIfNotExists(XmlDocument xml, string region)
|
||||||
{
|
{
|
||||||
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
|
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
|
||||||
nsmgr.AddNamespace("ttml", TTMLNamespace);
|
nsmgr.AddNamespace("ttml", TtmlNamespace);
|
||||||
|
|
||||||
if (xml.DocumentElement.SelectSingleNode(string.Format("ttml:head//ttml:region[@xml:id='{0}']", region), nsmgr) != null)
|
if (xml.DocumentElement.SelectSingleNode(string.Format("ttml:head//ttml:region[@xml:id='{0}']", region), nsmgr) != null)
|
||||||
{
|
{
|
||||||
@ -710,8 +710,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
ExtractTimeCodes(node, subtitle, out begin, out end);
|
ExtractTimeCodes(node, subtitle, out begin, out end);
|
||||||
|
|
||||||
// Style
|
// Style
|
||||||
var p = new Paragraph(begin, end, pText.ToString());
|
var p = new Paragraph(begin, end, pText.ToString()) { Style = LookupForAttribute("style", node, nsmgr) };
|
||||||
p.Style = LookupForAttribute("style", node, nsmgr);
|
|
||||||
|
|
||||||
// Lang
|
// Lang
|
||||||
string lang = LookupForAttribute("xml:lang", node, nsmgr);
|
string lang = LookupForAttribute("xml:lang", node, nsmgr);
|
||||||
@ -762,16 +761,18 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
bool regionCorrespondToTag = false;
|
bool regionCorrespondToTag = false;
|
||||||
|
|
||||||
List<KeyValuePair<string, string>> regionTags = new List<KeyValuePair<string, string>>();
|
var regionTags = new List<KeyValuePair<string, string>>
|
||||||
regionTags.Add(new KeyValuePair<string, string>("bottomLeft", "{\\an1}"));
|
{
|
||||||
regionTags.Add(new KeyValuePair<string, string>("bottomCenter", "{\\an2}"));
|
new KeyValuePair<string, string>("bottomLeft", "{\\an1}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("bottomRight", "{\\an3}"));
|
new KeyValuePair<string, string>("bottomCenter", "{\\an2}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("centerLeft", "{\\an4}"));
|
new KeyValuePair<string, string>("bottomRight", "{\\an3}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("centerСenter", "{\\an5}"));
|
new KeyValuePair<string, string>("centerLeft", "{\\an4}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("centerRight", "{\\an6}"));
|
new KeyValuePair<string, string>("centerСenter", "{\\an5}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("topLeft", "{\\an7}"));
|
new KeyValuePair<string, string>("centerRight", "{\\an6}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("topCenter", "{\\an8}"));
|
new KeyValuePair<string, string>("topLeft", "{\\an7}"),
|
||||||
regionTags.Add(new KeyValuePair<string, string>("topRight", "{\\an9}"));
|
new KeyValuePair<string, string>("topCenter", "{\\an8}"),
|
||||||
|
new KeyValuePair<string, string>("topRight", "{\\an9}")
|
||||||
|
};
|
||||||
|
|
||||||
foreach (var regionTag in regionTags)
|
foreach (var regionTag in regionTags)
|
||||||
{
|
{
|
||||||
@ -810,9 +811,9 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
private void ExtractTimeCodes(XmlNode paragraph, Subtitle subtitle, out TimeCode begin, out TimeCode end)
|
private void ExtractTimeCodes(XmlNode paragraph, Subtitle subtitle, out TimeCode begin, out TimeCode end)
|
||||||
{
|
{
|
||||||
string beginAttr = TryGetAttribute(paragraph, "begin", TTMLNamespace);
|
string beginAttr = TryGetAttribute(paragraph, "begin", TtmlNamespace);
|
||||||
string endAttr = TryGetAttribute(paragraph, "end", TTMLNamespace);
|
string endAttr = TryGetAttribute(paragraph, "end", TtmlNamespace);
|
||||||
string durAttr = TryGetAttribute(paragraph, "dur", TTMLNamespace);
|
string durAttr = TryGetAttribute(paragraph, "dur", TtmlNamespace);
|
||||||
|
|
||||||
begin = new TimeCode();
|
begin = new TimeCode();
|
||||||
if (beginAttr.Length > 0)
|
if (beginAttr.Length > 0)
|
||||||
@ -1060,12 +1061,12 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(fontFamily))
|
if (!string.IsNullOrEmpty(fontFamily))
|
||||||
{
|
{
|
||||||
pText.Append(string.Format(" face=\"{0}\"", fontFamily));
|
pText.Append($" face=\"{fontFamily}\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(color))
|
if (!string.IsNullOrEmpty(color))
|
||||||
{
|
{
|
||||||
pText.Append(string.Format(" color=\"{0}\"", color));
|
pText.Append($" color=\"{color}\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
pText.Append(">");
|
pText.Append(">");
|
||||||
@ -1142,21 +1143,9 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
return new TimeCode(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]));
|
return new TimeCode(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<string> AlternateExtensions
|
public override List<string> AlternateExtensions => new List<string> { ".itt", ".dfxp", ".ttml" };
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return new List<string> { ".itt", ".dfxp", ".ttml" }; // iTunes Timed Text + ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool HasStyleSupport
|
public override bool HasStyleSupport => Configuration.Settings.SubtitleSettings.TimedText10ShowStyleAndLanguage;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Configuration.Settings.SubtitleSettings.TimedText10ShowStyleAndLanguage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<string> GetStylesFromHeader(string xmlAsString)
|
public static List<string> GetStylesFromHeader(string xmlAsString)
|
||||||
{
|
{
|
||||||
@ -1180,59 +1169,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsStyleItalic(string styleName, IEnumerable<XmlNode> headerStyleNodes)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (XmlNode node in headerStyleNodes)
|
|
||||||
{
|
|
||||||
string id = string.Empty;
|
|
||||||
if (node.Attributes["xml:id"] != null)
|
|
||||||
id = node.Attributes["xml:id"].Value;
|
|
||||||
else if (node.Attributes["id"] != null)
|
|
||||||
id = node.Attributes["id"].Value;
|
|
||||||
if (!string.IsNullOrEmpty(id) && id == styleName)
|
|
||||||
{
|
|
||||||
if (node.Attributes["tts:fontStyle"] != null && node.Attributes["tts:fontStyle"].Value == "italic")
|
|
||||||
return true;
|
|
||||||
if (node.Attributes["fontStyle"] != null && node.Attributes["fontStyle"].Value == "italic")
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool IsStyleBold(string styleName, IEnumerable<XmlNode> headerStyleNodes)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (XmlNode node in headerStyleNodes)
|
|
||||||
{
|
|
||||||
string id = string.Empty;
|
|
||||||
if (node.Attributes["xml:id"] != null)
|
|
||||||
id = node.Attributes["xml:id"].Value;
|
|
||||||
else if (node.Attributes["id"] != null)
|
|
||||||
id = node.Attributes["id"].Value;
|
|
||||||
if (!string.IsNullOrEmpty(id) && id == styleName)
|
|
||||||
{
|
|
||||||
if (node.Attributes["tts:fontWeight"] != null && node.Attributes["tts:fontWeight"].Value == "bold")
|
|
||||||
return true;
|
|
||||||
if (node.Attributes["fontWeight"] != null && node.Attributes["fontWeight"].Value == "bold")
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<string> GetRegionsFromHeader(string xmlAsString)
|
public static List<string> GetRegionsFromHeader(string xmlAsString)
|
||||||
{
|
{
|
||||||
|
@ -465,7 +465,7 @@ namespace Nikse.SubtitleEdit.Forms.Styles
|
|||||||
|
|
||||||
if (attrToChange == null)
|
if (attrToChange == null)
|
||||||
{
|
{
|
||||||
attrToChange = _xml.CreateAttribute(tag, TimedText10.TTMLStylingNamespace);
|
attrToChange = _xml.CreateAttribute(tag, TimedText10.TtmlStylingNamespace);
|
||||||
style.Attributes.Append(attrToChange);
|
style.Attributes.Append(attrToChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user