From 6f04be8cda23f2343a1ea32044dc0e8ad1149849 Mon Sep 17 00:00:00 2001 From: Anton Oellerer <13524304+AntonOellerer@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:21:26 +0200 Subject: [PATCH] Retrieve placeholders from string via regex To avoid problems related to non-breaking whitespace, placeholders are now retrieved from strings via a regex matcher. --- build.gradle | 2 +- .../com/docutools/jocument/impl/ParsingUtils.java | 11 ++++++++++- .../docutools/jocument/impl/word/WordGenerator.java | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 3bd50a8f..01ed79ce 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group 'com.docutools' -version = '4.1.0' +version = '4.1.1' java { toolchain { diff --git a/src/main/java/com/docutools/jocument/impl/ParsingUtils.java b/src/main/java/com/docutools/jocument/impl/ParsingUtils.java index 488c59e2..4b843fd7 100644 --- a/src/main/java/com/docutools/jocument/impl/ParsingUtils.java +++ b/src/main/java/com/docutools/jocument/impl/ParsingUtils.java @@ -3,10 +3,13 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ParsingUtils { private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("\\{\\{([^{}]+)?}}"); + private static final Logger logger = LogManager.getLogger(); private ParsingUtils() { } @@ -21,7 +24,13 @@ public static String stripBrackets(String value) { if (value.length() < 4) { return value; } - return value.substring(2, value.length() - 2); + Matcher matcher = PLACEHOLDER_PATTERN.matcher(value); + if (matcher.find()) { + return matcher.group(1); + } else { + logger.debug("String {} did not contain a placeholder", value); + return value; + } } public static List getMatchingLoopEnds(String placeholder) { diff --git a/src/main/java/com/docutools/jocument/impl/word/WordGenerator.java b/src/main/java/com/docutools/jocument/impl/word/WordGenerator.java index e612c2be..30cbd73a 100644 --- a/src/main/java/com/docutools/jocument/impl/word/WordGenerator.java +++ b/src/main/java/com/docutools/jocument/impl/word/WordGenerator.java @@ -139,7 +139,7 @@ private boolean isCustomPlaceholder(IBodyElement element) { return element instanceof XWPFParagraph xwpfParagraph && resolver.resolve( ParsingUtils.stripBrackets( - WordUtilities.toString(xwpfParagraph).trim() + WordUtilities.toString(xwpfParagraph) )).map(PlaceholderData::getType) .map(type -> type == PlaceholderType.CUSTOM) .orElse(false);