From 6f17cdafd84e879123552e09ebfb916ec4c0980c Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Tue, 6 Jan 2026 12:30:23 -0700 Subject: [PATCH 1/3] add lastRenderedPageBreak test cases (failing) --- OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs | 40 +++++++++++++++++++ OpenXmlPowerTools.Tests/UnicodeMapperTests.cs | 29 ++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs b/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs index 334277b4..810d3009 100644 --- a/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs +++ b/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs @@ -197,6 +197,21 @@ public class OpenXmlRegexTests "; + private const string LastRenderedPageBreakXmlString = +@" + + + + ThisIsAParagraphContainingNoNaturalLi + + + + neBreaksSoTheLineBreakIsForced. + + + +"; + private static string InnerText(XContainer e) { return e.Descendants(W.r) @@ -365,5 +380,30 @@ public void CanReplaceTextWithFields() Assert.Equal(1, count); Assert.Equal("As stated in Article {__1} and this Section {__1.1}, this is described in Exhibit 4.", innerText); } + + [Fact] + public void CanMatchDespiteInvisibleLayoutMarkers() + { + XDocument partDocument = XDocument.Parse(LastRenderedPageBreakXmlString); + XElement p = partDocument.Descendants(W.p).Last(); + + using (var stream = new MemoryStream()) + using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(stream, DocumentType)) + { + MainDocumentPart part = wordDocument.AddMainDocumentPart(); + part.PutXDocument(partDocument); + + var content = partDocument.Descendants(W.p); + var regex = new Regex(@"LineBreak"); + int count = OpenXmlRegex.Replace(content, regex, "LB", null); + + p = partDocument.Descendants(W.p).Last(); + string innerText = InnerText(p); + + Assert.Equal(2, count); + Assert.Equal("ThisIsAParagraphContainingNoNaturalLBsSoTheLBIsForced.", innerText); + } + } + } } \ No newline at end of file diff --git a/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs b/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs index b54e8f69..667695d2 100644 --- a/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs +++ b/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs @@ -124,5 +124,34 @@ public void CanStringifySymbols() Assert.Equal(symFromChar1.ToString(SaveOptions.None), symFromChar2.ToString(SaveOptions.None)); Assert.Equal(symFromChar1.ToString(SaveOptions.None), symFromChar3.ToString(SaveOptions.None)); } + + private const string LastRenderedPageBreakXmlString = +@" + + + + ThisIsAParagraphContainingNoNaturalLi + + + + neBreaksSoTheLineBreakIsForced. + + + +"; + + [Fact] + public void IgnoresTemporaryLayoutMarkers() + { + XDocument partDocument = XDocument.Parse(LastRenderedPageBreakXmlString); + XElement p = partDocument.Descendants(W.p).Last(); + string actual = p.Descendants(W.r) + .Select(UnicodeMapper.RunToString) + .StringConcatenate(); + // p.Value is "the concatenated text content of this element", which + // (in THIS test case, which does not feature any symbols or special + // characters) should exactly match the output of UnicodeMapper: + Assert.Equal(p.Value, actual); + } } } \ No newline at end of file From 07bbc2681b6c4311d631b0a28216c30e0d0cc0ca Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Sun, 4 Jan 2026 17:20:04 -0700 Subject: [PATCH 2/3] OpenXmlRegex should ignore lastRenderedPageBreak (temporary layout marker does not represent any document text) --- OpenXmlPowerTools/OpenXmlRegex.cs | 2 +- OpenXmlPowerTools/UnicodeMapper.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/OpenXmlPowerTools/OpenXmlRegex.cs b/OpenXmlPowerTools/OpenXmlRegex.cs index 6e930992..34cf4420 100644 --- a/OpenXmlPowerTools/OpenXmlRegex.cs +++ b/OpenXmlPowerTools/OpenXmlRegex.cs @@ -446,7 +446,7 @@ private static object WmlSearchAndReplaceTransform(XNode node, Regex regex, stri if (element.Name == W.r) { return element.Elements() - .Where(e => e.Name != W.rPr) + .Where(e => e.Name != W.rPr && e.Name != W.lastRenderedPageBreak) .Select(e => e.Name == W.t ? ((string)e).Select(c => new XElement(W.r, diff --git a/OpenXmlPowerTools/UnicodeMapper.cs b/OpenXmlPowerTools/UnicodeMapper.cs index 141e4358..ffc42716 100644 --- a/OpenXmlPowerTools/UnicodeMapper.cs +++ b/OpenXmlPowerTools/UnicodeMapper.cs @@ -99,6 +99,11 @@ public static string RunToString(XElement element) { return HorizontalTabulation.ToString(); } + // Ignore temporary layout markers that are not actual document content + if (element.Name == W.lastRenderedPageBreak) + { + return string.Empty; + } if (element.Name == W.fldChar) { From fe4fec385b8d36e2715b432e9d7b7b1885c945be Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Tue, 6 Jan 2026 13:09:09 -0700 Subject: [PATCH 3/3] simple DocumentAssembler test case for lastRenderedPageBreak bug --- .../DocumentAssemblerTests.cs | 1 + TestFiles/DA-lastRenderedPageBreak.docx | Bin 0 -> 13715 bytes TestFiles/DA-lastRenderedPageBreak.xml | 4 ++++ 3 files changed, 5 insertions(+) create mode 100644 TestFiles/DA-lastRenderedPageBreak.docx create mode 100644 TestFiles/DA-lastRenderedPageBreak.xml diff --git a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs index 5432cd35..cdbdb3bb 100644 --- a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs +++ b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs @@ -176,6 +176,7 @@ public void DA102_Throws(string name, string data) [Theory] [InlineData("DA025-TemplateDocument.docx", "DA-Data.xml", false)] + [InlineData("DA-lastRenderedPageBreak.docx", "DA-lastRenderedPageBreak.xml", false)] public void DA103_UseXmlDocument(string name, string data, bool err) { var sourceDir = new DirectoryInfo("../../../../TestFiles/"); diff --git a/TestFiles/DA-lastRenderedPageBreak.docx b/TestFiles/DA-lastRenderedPageBreak.docx new file mode 100644 index 0000000000000000000000000000000000000000..8baae736e8f76bb5ee90c22410e140c6788f4578 GIT binary patch literal 13715 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 n{X6{MUFKim$Si+>|HFaGOF@Cm*Q$EW`TjPkI3 literal 0 HcmV?d00001 diff --git a/TestFiles/DA-lastRenderedPageBreak.xml b/TestFiles/DA-lastRenderedPageBreak.xml new file mode 100644 index 00000000..667715df --- /dev/null +++ b/TestFiles/DA-lastRenderedPageBreak.xml @@ -0,0 +1,4 @@ + + test + emergency + \ No newline at end of file