This is an automated email from the ASF dual-hosted git repository. ddekany pushed a commit to branch 3 in repository https://gitbox.apache.org/repos/asf/freemarker.git
commit 1c8ea677dd32c2f8f90aecdb181c653dbd4be2ee Author: ddekany <[email protected]> AuthorDate: Sat Dec 31 22:55:04 2022 +0100 Forward ported from 2.3-gae: Added ?cUpperCase, and ?cLowerCase --- .../templatesuite/expected/string-builtins1.txt | 1 + .../templatesuite/templates/string-builtins1.f3ac | 7 ++++ .../org/apache/freemarker/core/ASTExpBuiltIn.java | 49 ++++++---------------- 3 files changed, 20 insertions(+), 37 deletions(-) diff --git a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/string-builtins1.txt b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/string-builtins1.txt index d79e7dc0..a43e56c7 100644 --- a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/string-builtins1.txt +++ b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/string-builtins1.txt @@ -110,3 +110,4 @@ FOOBAR [<\/script>] = [<\/script>] [\u003C![CDATA[] = [\u003C![CDATA[] []]\u003E] = []]\u003E] + diff --git a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/string-builtins1.f3ac b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/string-builtins1.f3ac index be1b19e3..ab6187c7 100644 --- a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/string-builtins1.f3ac +++ b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/string-builtins1.f3ac @@ -127,3 +127,10 @@ ${c?eval} [${"</script>"?jsonString}] = [<\/script>] [${"<![CDATA["?jsonString}] = [\u003C![CDATA[] [${"]]>"?jsonString}] = []]\u003E] + +<#-- ?c_...: --> +<#setting locale="tr_TR"> +<@assertEquals actual="i"?upperCase expected="\x0130" /> +<@assertEquals actual="i"?cUpperCase expected="I" /> +<@assertEquals actual="I"?lowerCase expected="\x0131" /> +<@assertEquals actual="I"?cLowerCase expected="i" /> diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java index 8500d6d9..e9d43731 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java @@ -19,47 +19,15 @@ package org.apache.freemarker.core; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - import org.apache.freemarker.core.BuiltInsForDates.iso_BI; import org.apache.freemarker.core.BuiltInsForDates.iso_utc_or_local_BI; import org.apache.freemarker.core.BuiltInsForMarkupOutputs.markup_stringBI; import org.apache.freemarker.core.BuiltInsForMultipleTypes.is_dateLikeBI; -import org.apache.freemarker.core.BuiltInsForNodes.ancestorsBI; -import org.apache.freemarker.core.BuiltInsForNodes.childrenBI; -import org.apache.freemarker.core.BuiltInsForNodes.nextSiblingBI; -import org.apache.freemarker.core.BuiltInsForNodes.node_nameBI; -import org.apache.freemarker.core.BuiltInsForNodes.node_namespaceBI; -import org.apache.freemarker.core.BuiltInsForNodes.node_typeBI; -import org.apache.freemarker.core.BuiltInsForNodes.parentBI; -import org.apache.freemarker.core.BuiltInsForNodes.previousSiblingBI; -import org.apache.freemarker.core.BuiltInsForNodes.rootBI; -import org.apache.freemarker.core.BuiltInsForNumbers.absBI; -import org.apache.freemarker.core.BuiltInsForNumbers.byteBI; -import org.apache.freemarker.core.BuiltInsForNumbers.ceilingBI; -import org.apache.freemarker.core.BuiltInsForNumbers.doubleBI; -import org.apache.freemarker.core.BuiltInsForNumbers.floatBI; -import org.apache.freemarker.core.BuiltInsForNumbers.floorBI; -import org.apache.freemarker.core.BuiltInsForNumbers.intBI; -import org.apache.freemarker.core.BuiltInsForNumbers.is_infiniteBI; -import org.apache.freemarker.core.BuiltInsForNumbers.is_nanBI; -import org.apache.freemarker.core.BuiltInsForNumbers.longBI; -import org.apache.freemarker.core.BuiltInsForNumbers.number_to_dateBI; -import org.apache.freemarker.core.BuiltInsForNumbers.roundBI; -import org.apache.freemarker.core.BuiltInsForNumbers.shortBI; +import org.apache.freemarker.core.BuiltInsForNodes.*; +import org.apache.freemarker.core.BuiltInsForNumbers.*; import org.apache.freemarker.core.BuiltInsForOutputFormatRelated.escBI; import org.apache.freemarker.core.BuiltInsForOutputFormatRelated.no_escBI; -import org.apache.freemarker.core.BuiltInsForSequences.chunkBI; -import org.apache.freemarker.core.BuiltInsForSequences.firstBI; -import org.apache.freemarker.core.BuiltInsForSequences.lastBI; -import org.apache.freemarker.core.BuiltInsForSequences.reverseBI; -import org.apache.freemarker.core.BuiltInsForSequences.seq_containsBI; -import org.apache.freemarker.core.BuiltInsForSequences.seq_index_ofBI; -import org.apache.freemarker.core.BuiltInsForSequences.sortBI; -import org.apache.freemarker.core.BuiltInsForSequences.sort_byBI; +import org.apache.freemarker.core.BuiltInsForSequences.*; import org.apache.freemarker.core.BuiltInsForStringsMisc.evalBI; import org.apache.freemarker.core.BuiltInsForStringsMisc.evalJsonBI; import org.apache.freemarker.core.model.TemplateCallableModel; @@ -68,6 +36,11 @@ import org.apache.freemarker.core.model.TemplateModelWithOriginName; import org.apache.freemarker.core.util._DateUtils; import org.apache.freemarker.core.util._StringUtils; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + /** * AST expression node: {@code exp?name} */ @@ -76,8 +49,8 @@ abstract class ASTExpBuiltIn extends ASTExpression implements Cloneable { protected ASTExpression target; protected String key; - static final int NUMBER_OF_BIS = 272; - static final HashMap<String, ASTExpBuiltIn> BUILT_INS_BY_NAME = new HashMap(NUMBER_OF_BIS * 3 / 2 + 1, 1f); + static final int NUMBER_OF_BIS = 274; + static final HashMap<String, ASTExpBuiltIn> BUILT_INS_BY_NAME = new HashMap<>(NUMBER_OF_BIS * 3 / 2 + 1, 1f); static { // Note that you must update NUMBER_OF_BIS if you add new items here! @@ -224,6 +197,7 @@ abstract class ASTExpBuiltIn extends ASTExpression implements Cloneable { putBI("long", new longBI()); putBI("lowerAbc", new BuiltInsForNumbers.lower_abcBI()); putBI("lowerCase", new BuiltInsForStringsBasic.lower_caseBI()); + putBI("cLowerCase", new BuiltInsForStringsBasic.c_lower_caseBI()); putBI("namespace", new BuiltInsForMultipleTypes.namespaceBI()); putBI("new", new BuiltInsForStringsMisc.newBI()); putBI("markupString", new markup_stringBI()); @@ -275,6 +249,7 @@ abstract class ASTExpBuiltIn extends ASTExpression implements Cloneable { putBI("uncapFirst", new BuiltInsForStringsBasic.uncap_firstBI()); putBI("upperAbc", new BuiltInsForNumbers.upper_abcBI()); putBI("upperCase", new BuiltInsForStringsBasic.upper_caseBI()); + putBI("cUpperCase", new BuiltInsForStringsBasic.c_upper_caseBI()); putBI("url", new BuiltInsForStringsEncoding.urlBI()); putBI("urlPath", new BuiltInsForStringsEncoding.urlPathBI()); putBI("values", new BuiltInsForHashes.valuesBI());
