using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { public class VocapiaSplit : SubtitleFormat { public override string Extension { get { return ".xml"; } } public override string Name { get { return "Vocapia Split"; } } 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 + "" + Environment.NewLine + "" + Environment.NewLine + "" + Environment.NewLine + ""; var xml = new XmlDocument(); xml.LoadXml(xmlStructure); xml.DocumentElement.Attributes["name"].InnerText = title; if (subtitle.Header != null && subtitle.Header.Contains("")); reel.AppendChild(paragraph); } return ToUtf8XmlString(xml); } private static string ToTimeCode(double totalMilliseconds) { return string.Format("{0:0##}", totalMilliseconds / TimeCode.BaseUnit); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) { _errorCount = 0; var sb = new StringBuilder(); lines.ForEach(line => sb.AppendLine(line)); string xmlString = sb.ToString(); if (!xmlString.Contains("", Environment.NewLine); text = text.Replace(" ", " "); var p = new Paragraph(text, ParseTimeCode(start), ParseTimeCode(end)); var spkIdAttr = node.Attributes["spkid"]; if (spkIdAttr != null) { p.Extra = spkIdAttr.InnerText; p.Actor = p.Extra; } subtitle.Paragraphs.Add(p); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); _errorCount++; } } subtitle.Renumber(); if (subtitle.Paragraphs.Count > 0) subtitle.Header = xmlString; } private static double ParseTimeCode(string s) { return Convert.ToDouble(s) * TimeCode.BaseUnit; } public override bool HasStyleSupport { get { return true; } } public static List GetStylesFromHeader(Subtitle subtitle) { var list = new List(); foreach (Paragraph p in subtitle.Paragraphs) { if (!string.IsNullOrEmpty(p.Actor)) { if (list.IndexOf(p.Actor) < 0) list.Add(p.Actor); } } return list; } } }