Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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();
        }