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
The following commit(s) were added to refs/heads/3 by this push:
new aed7d57 Forward ported from 2.3-gae: Allowed escaping # with backlash
in identifier names (not in string), as it used to occur in database column
names.
aed7d57 is described below
commit aed7d57de710a80725b3213e78bf185839c795ac
Author: ddekany <[email protected]>
AuthorDate: Sat Feb 6 17:42:00 2021 +0100
Forward ported from 2.3-gae: Allowed escaping # with backlash in identifier
names (not in string), as it used to occur in database column names.
---
.../org/apache/freemarker/core/cano-identifier-escaping.f3au | 6 +++---
.../org/apache/freemarker/core/cano-identifier-escaping.f3au.out | 4 ++--
.../freemarker/core/templatesuite/expected/identifier-escaping.txt | 2 +-
.../core/templatesuite/templates/identifier-escaping.f3ac | 6 +++---
.../java/org/apache/freemarker/core/util/TemplateLanguageUtils.java | 2 +-
.../src/main/java/org/apache/freemarker/core/util/_StringUtils.java | 2 +-
freemarker-core/src/main/javacc/FTL.jj | 3 ++-
7 files changed, 13 insertions(+), 12 deletions(-)
diff --git
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au
index c866a06..d484b4f 100644
---
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au
+++
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au
@@ -30,9 +30,9 @@
</#function>
${f\-a("f-a")}
-<#assign \-\-\-\.\: = 'dash-dash-dash etc.'>
-${\-\-\-\.\:}
-${.vars['---.:']}
+<#assign \-\-\-\.\:\# = 'dash-dash-dash etc.'>
+${\-\-\-\.\:\#}
+${.vars['---.:#']}
<#assign hash = { '--moz-prop': 'propVal' }>
${hash.\-\-moz\-prop}
${hash['--moz-prop']}
diff --git
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au.out
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au.out
index f50dedb..ea66644 100644
---
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au.out
+++
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-identifier-escaping.f3au.out
@@ -21,8 +21,8 @@
<#function f\-a(p\-a)><#return p\-a + " works"/></#function>${f\-a("f-a")}
-<#assign \-\-\-\.\: = "dash-dash-dash etc.">${\-\-\-\.\:}
-${.vars["---.:"]}
+<#assign \-\-\-\.\:\# = "dash-dash-dash etc.">${\-\-\-\.\:\#}
+${.vars["---.:#"]}
<#assign hash = {"--moz-prop": "propVal"}>${hash.\-\-moz\-prop}
${hash["--moz-prop"]}
diff --git
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/identifier-escaping.txt
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/identifier-escaping.txt
index 6f7ba21..6783042 100644
---
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/identifier-escaping.txt
+++
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/identifier-escaping.txt
@@ -40,7 +40,7 @@ as5
<catchAll x=1 y=2 z=3 data-foo=4 a:b.c=5 />
----.: = dash-dash-dash etc.
+---.:# = dash-dash-dash etc.
@as@_a = as1
as/b = as3
as'c = as4
diff --git
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/identifier-escaping.f3ac
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/identifier-escaping.f3ac
index 1d472a7..34f8c88 100644
---
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/identifier-escaping.f3ac
+++
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/identifier-escaping.f3ac
@@ -30,9 +30,9 @@
</#function>
${f\-a("f-a")}
-<#assign \-\-\-\.\: = 'dash-dash-dash etc.'>
-${\-\-\-\.\:}
-${.vars['---.:']}
+<#assign \-\-\-\.\:\# = 'dash-dash-dash etc.'>
+${\-\-\-\.\:\#}
+${.vars['---.:#']}
<#assign hash = { '--moz-prop': 'propVal' }>
${hash.\-\-moz\-prop}
${hash['--moz-prop']}
diff --git
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/TemplateLanguageUtils.java
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/TemplateLanguageUtils.java
index fcc9db4..8548cfa 100644
---
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/TemplateLanguageUtils.java
+++
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/TemplateLanguageUtils.java
@@ -642,7 +642,7 @@ public final class TemplateLanguageUtils {
* backslash. Currently it return {@code true} for these: {@code '-'},
{@code '.'} and {@code ':'}.
*/
public static boolean isEscapedIdentifierCharacter(final char c) {
- return c == '-' || c == '.' || c == ':';
+ return c == '-' || c == '.' || c == ':' || c == '#';
}
/**
diff --git
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/_StringUtils.java
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/_StringUtils.java
index 96f6960..587b20f 100644
---
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/_StringUtils.java
+++
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/_StringUtils.java
@@ -1565,7 +1565,7 @@ public class _StringUtils {
scanForQuotationType: for (int i = 0; i < name.length(); i++) {
final char c = name.charAt(i);
if (!(i == 0 ?
TemplateLanguageUtils.isNonEscapedIdentifierStart(c) :
TemplateLanguageUtils.isNonEscapedIdentifierPart(c)) && c != '@') {
- if ((quotationType == 0 || quotationType == '\\') && (c == '-'
|| c == '.' || c == ':')) {
+ if ((quotationType == 0 || quotationType == '\\') &&
TemplateLanguageUtils.isEscapedIdentifierCharacter (c)) {
quotationType = '\\';
} else {
quotationType = '"';
diff --git a/freemarker-core/src/main/javacc/FTL.jj
b/freemarker-core/src/main/javacc/FTL.jj
index 8abd3e8..0ebf620 100644
--- a/freemarker-core/src/main/javacc/FTL.jj
+++ b/freemarker-core/src/main/javacc/FTL.jj
@@ -1276,7 +1276,8 @@ TOKEN:
]
>
|
- <#ESCAPED_ID_CHAR: "\\" ("-" | "." | ":")>
+ // Keep this in sync with
TemplateLanguageUtils.isEscapedIdentifierCharacter
+ <#ESCAPED_ID_CHAR: "\\" ("-" | "." | ":" | "#")>
|
<#ID_START_CHAR: <NON_ESCAPED_ID_START_CHAR>|<ESCAPED_ID_CHAR>>
|