From 928e4acd8185fe9bc104132443aa520c21ab5a1a Mon Sep 17 00:00:00 2001 From: Alexander Nittka Date: Thu, 19 Dec 2024 13:49:02 +0100 Subject: [PATCH] naive removal of colon from string arguments of expressions --- .../expressionhelper/SimpleExpression.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/org.tvtower.db/src/org/tvtower/db/validation/expressionhelper/SimpleExpression.java b/org.tvtower.db/src/org/tvtower/db/validation/expressionhelper/SimpleExpression.java index 69e427c..ec18b37 100644 --- a/org.tvtower.db/src/org/tvtower/db/validation/expressionhelper/SimpleExpression.java +++ b/org.tvtower.db/src/org/tvtower/db/validation/expressionhelper/SimpleExpression.java @@ -19,12 +19,29 @@ public class SimpleExpression { private static final Pattern WT_REPLACE_PATTERN = Pattern.compile("&wt_(\\\"\\w+\\\")"); private static final Pattern MISSING_DOT_PATTERN = Pattern.compile("\\$\\{(\\w+):"); + private static final Pattern COLON_IN_STRING_PATTERN=Pattern.compile(":\"[^\":${]*(:)[^\":${]*\""); + private static final List KNOWN_COMPLEX_FUNCTIONS = ImmutableList.of(// ".and", ".eq", ".gt", ".gte", ".lt", ".lte", ".or", ".if", ".person", ".csv"); - public static List get(String content) { + public static List get(String contentRaw) { Set startIndexes = new HashSet<>(); List result = new ArrayList<>(); + String content = contentRaw; + //replace colon from simple strings in order to find the correct number of function arguments + if (contentRaw.indexOf('$') >= 0) { + Matcher matcher = COLON_IN_STRING_PATTERN.matcher(content); + + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + matcher.appendReplacement(sb, ":" + matcher.group().replace(':', ' ')); + } + matcher.appendTail(sb); + content = sb.toString(); + } else { + return result; + } + Matcher simpleExpressionMatcher = SIMPLE_EXPRESSION_PATTERN.matcher(content); while (simpleExpressionMatcher.find()) { String fct = simpleExpressionMatcher.group(2).toLowerCase();