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());

Reply via email to