Exemple #1
0
        public bool IsDialog(List <string> lines)
        {
            if (lines.Count < 2 || lines.Count > 3)
            {
                return(false);
            }

            var l0           = HtmlUtil.RemoveHtmlTags(lines[0]);
            var l1           = HtmlUtil.RemoveHtmlTags(lines[1], true);
            var noLineEnding = SkipLineEndingCheck || LanguageAutoDetect.IsLanguageWithoutPeriods(TwoLetterLanguageCode);

            if (lines.Count == 2)
            {
                if ((l0.HasSentenceEnding(TwoLetterLanguageCode) || noLineEnding) &&
                    (l1.TrimStart().StartsWith(GetDashChar()) || l1.TrimStart().StartsWith(GetAlternateDashChar())))
                {
                    return(true);
                }
            }

            if (lines.Count == 3)
            {
                var l2 = HtmlUtil.RemoveHtmlTags(lines[2], true);

                // - I'm fine today, but I would have
                // been better if I had a some candy.
                // - How are you?
                if (IsDialogThreeLinesTwoOne(l0, l1, l2))
                {
                    return(true);
                }

                // - How are you?
                // - I'm fine today, but I would have
                // been better if I had a some candy.
                if (IsDialogThreeLinesOneTwo(l0, l1, l2))
                {
                    return(true);
                }

                if ((l0.HasSentenceEnding(TwoLetterLanguageCode) || noLineEnding) &&
                    (l1.TrimStart().StartsWith(GetDashChar()) || l1.TrimStart().StartsWith(GetAlternateDashChar())) &&
                    (l1.HasSentenceEnding(TwoLetterLanguageCode) || noLineEnding) &&
                    (l2.TrimStart().StartsWith(GetDashChar()) || l2.TrimStart().StartsWith(GetAlternateDashChar())))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #2
0
        public void Fix(Subtitle subtitle, IFixCallbacks callbacks)
        {
            string fixAction    = Language.UnneededPeriod;
            int    removedCount = 0;

            for (int i = 0; i < subtitle.Paragraphs.Count; i++)
            {
                var p = subtitle.Paragraphs[i];
                if (callbacks.AllowFix(p, fixAction))
                {
                    // Returns processed text.
                    string procText = RemoveDotAfterPunctuation(p.Text);

                    while (procText.Contains("....", StringComparison.Ordinal))
                    {
                        procText = procText.Replace("....", "...");
                    }

                    while (procText.Contains("……", StringComparison.Ordinal))
                    {
                        procText = procText.Replace("……", "…");
                    }

                    while (procText.Contains(".…", StringComparison.Ordinal))
                    {
                        procText = procText.Replace(".…", "…");
                    }

                    while (procText.Contains("….", StringComparison.Ordinal))
                    {
                        procText = procText.Replace("….", "…");
                    }

                    var l = callbacks.Language;
                    if (procText.Contains('.') && LanguageAutoDetect.IsLanguageWithoutPeriods(l))
                    {
                        var sb = new StringBuilder();
                        foreach (var line in procText.SplitToLines())
                        {
                            var s = line;
                            if (s.EndsWith('.') && !s.EndsWith("..", StringComparison.Ordinal))
                            {
                                s = s.TrimEnd('.');
                            }
                            else if (s.EndsWith(".</i>", StringComparison.Ordinal) && !s.EndsWith("..</i>", StringComparison.Ordinal))
                            {
                                s = s.Remove(s.Length - 5, 1);
                            }

                            sb.AppendLine(s);
                        }

                        procText = sb.ToString().TrimEnd();
                    }

                    int diff = p.Text.Length - procText.Length;
                    if (diff > 0)
                    {
                        // Calculate total removed dots.
                        removedCount += diff;
                        callbacks.AddFixToListView(p, fixAction, p.Text, procText);
                        p.Text = procText;
                    }
                }
            }
            callbacks.UpdateFixStatus(removedCount, Language.RemoveUnneededPeriods);
        }
Exemple #3
0
        public static string FixHyphensAdd(Subtitle subtitle, int i, string language)
        {
            Paragraph p         = subtitle.Paragraphs[i];
            string    text      = p.Text;
            var       textCache = HtmlUtil.RemoveHtmlTags(text.TrimStart(), true);

            if (textCache.StartsWith('-') || textCache.Contains(Environment.NewLine + "-"))
            {
                Paragraph prev = subtitle.GetParagraphOrDefault(i - 1);

                if (prev == null || !HtmlUtil.RemoveHtmlTags(prev.Text).TrimEnd().EndsWith('-') || HtmlUtil.RemoveHtmlTags(prev.Text).TrimEnd().EndsWith("--", StringComparison.Ordinal))
                {
                    var lines            = textCache.SplitToLines();
                    int startHyphenCount = lines.Count(line => line.TrimStart().StartsWith('-'));
                    int totalSpaceHyphen = Utilities.CountTagInText(text, " -");
                    if (startHyphenCount == 1 && totalSpaceHyphen == 0)
                    {
                        var parts = textCache.SplitToLines();
                        if (parts.Count == 2 && !string.IsNullOrWhiteSpace(parts[0]))
                        {
                            var  part0 = parts[0].TrimEnd().Trim('"');
                            bool doAdd = "!?.".Contains(part0[part0.Length - 1]) || LanguageAutoDetect.IsLanguageWithoutPeriods(language);
                            if (parts[0].TrimStart().StartsWith('-') && parts[1].Contains(':') && doAdd ||
                                parts[1].TrimStart().StartsWith('-') && parts[0].Contains(':') && doAdd)
                            {
                                doAdd = false;
                            }

                            if (doAdd)
                            {
                                int  idx           = text.IndexOf('-');
                                int  newLineIdx    = text.IndexOf(Environment.NewLine, StringComparison.Ordinal);
                                bool addSecondLine = idx < newLineIdx;

                                if (addSecondLine && idx > 0 && char.IsLetter(text[idx - 1]))
                                {
                                    addSecondLine = false;
                                }

                                if (addSecondLine)
                                {
                                    // add dash in second line.
                                    var originalParts = text.SplitToLines();
                                    if (originalParts[1].LineStartsWithHtmlTag(true))
                                    {
                                        originalParts[1] = originalParts[1].Substring(0, 3) + "- " + originalParts[1].Remove(0, 3).TrimEnd();
                                    }
                                    else if (originalParts[1].StartsWith("{\\an", StringComparison.Ordinal) && originalParts[1].Length > 6 && originalParts[1][5] == '}')
                                    {
                                        originalParts[1] = originalParts[1].Insert(6, "- ");
                                    }
                                    else
                                    {
                                        originalParts[1] = "- " + originalParts[1].Trim();
                                    }
                                    text = originalParts[0] + Environment.NewLine + originalParts[1];
                                }
                                else
                                {
                                    // add dash in first line.
                                    if (text.LineStartsWithHtmlTag(true))
                                    {
                                        text = text.Substring(0, 3) + "- " + text.Remove(0, 3).TrimEnd();
                                    }
                                    else if (text.StartsWith("{\\an", StringComparison.Ordinal) && text.Length > 6 && text[5] == '}')
                                    {
                                        text = text.Insert(6, "- ");
                                    }
                                    else
                                    {
                                        text = "- " + text.Trim();
                                    }
                                }
                            }
                        }
                    }
                    // - Shut it off. -Get the f**k<br/>out of here, Darryl.
                    if (totalSpaceHyphen == 1 && startHyphenCount == 1)
                    {
                        var idx = text.IndexOf(" -", StringComparison.Ordinal);
                        if (idx > 1 && ".?!".Contains(text[idx - 1]) && idx + 2 < text.Length)
                        {
                            var firstLine  = text.Substring(0, idx).Replace(Environment.NewLine, " ").Trim();
                            var secondLine = text.Substring(idx + 1).Insert(1, " ").Replace(Environment.NewLine, " ").Trim();
                            text = firstLine + Environment.NewLine + secondLine;
                        }
                    }
                }
            }
            return(text);
        }