diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index 80c9a1bff..aa8676d5f 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -681,6 +681,8 @@ namespace Nikse.SubtitleEdit.Forms 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 (prev != null && !prev.StartTime.IsMaxTime && !p.StartTime.IsMaxTime && @@ -712,6 +714,56 @@ namespace Nikse.SubtitleEdit.Forms } prev.EndTime.TotalMilliseconds--; } + 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 (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 (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)) @@ -750,18 +802,6 @@ namespace Nikse.SubtitleEdit.Forms 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 = p.StartTime.TotalMilliseconds - diffHalf; - p.StartTime.TotalMilliseconds = prev.EndTime.TotalMilliseconds + 1; - _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)) diff --git a/src/Forms/Main.resx b/src/Forms/Main.resx index 854c4ac9d..583ea47df 100644 --- a/src/Forms/Main.resx +++ b/src/Forms/Main.resx @@ -681,7 +681,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2 - CAAAAk1TRnQBSQFMAgEBAgEAAdABHQHQAR0BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAeABHQHgAR0BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA