public void TestToStringNewParagraph() { string expectedOutput = "00:00:00,000 --> 00:00:00,000 "; var paragraph = new Paragraph(); string actualOutput = paragraph.ToString(); Assert.AreEqual(expectedOutput, actualOutput); }
private bool IsFixAllowed(Paragraph p) { foreach (ListViewItem item in listViewFixes.Items) { if (item.Tag.ToString() == p.ToString()) return item.Checked; } return false; }
private int MoveStartTime(string fixAction, int noOfShortDisplayTimes, Paragraph p, Paragraph temp, Paragraph next) { if (AllowFix(p, fixAction)) { string oldCurrent = p.ToString(); if (next != null && next.StartTime.TotalMilliseconds - Configuration.Settings.General.MininumMillisecondsBetweenLines > p.EndTime.TotalMilliseconds) p.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - Configuration.Settings.General.MininumMillisecondsBetweenLines; p.StartTime.TotalMilliseconds = p.EndTime.TotalMilliseconds - temp.Duration.TotalMilliseconds; _totalFixes++; noOfShortDisplayTimes++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } return noOfShortDisplayTimes; }
public void FixOverlappingDisplayTimes() { // negative display time string fixAction = _language.FixOverlappingDisplayTime; int noOfOverlappingDisplayTimesFixed = 0; for (int i = 0; i < _subtitle.Paragraphs.Count; i++) { Paragraph p = _subtitle.Paragraphs[i]; Paragraph oldP = new Paragraph(p); if (p.Duration.TotalMilliseconds < 0) // negative display time... { bool isFixed = false; string status = string.Format(_language.StartTimeLaterThanEndTime, i + 1, p.StartTime, p.EndTime, p.Text, Environment.NewLine); Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1); Paragraph next = _subtitle.GetParagraphOrDefault(i + 1); double wantedDisplayTime = Utilities.GetOptimalDisplayMilliseconds(p.Text) * 0.9; if (next == null || next.StartTime.TotalMilliseconds > p.StartTime.TotalMilliseconds + wantedDisplayTime) { if (AllowFix(p, fixAction)) { p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + wantedDisplayTime; isFixed = true; } } else if (next.StartTime.TotalMilliseconds > p.StartTime.TotalMilliseconds + 500.0) { if (AllowFix(p, fixAction)) { p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + 500.0; isFixed = true; } } else if (prev == null || next.StartTime.TotalMilliseconds - wantedDisplayTime > prev.EndTime.TotalMilliseconds) { if (AllowFix(p, fixAction)) { p.StartTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - wantedDisplayTime; p.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - 1; isFixed = true; } } else { LogStatus(_language.FixOverlappingDisplayTimes, string.Format(_language.UnableToFixStartTimeLaterThanEndTime, i + 1, p), true); _totalErrors++; } if (isFixed) { _totalFixes++; noOfOverlappingDisplayTimesFixed++; status = string.Format(_language.XFixedToYZ, status, Environment.NewLine, p); LogStatus(_language.FixOverlappingDisplayTimes, status); AddFixToListView(p, fixAction, oldP.ToString(), p.ToString()); } } } // overlapping display time for (int i = 1; i < _subtitle.Paragraphs.Count; i++) { Paragraph p = _subtitle.Paragraphs[i]; Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1); Paragraph target = p; // subtitle to display when clicking on fix in top list view if (prev != null) target = prev; string oldCurrent = p.ToString(); string oldPrevious = prev.ToString(); double prevWantedDisplayTime = Utilities.GetOptimalDisplayMilliseconds(prev.Text, Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds); double currentWantedDisplayTime = Utilities.GetOptimalDisplayMilliseconds(p.Text, Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds); double prevOptimalDisplayTime = Utilities.GetOptimalDisplayMilliseconds(prev.Text); double currentOptimalDisplayTime = Utilities.GetOptimalDisplayMilliseconds(p.Text); bool canBeEqual = _format != null && (_format.GetType() == typeof(AdvancedSubStationAlpha) || _format.GetType() == typeof(SubStationAlpha)); if (!canBeEqual) canBeEqual = Configuration.Settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart; double diff = prev.EndTime.TotalMilliseconds - p.StartTime.TotalMilliseconds; if (prev != null && !prev.StartTime.IsMaxTime && !p.StartTime.IsMaxTime && diff >= 0 && !(canBeEqual && diff == 0)) { int diffHalf = (int)(diff / 2); if (!Configuration.Settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart && p.StartTime.TotalMilliseconds == prev.EndTime.TotalMilliseconds && prev.Duration.TotalMilliseconds > 100) { if (AllowFix(target, fixAction)) { if (!canBeEqual) { bool okEqual = true; if (prev.Duration.TotalMilliseconds > Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds) prev.EndTime.TotalMilliseconds--; else if (p.Duration.TotalMilliseconds > Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds) p.StartTime.TotalMilliseconds++; else okEqual = false; if (okEqual) { _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(target, fixAction, oldPrevious, prev.ToString()); } } } // prev.EndTime.TotalMilliseconds--; } else if (prevOptimalDisplayTime <= (p.StartTime.TotalMilliseconds - prev.StartTime.TotalMilliseconds)) { if (AllowFix(target, fixAction)) { prev.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds - 1; if (canBeEqual) prev.EndTime.TotalMilliseconds++; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(target, fixAction, oldPrevious, prev.ToString()); } } else if (diff > 0 && currentOptimalDisplayTime <= p.Duration.TotalMilliseconds - diffHalf && prevOptimalDisplayTime <= prev.Duration.TotalMilliseconds - diffHalf) { if (AllowFix(p, fixAction)) { prev.EndTime.TotalMilliseconds -= diffHalf; p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } } else if (currentOptimalDisplayTime <= p.EndTime.TotalMilliseconds - prev.EndTime.TotalMilliseconds) { if (AllowFix(p, fixAction)) { p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; if (canBeEqual) p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } } else if (diff > 0 && currentWantedDisplayTime <= p.Duration.TotalMilliseconds - diffHalf && prevWantedDisplayTime <= prev.Duration.TotalMilliseconds - diffHalf) { if (AllowFix(p, fixAction)) { prev.EndTime.TotalMilliseconds -= diffHalf; p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } } else if (prevWantedDisplayTime <= (p.StartTime.TotalMilliseconds - prev.StartTime.TotalMilliseconds)) { if (AllowFix(target, fixAction)) { prev.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds - 1; if (canBeEqual) prev.EndTime.TotalMilliseconds++; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(target, fixAction, oldPrevious, prev.ToString()); } } else if (currentWantedDisplayTime <= p.EndTime.TotalMilliseconds - prev.EndTime.TotalMilliseconds) { if (AllowFix(p, fixAction)) { p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; if (canBeEqual) p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } } else if (Math.Abs(p.StartTime.TotalMilliseconds - prev.EndTime.TotalMilliseconds) < 10 && p.Duration.TotalMilliseconds > 1) { if (AllowFix(p, fixAction)) { prev.EndTime.TotalMilliseconds -= 2; p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; if (canBeEqual) p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(p, fixAction, oldCurrent, p.ToString()); } } else if (Math.Abs(p.StartTime.TotalMilliseconds - prev.StartTime.TotalMilliseconds) < 10 && Math.Abs(p.EndTime.TotalMilliseconds - prev.EndTime.TotalMilliseconds) < 10) { // merge lines with same time codes if (AllowFix(target, fixAction)) { prev.Text = prev.Text.Replace(Environment.NewLine, " "); p.Text = p.Text.Replace(Environment.NewLine, " "); string stripped = Utilities.RemoveHtmlTags(prev.Text).TrimStart(); if (!stripped.StartsWith("- ")) prev.Text = "- " + prev.Text.TrimStart(); stripped = Utilities.RemoveHtmlTags(p.Text).TrimStart(); if (!stripped.StartsWith("- ")) p.Text = "- " + p.Text.TrimStart(); prev.Text = prev.Text.Trim() + Environment.NewLine + p.Text; p.Text = string.Empty; _totalFixes++; noOfOverlappingDisplayTimesFixed++; AddFixToListView(target, fixAction, oldCurrent, p.ToString()); p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + 1; if (canBeEqual) { p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds; p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds; } } } else { if (AllowFix(p, fixAction)) { LogStatus(_language.FixOverlappingDisplayTimes, string.Format(_language.UnableToFixTextXY, i + 1, Environment.NewLine + prev.Number + " " + prev + Environment.NewLine + p.Number + " " + p), true); _totalErrors++; } } } } if (noOfOverlappingDisplayTimesFixed > 0) LogStatus(fixAction, string.Format(_language.XOverlappingTimestampsFixed, noOfOverlappingDisplayTimesFixed)); }