using System; using System.Collections.Generic; using System.Globalization; using System.Text; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { public class KanopyHtml : SubtitleFormat { //00:05 (music) //00:13 - A Swiss scientist //00:14 had a marvelous statement, public override string Extension => ".html"; public override string Name => "Kanopy Html"; public override string ToText(Subtitle subtitle, string title) { var sb = new StringBuilder(); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine("
"); foreach (Paragraph p in subtitle.Paragraphs) { var start = $"{p.StartTime.Minutes:00}:{p.StartTime.Seconds:00}"; if (p.StartTime.Hours > 0) { start = $"{p.StartTime.Hours:00}:{start}"; } sb.AppendLine($" {start} {p.Text.Replace(Environment.NewLine, "
")}
"); } sb.AppendLine("
"); sb.AppendLine(""); sb.AppendLine(""); return sb.ToString().Trim(); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) { var temp = new StringBuilder(); foreach (string l in lines) { temp.Append(l); } string all = temp.ToString(); if (!all.Contains(" begin=") || !all.Contains(" end=") || all.Contains("http://www.w3.org/ns/ttml") || all.Contains("http://www.w3.org/20")) { return; } _errorCount = 0; subtitle.Paragraphs.Clear(); for (int i = 0; i < lines.Count; i++) { string line = lines[i].Trim(); var indexOfBegin = line.IndexOf("begin=", StringComparison.Ordinal); var indexOfEnd = line.IndexOf("end=", StringComparison.Ordinal); if (indexOfBegin > 0 && indexOfEnd > 0) { string startTime = "0"; int index = indexOfBegin + 6; while (index < line.Length && @"0123456789""'.".Contains(line[index])) { if ("0123456789.".Contains(line[index])) { startTime += line[index]; } index++; } string end = "0"; index = indexOfEnd + 4; while (index < line.Length && @"0123456789""'.".Contains(line[index])) { if ("0123456789.".Contains(line[index])) { end += line[index]; } index++; } string text = string.Empty; index = line.IndexOf("", indexOfEnd, StringComparison.Ordinal); if (index > 0 && index + 7 < line.Length) { text = line.Substring(index + 7).Trim().Replace("

", string.Empty); index = text.IndexOf(" 0) { text = text.Substring(0, index); } text = text.Replace("
", Environment.NewLine); } double startSeconds; double endSeconds; if (text.Length > 0 && double.TryParse(startTime, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out startSeconds) && double.TryParse(end, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out endSeconds)) { subtitle.Paragraphs.Add(new Paragraph(text, startSeconds * TimeCode.BaseUnit, endSeconds * TimeCode.BaseUnit)); } } } subtitle.Renumber(); } } }