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))]