using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { public class FLVCoreCuePoints : SubtitleFormat { public override string Extension { get { return ".xml"; } } public override string Name { get { return "FLVCoreCuePoints"; } } public override bool IsTimeBased { get { return true; } } public override bool IsMine(List lines, string fileName) { var subtitle = new Subtitle(); LoadSubtitle(subtitle, lines, fileName); return subtitle.Paragraphs.Count > 0; } public override string ToText(Subtitle subtitle, string title) { string xmlStructure = "" + Environment.NewLine + ""; var xml = new XmlDocument(); xml.LoadXml(xmlStructure); foreach (Paragraph p in subtitle.Paragraphs) { XmlNode paragraph = xml.CreateElement("CuePoint"); XmlNode startTime = xml.CreateElement("Time"); startTime.InnerText = p.StartTime.TotalMilliseconds.ToString(); paragraph.AppendChild(startTime); XmlNode paragraphType = xml.CreateElement("Type"); paragraphType.InnerText = "event"; paragraph.AppendChild(paragraphType); XmlNode name = xml.CreateElement("Name"); name.InnerText = p.Text; paragraph.AppendChild(name); XmlNode parameters = xml.CreateElement("Parameters"); XmlNode parameter = xml.CreateElement("Parameter"); name = xml.CreateElement("Name"); name.InnerText = "source"; XmlNode value = xml.CreateElement("Value"); value.InnerText = "transcription"; parameter.AppendChild(name); parameter.AppendChild(value); parameters.AppendChild(parameter); parameter = xml.CreateElement("Parameter"); name = xml.CreateElement("Name"); name.InnerText = "duration"; value = xml.CreateElement("Value"); value.InnerText = p.Duration.TotalMilliseconds.ToString(); parameter.AppendChild(name); parameter.AppendChild(value); parameters.AppendChild(parameter); parameter = xml.CreateElement("Parameter"); name = xml.CreateElement("Name"); name.InnerText = "confidence"; value = xml.CreateElement("Value"); value.InnerText = "50"; parameter.AppendChild(name); parameter.AppendChild(value); parameters.AppendChild(parameter); paragraph.AppendChild(parameters); xml.DocumentElement.AppendChild(paragraph); } return ToUtf8XmlString(xml); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) { _errorCount = 0; var sb = new StringBuilder(); lines.ForEach(line => sb.AppendLine(line)); string allText = sb.ToString(); if (!allText.Contains(" next.StartTime.TotalMilliseconds) p.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - Configuration.Settings.General.MinimumMillisecondsBetweenLines; } } subtitle.Renumber(); } } }