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); } string allText = sb.ToString(); var indexOfMainTag = allText.IndexOf("\"timestamp_begin\"", StringComparison.Ordinal); if (indexOfMainTag < 0) { return; } var indexOfSubtitles = allText.IndexOf("subtitles", StringComparison.Ordinal); if (indexOfSubtitles <= 0) { return; } var startText = allText.Substring(0, indexOfSubtitles); var startIndex = startText.LastIndexOf('{'); if (startIndex < 0) { return; } var json = allText.Substring(startIndex); var parser = new SeJsonParser(); var items = parser.GetArrayElementsByName(json, "subtitles"); foreach (var item in items) { var textLines = parser.GetArrayElementsByName(item, "text"); var beginTime = parser.GetAllTagsByNameAsStrings(item, "timestamp_begin"); var endTime = parser.GetAllTagsByNameAsStrings(item, "timestamp_end"); if (textLines.Count > 0 && beginTime.Count == 1 && endTime.Count == 1 && double.TryParse(beginTime[0], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var startSeconds) && double.TryParse(endTime[0], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var endSeconds)) { var text = new StringBuilder(); foreach (var line in textLines) { text.AppendLine(Json.DecodeJsonText(line)); } var p = new Paragraph(text.ToString().Trim(), startSeconds * 1000.0, endSeconds * 1000.0); subtitle.Paragraphs.Add(p); } } subtitle.RemoveEmptyLines(); 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); } if (!sb.ToString().Contains("\"words\":")) { return; } var temp = sb.ToString(); while (temp.Contains(" ")) { temp = temp.Replace(" ", " "); } temp = temp.Replace("}, {", "},{"); temp = temp.Replace("} , {", "},{"); temp = temp.Replace("} ,{", "},{"); temp = temp.Substring(temp.IndexOf("\"words\":", StringComparison.Ordinal) + 10); Paragraph p = null; foreach (string line in temp.Replace("},{", Environment.NewLine).SplitToLines()) { string s = line.Trim() + "}"; string start = Json.ReadTag(s, "time"); string duration = Json.ReadTag(s, "duration"); string text = Json.ReadTag(s, "name"); if (start != null && duration != null && text != null) { if (double.TryParse(start, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out var startSeconds) && double.TryParse(duration, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out var durationSeconds)) { if ((text == "." || text == "!" || text == "?" || text == ":") && p != null) { p.EndTime.TotalMilliseconds += durationSeconds * TimeCode.BaseUnit; p.Text += text; } else { p = new Paragraph(Json.DecodeJsonText(text), startSeconds * TimeCode.BaseUnit, (startSeconds + durationSeconds) * TimeCode.BaseUnit); subtitle.Paragraphs.Add(p); } } else { _errorCount++; } } else { _errorCount++; } } subtitle.Renumber(); }