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); }
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); }
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); }