From 2fa37a84da5585bc2fa25c7f971eaffc36ed9b19 Mon Sep 17 00:00:00 2001 From: niksedk Date: Sat, 13 Nov 2010 21:01:36 +0000 Subject: [PATCH] Added Subtitle Editor Project file format git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@144 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- .../SubtitleFormats/SubtitleEditorProject.cs | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/Logic/SubtitleFormats/SubtitleEditorProject.cs diff --git a/src/Logic/SubtitleFormats/SubtitleEditorProject.cs b/src/Logic/SubtitleFormats/SubtitleEditorProject.cs new file mode 100644 index 000000000..43047dba1 --- /dev/null +++ b/src/Logic/SubtitleFormats/SubtitleEditorProject.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; + +namespace Nikse.SubtitleEdit.Logic.SubtitleFormats +{ + class SubtitleEditorProject : SubtitleFormat + { + public override string Extension + { + get { return ".xml"; } + } + + public override string Name + { + get { return "Subtitle Editor Project"; } + } + + public override bool HasLineNumber + { + get { return false; } + } + + public override bool IsTimeBased + { + get { return true; } + } + + public override bool IsMine(List lines, string fileName) + { + StringBuilder sb = new StringBuilder(); + lines.ForEach(line => sb.AppendLine(line)); + string xmlAsString = sb.ToString().Trim(); + if (xmlAsString.Contains(" 0; + } + catch (Exception ex) + { + string s = ex.Message; + return false; + } + } + else + { + return false; + } + } + + public override string ToText(Subtitle subtitle, string title) + { + string xmlStructure = + "" + Environment.NewLine + + "" + Environment.NewLine + + " " + Environment.NewLine + + " " + Environment.NewLine + + " " + Environment.NewLine + + " " + Environment.NewLine + + " " + Environment.NewLine + + " " + Environment.NewLine + + ""; + + XmlDocument xml = new XmlDocument(); + xml.LoadXml(xmlStructure); + +// + XmlNode div = xml.DocumentElement.SelectSingleNode("subtitles"); + int no = 0; + foreach (Paragraph p in subtitle.Paragraphs) + { + XmlNode paragraph = xml.CreateElement("subtitle"); + + XmlAttribute duration = xml.CreateAttribute("duration"); + duration.InnerText = p.Duration.TotalMilliseconds.ToString(); + paragraph.Attributes.Append(duration); + + XmlAttribute effect = xml.CreateAttribute("effect"); + effect.InnerText = string.Empty; + paragraph.Attributes.Append(effect); + + XmlAttribute end = xml.CreateAttribute("end"); + end.InnerText = p.EndTime.TotalMilliseconds.ToString(); + paragraph.Attributes.Append(end); + + XmlAttribute layer = xml.CreateAttribute("layer"); + layer.InnerText = "0"; + paragraph.Attributes.Append(layer); + + XmlAttribute marginL = xml.CreateAttribute("margin-l"); + marginL.InnerText = "0"; + paragraph.Attributes.Append(marginL); + + XmlAttribute marginR = xml.CreateAttribute("margin-r"); + marginR.InnerText = "0"; + paragraph.Attributes.Append(marginR); + + XmlAttribute marginV = xml.CreateAttribute("margin-v"); + marginV.InnerText = "0"; + paragraph.Attributes.Append(marginV); + + XmlAttribute name = xml.CreateAttribute("name"); + name.InnerText = string.Empty; + paragraph.Attributes.Append(name); + + XmlAttribute note = xml.CreateAttribute("note"); + note.InnerText = string.Empty; + paragraph.Attributes.Append(note); + + XmlAttribute path = xml.CreateAttribute("path"); + path.InnerText = "0"; + paragraph.Attributes.Append(path); + + XmlAttribute start = xml.CreateAttribute("start"); + start.InnerText = p.StartTime.TotalMilliseconds.ToString(); + paragraph.Attributes.Append(start); + + XmlAttribute style = xml.CreateAttribute("style"); + style.InnerText = "Default"; + paragraph.Attributes.Append(style); + + string text = Utilities.RemoveHtmlTags(p.Text); + XmlAttribute textNode = xml.CreateAttribute("text"); + textNode.InnerText = text; + paragraph.Attributes.Append(textNode); + + XmlAttribute translation = xml.CreateAttribute("translation"); + translation.InnerText = string.Empty; ; + paragraph.Attributes.Append(translation); + + div.AppendChild(paragraph); + no++; + } + + MemoryStream ms = new MemoryStream(); + XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8); + writer.Formatting = Formatting.Indented; + xml.Save(writer); + return Encoding.UTF8.GetString(ms.ToArray()).Trim(); + } + + public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) + { + _errorCount = 0; + + StringBuilder sb = new StringBuilder(); + lines.ForEach(line => sb.AppendLine(line)); + XmlDocument xml = new XmlDocument(); + xml.LoadXml(sb.ToString()); + + XmlNode div = xml.DocumentElement.SelectSingleNode("subtitles"); + foreach (XmlNode node in div.ChildNodes) + { + try + { + // + Paragraph p = new Paragraph(); + p.StartTime.TotalMilliseconds = int.Parse(node.Attributes["start"].Value); + p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + int.Parse(node.Attributes["duration"].Value); + p.Text = node.Attributes["text"].Value; + + subtitle.Paragraphs.Add(p); + } + catch (Exception ex) + { + string s = ex.Message; + _errorCount++; + } + } + subtitle.Renumber(1); + } + + } +} + +