Skip to content

Commit 793df79

Browse files
committed
Fix combining 2 runs separated by a break, 2nd line should not be prefixed by a space
1 parent a290371 commit 793df79

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

src/Html2OpenXml/Expressions/PhrasingElementExpression.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ protected static IEnumerable<OpenXmlElement> CombineRuns(IEnumerable<OpenXmlElem
218218
}
219219
endsWithSpace = text[text.Length - 1].IsSpaceCharacter();
220220
}
221+
else if (run.LastChild is Break)
222+
{
223+
endsWithSpace = true;
224+
}
221225
yield return run;
222226
}
223227
}

test/HtmlToOpenXml.Tests/ElementTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void TextWithBreak_ReturnsRunWithBreak()
136136
{
137137
var elements = converter.Parse(@"Lorem<br/>Ipsum");
138138
Assert.That(elements, Has.Count.EqualTo(1));
139-
Assert.That(elements[0].ChildElements, Has.Count.EqualTo(4));
139+
Assert.That(elements[0].ChildElements, Has.Count.EqualTo(3));
140140

141141
Assert.Multiple(() =>
142142
{

test/HtmlToOpenXml.Tests/WhitespaceTests.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,28 @@ public void AnchorWithImgThenText_ReturnsCollapsedStartingWhitespace()
7474
}
7575

7676
[Test(Description = "`nbsp` entities should not be collapsed")]
77-
public void NonBreakingSpaceEntities_ReturnsPreserveedWhitespace()
77+
public void NonBreakingSpaceEntities_ReturnsPreservedWhitespace()
7878
{
7979
var elements = converter.Parse("<h1>&nbsp;&nbsp; Hello World! </h1>");
8080
Assert.That(elements, Has.Count.EqualTo(1));
8181
Assert.That(elements, Has.All.TypeOf<Paragraph>());
8282
Assert.That(elements[0].InnerText, Is.EqualTo("   Hello World!"));
8383
}
84+
85+
[Test(Description = "Consecutive runs separated by a break should not prefix the 2nd line with a space")]
86+
public void ConsecutivePhrasingWithBreak_ReturnsSecondLineWithNoSpaces()
87+
{
88+
var elements = converter.Parse("<span>Hello<br><span>World</span></span>");
89+
Assert.That(elements, Has.Count.EqualTo(1));
90+
Assert.That(elements, Has.All.TypeOf<Paragraph>());
91+
Assert.That(elements[0].InnerText, Is.EqualTo("HelloWorld"));
92+
var runs = elements[0].Elements<Run>();
93+
Assert.That(runs.Count(), Is.EqualTo(3));
94+
Assert.Multiple(() => {
95+
Assert.That(runs.ElementAt(1).LastChild, Is.TypeOf<Break>());
96+
Assert.That(runs.ElementAt(2).FirstChild, Is.TypeOf<Text>());
97+
});
98+
Assert.That(((Text)runs.ElementAt(2).FirstChild).Text, Is.EqualTo("World"));
99+
}
84100
}
85101
}

0 commit comments

Comments
 (0)