public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName) { _errorCount = 0; subtitle.Paragraphs.Clear(); var sb = new StringBuilder(); foreach (string s in lines) { sb.AppendLine(s); } string allText = sb.ToString(); var indxOfSpeakers = allText.IndexOf("speakers", StringComparison.Ordinal); if (indxOfSpeakers < 0) { return; } var idx = allText.IndexOf('[', indxOfSpeakers); allText = allText.Substring(idx); allText = allText.Substring(0, allText.LastIndexOf(']') + 1); var speakers = Json.ReadObjectArray(allText); foreach (var s in speakers) { var duration = Json.ReadTag(s, "duration"); var start = Json.ReadTag(s, "time"); var text = Json.ReadTag(s, "name"); bool skip = false; if (!string.IsNullOrEmpty(duration) && !string.IsNullOrEmpty(start) && !string.IsNullOrEmpty(text) && double.TryParse(start, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out double startSeconds) && double.TryParse(duration, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out double durationSeconds)) { var startMilliseconds = TimeSpan.FromSeconds(startSeconds).TotalMilliseconds; var p = new Paragraph(text, startMilliseconds, startMilliseconds + TimeSpan.FromSeconds(durationSeconds).Milliseconds); if (p.Text != null && (p.Text == "." || p.Text == "?" || p.Text == "!")) { var last = subtitle.Paragraphs.LastOrDefault(); if (last != null && last.EndTime.TotalMilliseconds + 1000 > p.StartTime.TotalMilliseconds) { last.Text += p.Text; last.EndTime.TotalMilliseconds = p.EndTime.TotalMilliseconds; skip = true; } } if (!skip) { subtitle.Paragraphs.Add(p); } } } subtitle.Renumber(); }
public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName) { _errorCount = 0; var sb = new StringBuilder(); foreach (string s in lines) { sb.Append(s); } var allText = sb.ToString().Trim(); if (!allText.StartsWith("[", StringComparison.Ordinal) || !allText.Contains("\"start\"")) { return; } foreach (var line in Json.ReadObjectArray(allText)) { var s = line.Trim(); if (s.Length > 10) { var start = Json.ReadTag(s, "start"); var end = Json.ReadTag(s, "end"); //var textLines = Json.ReadArray(s, "text"); var textLines = Json.ReadTag(s, "text"); var horizontal = Json.ReadTag(s, "horizontal"); var vertical = Json.ReadTag(s, "vertical"); var justification = Json.ReadTag(s, "justification"); try { //if (textLines.Count == 0) //{ // _errorCount++; //} //sb.Clear(); //foreach (var textLine in textLines) //{ // sb.AppendLine(Json.DecodeJsonText(textLine)); //} sb.Clear(); sb.AppendLine((Json.DecodeJsonText(textLines)).Replace("\n", Environment.NewLine).Replace("<br/>", Environment.NewLine).Replace("<br/>", Environment.NewLine)); //subtitle.Paragraphs.Add(new Paragraph(sb.ToString().Trim(), TimeCode.ParseToMilliseconds(start), TimeCode.ParseToMilliseconds(end))); subtitle.Paragraphs.Add(new Paragraph(sb.ToString().Trim(), TimeCode.ParseToMilliseconds(start), TimeCode.ParseToMilliseconds(end), horizontal.Trim(), vertical.Trim(), justification.Trim())); } catch (Exception) { _errorCount++; } } } subtitle.Renumber(); }
public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName) { _errorCount = 0; var sb = new StringBuilder(); foreach (var s in lines) { sb.Append(s); } var allText = sb.ToString().Trim(); if (!allText.StartsWith("[", StringComparison.Ordinal) || !allText.Contains("\"start\"")) { return; } foreach (var line in Json.ReadObjectArray(allText)) { var s = line.Trim(); if (s.Length > 10) { var start = Json.ReadTag(s, "start"); var end = Json.ReadTag(s, "end"); var textLines = Json.ReadArray(s, "text"); try { if (textLines.Count == 0) { _errorCount++; } sb.Clear(); foreach (var textLine in textLines) { sb.AppendLine(Json.DecodeJsonText(textLine)); } var startArr = start.Split(new[] { ':', ',', '.' }, StringSplitOptions.RemoveEmptyEntries); var endArr = end.Split(new[] { ':', ',', '.' }, StringSplitOptions.RemoveEmptyEntries); if (startArr.Length == 4 && endArr.Length == 4) { subtitle.Paragraphs.Add(new Paragraph(sb.ToString().Trim(), TimeCode.ParseToMilliseconds(start), TimeCode.ParseToMilliseconds(end))); } } catch (Exception) { _errorCount++; } } } subtitle.Renumber(); }