From d3a414872a245c5786d8a85284ba7ef3665f681a Mon Sep 17 00:00:00 2001 From: Donal Devine <5518040+donaldevine@users.noreply.github.com> Date: Thu, 11 Jun 2026 11:08:50 +0100 Subject: [PATCH 1/2] Preserve spaces around template tags (#104) --- src/MiniWord/MiniWord.Implment.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MiniWord/MiniWord.Implment.cs b/src/MiniWord/MiniWord.Implment.cs index 6e48862..678cb4b 100644 --- a/src/MiniWord/MiniWord.Implment.cs +++ b/src/MiniWord/MiniWord.Implment.cs @@ -288,7 +288,8 @@ private static void AvoidSplitTagText(OpenXmlElement xmlElement) { var first = pool.First(); var newText = first.Clone() as Text; - newText.Text = s; + newText.Text = sb.ToString(); + newText.Space = SpaceProcessingModeValues.Preserve; first.Parent.InsertBefore(newText, first); foreach (var t in pool) { From d9f555a8725c8379bd522a07930b7a7e30b725de Mon Sep 17 00:00:00 2001 From: Donal Devine <5518040+donaldevine@users.noreply.github.com> Date: Thu, 11 Jun 2026 11:33:23 +0100 Subject: [PATCH 2/2] Apply xml:space=preserve only when merged tag text has leading/trailing whitespace --- src/MiniWord/MiniWord.Implment.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/MiniWord/MiniWord.Implment.cs b/src/MiniWord/MiniWord.Implment.cs index 678cb4b..8d22443 100644 --- a/src/MiniWord/MiniWord.Implment.cs +++ b/src/MiniWord/MiniWord.Implment.cs @@ -264,7 +264,9 @@ private static void AvoidSplitTagText(OpenXmlElement xmlElement) sb.Append(text.InnerText); pool.Add(text); - var s = sb.ToString().TrimStart(); //TODO: + var rawText = sb.ToString(); + var s = rawText.TrimStart(); + // TODO: check tag exist // TODO: record tag text if without tag then system need to clear them // TODO: every {{tag}} one for them and add text before first text and copy first one and remove {{, tagname, }} @@ -288,8 +290,11 @@ private static void AvoidSplitTagText(OpenXmlElement xmlElement) { var first = pool.First(); var newText = first.Clone() as Text; - newText.Text = sb.ToString(); - newText.Space = SpaceProcessingModeValues.Preserve; + newText.Text = rawText; + if (char.IsWhiteSpace(rawText[0]) || char.IsWhiteSpace(rawText[rawText.Length - 1])) + { + newText.Space = SpaceProcessingModeValues.Preserve; + } first.Parent.InsertBefore(newText, first); foreach (var t in pool) {