diff --git a/Source/HtmlRenderer/Core/Parse/DomParser.cs b/Source/HtmlRenderer/Core/Parse/DomParser.cs index 66287d5a1..89c799acf 100644 --- a/Source/HtmlRenderer/Core/Parse/DomParser.cs +++ b/Source/HtmlRenderer/Core/Parse/DomParser.cs @@ -1172,10 +1172,10 @@ private static void CorrectLineBreaksBlocks(CssBox box) if (!box.IsBrElement) return; var previousSibling = DomUtils.GetPreviousSibling(box); - if (previousSibling == null || previousSibling.IsBlock) + if (previousSibling == null || previousSibling.IsBlock || previousSibling.IsBrElement) { var nextSibling = DomUtils.GetFollowingSiblings(box, b => b.IsInline && !b.IsBrElement, true).FirstOrDefault(); - if (nextSibling == null) + if (nextSibling == null || previousSibling?.IsBrElement == true) { box.Text = "\n"; box.ParseToWords(); diff --git a/Source/Test/HtmlRenderer.IntegrationTest/HtmlRenderingRegressionTests.cs b/Source/Test/HtmlRenderer.IntegrationTest/HtmlRenderingRegressionTests.cs index 842c5dc1b..05d58bd36 100644 --- a/Source/Test/HtmlRenderer.IntegrationTest/HtmlRenderingRegressionTests.cs +++ b/Source/Test/HtmlRenderer.IntegrationTest/HtmlRenderingRegressionTests.cs @@ -22,6 +22,19 @@ public sealed class HtmlRenderingRegressionTests private static bool _samplesLoaded; + [TestMethod] + public async Task Render_ConsecutiveBreaks_LeaveAnEmptyLine() + { + EnsureSamplesLoaded(); + + using var oneBreak = await RenderSample("first
second"); + using var consecutiveBreaks = await RenderSample("first

second"); + + Assert.IsTrue( + consecutiveBreaks.Height > oneBreak.Height, + $"Consecutive
elements should add an empty line. One break: {oneBreak.Height}px; two breaks: {consecutiveBreaks.Height}px."); + } + [DoNotParallelize] [TestMethod] [DynamicData(nameof(GetSamples), DynamicDataDisplayName = nameof(GetSampleDisplayName))]