This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch 2.3-gae
in repository https://gitbox.apache.org/repos/asf/freemarker.git

commit 65c8b98a0f64bd33803f6042ff0707e2774dda3c
Author: ddekany <[email protected]>
AuthorDate: Sun Feb 7 18:07:26 2021 +0100

    Added new special variable, time_zone (referred like .time_zone, like all 
special variables), to retrieve the current value of the time_zone setting as a 
string.
---
 src/main/java/freemarker/core/BuiltinVariable.java    |  7 +++++++
 src/manual/en_US/book.xml                             | 19 +++++++++++++++++++
 src/test/java/freemarker/core/CamelCaseTest.java      |  3 +++
 .../test/templatesuite/expected/specialvars.txt       |  1 +
 .../test/templatesuite/templates/setting.ftl          |  2 ++
 .../test/templatesuite/templates/specialvars.ftl      |  1 +
 6 files changed, 33 insertions(+)

diff --git a/src/main/java/freemarker/core/BuiltinVariable.java 
b/src/main/java/freemarker/core/BuiltinVariable.java
index b5ec4b7..ccc9d0b 100644
--- a/src/main/java/freemarker/core/BuiltinVariable.java
+++ b/src/main/java/freemarker/core/BuiltinVariable.java
@@ -56,6 +56,8 @@ final class BuiltinVariable extends Expression {
     static final String LOCALE = Configurable.LOCALE_KEY;
     static final String LOCALE_OBJECT_CC = Configurable.LOCALE_KEY_CAMEL_CASE 
+ "Object";
     static final String LOCALE_OBJECT = Configurable.LOCALE_KEY + "_object";
+    static final String TIME_ZONE_CC = Configurable.TIME_ZONE_KEY_CAMEL_CASE;
+    static final String TIME_ZONE = Configurable.TIME_ZONE_KEY;
     static final String CURRENT_NODE_CC = "currentNode";
     static final String CURRENT_NODE = "current_node";
     static final String NODE = "node";
@@ -116,6 +118,8 @@ final class BuiltinVariable extends Expression {
         PASS,
         TEMPLATE_NAME_CC,
         TEMPLATE_NAME,
+        TIME_ZONE_CC,
+        TIME_ZONE,
         URL_ESCAPING_CHARSET_CC,
         URL_ESCAPING_CHARSET,
         VARS,
@@ -270,6 +274,9 @@ final class BuiltinVariable extends Expression {
             }
             return args;
         }
+        if (name == TIME_ZONE || name == TIME_ZONE_CC) {
+            return new SimpleScalar(env.getTimeZone().getID());
+        }
 
         throw new _MiscTemplateException(this,
                 "Invalid special variable: ", name);
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index b6682b9..8ef2763 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -25469,6 +25469,18 @@ There was no specific handler for node y
           contains dash and further info after the numbers, like in
           2.3.21-nightly_20140726T151800Z.</para>
         </listitem>
+
+        <listitem>
+          <para><indexterm>
+              <primary>time zone</primary>
+            </indexterm><indexterm>
+              <primary>time_zone</primary>
+            </indexterm><literal>time_zone</literal> (exists since FreeMarker
+          2.3.31): The current value of the <literal>time_zone</literal>
+          setting, as a string. This is the ID of the time zone, like
+          <literal>GMT+01:00</literal>, or
+          <literal>America/Los_Angeles</literal>.</para>
+        </listitem>
       </itemizedlist>
 
       <simplesect xml:id="ref_specvar_get_optional_template">
@@ -29419,6 +29431,13 @@ TemplateModel x = env.getVariable("x");  // get 
variable x</programlisting>
             </listitem>
 
             <listitem>
+              <para>Added new special variable, <literal>time_zone</literal>
+              (referred like <literal>.time_zone</literal>, like all special
+              variables), to retrieve the current value of the
+              <literal>time_zone</literal> setting as a string.</para>
+            </listitem>
+
+            <listitem>
               <para>Allowed escaping <literal>#</literal> with backlash in
               identifier names (not in string), as it used to occur in
               database column names. Like if you have a column name like
diff --git a/src/test/java/freemarker/core/CamelCaseTest.java 
b/src/test/java/freemarker/core/CamelCaseTest.java
index b1e1dcd..4e5d537 100644
--- a/src/test/java/freemarker/core/CamelCaseTest.java
+++ b/src/test/java/freemarker/core/CamelCaseTest.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
+import java.util.TimeZone;
 
 import org.junit.Test;
 
@@ -43,6 +44,8 @@ public class CamelCaseTest extends TemplateTest {
         assertOutput("${.data_model?is_hash?c}", "true");
         assertOutput("${.localeObject.toString()}", "de_DE");
         assertOutput("${.locale_object.toString()}", "de_DE");
+        assertOutput("${.time_zone}", 
getConfiguration().getTimeZone().getID());
+        assertOutput("${.timeZone}", getConfiguration().getTimeZone().getID());
         assertOutput("${.templateName?length}", "0");
         assertOutput("${.template_name?length}", "0");
         assertOutput("${.outputEncoding}", "utf-8");
diff --git 
a/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt 
b/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
index e2fa13e..2c7bac3 100644
--- a/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
+++ b/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
@@ -18,6 +18,7 @@
  */
 en == en
 en_US == en_US
+GMT+01:00 == GMT+01:00
 utf-8 == utf-8
 specialvars.ftl == specialvars.ftl
 iso-8859-1 == iso-8859-1
diff --git 
a/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl 
b/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
index fcf9605..715bbe2 100644
--- a/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
+++ b/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
@@ -37,8 +37,10 @@
 <@assertEquals expected='dtf' actual=.now?string />
 
 <#setting time_zone='GMT+00'>
+<@assertEquals expected='GMT+00:00' actual=.time_zone />
 <#assign t1='2000'?datetime('yyyy')>
 <#setting time_zone='GMT+01'>
+<@assertEquals expected='GMT+01:00' actual=.time_zone />
 <#assign t2='2000'?datetime('yyyy')>
 <@assertEquals expected=1000*60*60 actual=t1?long-t2?long />
 
diff --git 
a/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl 
b/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
index 50416c9..abf53df 100644
--- a/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
+++ b/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
@@ -26,6 +26,7 @@
 <#assign works = .globals>
 ${.lang} == en
 ${.locale} == en_US
+${.time_zone} == GMT+01:00
 <#assign works = .locals!>
 <#assign works = .main>
 <#assign works = .node!>

Reply via email to