using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { public class CaraokeXml : SubtitleFormat { public override string Extension { get { return ".crk"; } } public override string Name { get { return "Caraoke Xml"; } } 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); var paragraph = xml.DocumentElement.SelectSingleNode("paragraph"); foreach (Paragraph p in subtitle.Paragraphs) { XmlNode item = xml.CreateElement("item"); var start = xml.CreateAttribute("tc1"); start.InnerText = p.StartTime.TotalMilliseconds.ToString(System.Globalization.CultureInfo.InvariantCulture); item.Attributes.Append(start); var end = xml.CreateAttribute("tc2"); end.InnerText = p.EndTime.TotalMilliseconds.ToString(System.Globalization.CultureInfo.InvariantCulture); item.Attributes.Append(end); var attr = xml.CreateAttribute("attr"); attr.InnerText = string.Empty; item.Attributes.Append(attr); item.InnerText = p.Text; paragraph.AppendChild(item); } 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 xmlAsText = sb.ToString(); if (!xmlAsText.Contains("