You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2015/12/27 15:54:54 UTC

[1/2] incubator-freemarker git commit: (Documentation typo fixes and small adjustments.)

Repository: incubator-freemarker
Updated Branches:
  refs/heads/2.3-gae ea3915395 -> 90fcfb9d7


(Documentation typo fixes and small adjustments.)


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/d3654bc3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/d3654bc3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/d3654bc3

Branch: refs/heads/2.3-gae
Commit: d3654bc3eea27c2a9c7b2fbe43c7ec0a793df14b
Parents: ea39153
Author: ddekany <dd...@apache.org>
Authored: Sat Dec 26 21:50:27 2015 +0100
Committer: ddekany <dd...@apache.org>
Committed: Sat Dec 26 21:50:27 2015 +0100

----------------------------------------------------------------------
 src/main/java/freemarker/core/Configurable.java | 5 +++--
 src/manual/en_US/book.xml                       | 6 +++---
 2 files changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d3654bc3/src/main/java/freemarker/core/Configurable.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/Configurable.java b/src/main/java/freemarker/core/Configurable.java
index adba746..5594ba0 100644
--- a/src/main/java/freemarker/core/Configurable.java
+++ b/src/main/java/freemarker/core/Configurable.java
@@ -1536,8 +1536,9 @@ public class Configurable {
     /**
      * Sets a FreeMarker setting by a name and string value. If you can configure FreeMarker directly with Java (or
      * other programming language), you should use the dedicated setter methods instead (like
-     * {@link #setObjectWrapper(ObjectWrapper)}. This meant to be used if you get the settings from somewhere
-     * as text. Regardless, below you will find an overview of the settings available no matter how you set them. 
+     * {@link #setObjectWrapper(ObjectWrapper)}. This meant to be used only when you get settings from somewhere
+     * as {@link String}-{@link String} name-value pairs (typically, as a {@link Properties} object). Below you find an
+     * overview of the settings available.
      * 
      * <p>Note: As of FreeMarker 2.3.23, setting names can be written in camel case too. For example, instead of
      * {@code date_format} you can also use {@code dateFormat}. It's likely that camel case will become to the

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d3654bc3/src/manual/en_US/book.xml
----------------------------------------------------------------------
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index 51fae1f..555c8e4 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -8069,7 +8069,7 @@ myCfg.setDefaultEncoding("UTF-8");</programlisting>
           </listitem>
 
           <listitem>
-            <para><literal>Environment </literal>layer: There are two ways
+            <para><literal>Environment </literal>layer: There are two ways of
             doing it:</para>
 
             <itemizedlist>
@@ -17617,7 +17617,7 @@ Sorted by name.last:
             <primary>interpret built-in</primary>
           </indexterm>
 
-          <para>This built-in parser a string as an FTL template, and returns
+          <para>This built-in parses a string as an FTL template, and returns
           an user-defined directive that executes that template, just as if a
           template with that content were <link
           linkend="ref_directive_include"><literal>include</literal>-d</link>
@@ -17642,7 +17642,7 @@ Sorted by name.last:
           <literal>Configuration</literal> object, not from template that
           calls <literal>interpret</literal>. This also means that the
           previously auto-detected tag syntax or auto-detected naming
-          convention don't effect the parsing of the interpreted template.
+          convention doesn't effect the parsing of the interpreted template.
           This is consistent with how the <link
           linkend="ref_directive_include"><literal>include</literal>
           directive</link> works.</para>


[2/2] incubator-freemarker git commit: The parser used by ?interpet and ?eval inherits not only the output_format of its surrounding lexical context, but also the auto-escaping policy of it (basically, if auto-escapig is on or off). Also documented how t

Posted by dd...@apache.org.
The parser used by ?interpet and ?eval inherits not only the output_format of its surrounding lexical context, but also the auto-escaping policy of it (basically, if auto-escapig is on or off). Also documented how these built-ins inherit the configuration settings.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/90fcfb9d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/90fcfb9d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/90fcfb9d

Branch: refs/heads/2.3-gae
Commit: 90fcfb9d7a6b859894ca27886ef7bd43c29cb8a8
Parents: d3654bc
Author: ddekany <dd...@apache.org>
Authored: Sun Dec 27 15:54:31 2015 +0100
Committer: ddekany <dd...@apache.org>
Committed: Sun Dec 27 15:54:31 2015 +0100

----------------------------------------------------------------------
 .../freemarker/core/BuiltInsForStringsMisc.java |  3 +-
 src/main/java/freemarker/core/Interpret.java    |  3 +-
 .../core/OutputFormatBoundBuiltIn.java          |  4 +-
 ..._ParserConfigurationWithInheritedFormat.java | 10 ++--
 src/main/javacc/FTL.jj                          |  2 +-
 src/manual/en_US/book.xml                       | 49 ++++++++++++++------
 .../java/freemarker/core/OutputFormatTest.java  | 22 +++++++++
 7 files changed, 69 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/BuiltInsForStringsMisc.java b/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
index 8b83c2c..3d21c0a 100644
--- a/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
+++ b/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
@@ -72,7 +72,8 @@ class BuiltInsForStringsMisc {
                     ParserConfiguration pCfg = parentTemplate.getParserConfiguration();
                     // pCfg.outputFormat is exceptional: it's inherited from the lexical context
                     if (pCfg.getOutputFormat() != outputFormat) {
-                        pCfg = new _ParserConfigurationWithInheritedFormat(pCfg, outputFormat, null);
+                        pCfg = new _ParserConfigurationWithInheritedFormat(
+                                pCfg, outputFormat, Integer.valueOf(autoEscapingPolicy));
                     }
                     
                     FMParser parser = new FMParser(

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/main/java/freemarker/core/Interpret.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/Interpret.java b/src/main/java/freemarker/core/Interpret.java
index 0b947ef..01d2a80 100644
--- a/src/main/java/freemarker/core/Interpret.java
+++ b/src/main/java/freemarker/core/Interpret.java
@@ -86,7 +86,8 @@ class Interpret extends OutputFormatBoundBuiltIn {
             ParserConfiguration pCfg = parentTemplate.getParserConfiguration();
             // pCfg.outputFormat is exceptional: it's inherited from the lexical context
             if (pCfg.getOutputFormat() != outputFormat) {
-                pCfg = new _ParserConfigurationWithInheritedFormat(pCfg, outputFormat, null);
+                pCfg = new _ParserConfigurationWithInheritedFormat(
+                        pCfg, outputFormat, Integer.valueOf(autoEscapingPolicy));
             }
             interpretedTemplate = new Template(
                     (parentTemplate.getName() != null ? parentTemplate.getName() : "nameless_template") + "->" + id,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java b/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
index b32617b..2bcc106 100644
--- a/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
+++ b/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
@@ -25,10 +25,12 @@ import freemarker.template.utility.NullArgumentException;
 abstract class OutputFormatBoundBuiltIn extends SpecialBuiltIn {
     
     protected OutputFormat outputFormat;
+    protected int autoEscapingPolicy;
     
-    void bindToOutputFormat(OutputFormat outputFormat) {
+    void bindToOutputFormat(OutputFormat outputFormat, int autoEscapingPolicy) {
         NullArgumentException.check(outputFormat);
         this.outputFormat = outputFormat;
+        this.autoEscapingPolicy = autoEscapingPolicy;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java b/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
index ba21345..c479f45 100644
--- a/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
+++ b/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
@@ -22,19 +22,17 @@ import freemarker.template.Version;
 
 /**
  * For internal use only; don't depend on this, there's no backward compatibility guarantee at all!
- * This class is to work around the lack of module system in Java, i.e., so that other FreeMarker packages can
- * access things inside this package that users shouldn't. 
  */ 
 public final class _ParserConfigurationWithInheritedFormat implements ParserConfiguration {
 
     private final OutputFormat outputFormat;
-    private final Integer autoEscaping;
+    private final Integer autoEscapingPolicy;
     private final ParserConfiguration wrappedPCfg;
 
     public _ParserConfigurationWithInheritedFormat(ParserConfiguration wrappedPCfg, OutputFormat outputFormat,
-            Integer autoEscaping) {
+            Integer autoEscapingPolicy) {
         this.outputFormat = outputFormat;
-        this.autoEscaping = autoEscaping;
+        this.autoEscapingPolicy = autoEscapingPolicy;
         this.wrappedPCfg = wrappedPCfg;
     }
 
@@ -67,7 +65,7 @@ public final class _ParserConfigurationWithInheritedFormat implements ParserConf
     }
 
     public int getAutoEscapingPolicy() {
-        return autoEscaping != null ? autoEscaping.intValue() : wrappedPCfg.getAutoEscapingPolicy();
+        return autoEscapingPolicy != null ? autoEscapingPolicy.intValue() : wrappedPCfg.getAutoEscapingPolicy();
     }
 
     public ArithmeticEngine getArithmeticEngine() {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/main/javacc/FTL.jj
----------------------------------------------------------------------
diff --git a/src/main/javacc/FTL.jj b/src/main/javacc/FTL.jj
index ad81e08..9c858e8 100644
--- a/src/main/javacc/FTL.jj
+++ b/src/main/javacc/FTL.jj
@@ -2128,7 +2128,7 @@ Expression BuiltIn(Expression lhoExp) :
         }
 
         if (result instanceof OutputFormatBoundBuiltIn) {
-            ((OutputFormatBoundBuiltIn) result).bindToOutputFormat(outputFormat);
+            ((OutputFormatBoundBuiltIn) result).bindToOutputFormat(outputFormat, autoEscapingPolicy);
             
             return result;
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/manual/en_US/book.xml
----------------------------------------------------------------------
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index 555c8e4..2745adb 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -17570,10 +17570,10 @@ Sorted by name.last:
           built-ins</link> that refer to a loop variable that was created
           outside <literal><replaceable>s</replaceable></literal>.</para>
 
-          <para>The configuration settings that affect the expression parsing
-          (like syntax) are coming from the <literal>Configuration</literal>
-          object, not from template that invokes
-          <literal>eval</literal>.</para>
+          <para>Regarding the configuration settings that affect the parsing
+          (like syntax) and evaluation the rules are the same as with the
+          <link linkend="ref_builtin_interpret"><literal>interpret</literal>
+          built-in</link>.</para>
         </section>
 
         <section xml:id="ref_builtin_has_content">
@@ -17637,16 +17637,6 @@ Sorted by name.last:
           user-defined directive that, when executed, runs the template whose
           content is the value of <literal>templateSource</literal>.</para>
 
-          <para>The configuration settings that affect the parsing (like tag
-          syntax and naming convention) are coming from the
-          <literal>Configuration</literal> object, not from template that
-          calls <literal>interpret</literal>. This also means that the
-          previously auto-detected tag syntax or auto-detected naming
-          convention doesn't effect the parsing of the interpreted template.
-          This is consistent with how the <link
-          linkend="ref_directive_include"><literal>include</literal>
-          directive</link> works.</para>
-
           <para>The name of the template created by
           <literal>interpret</literal> is the name of the template that calls
           <literal>interpret</literal>, plus
@@ -17673,6 +17663,29 @@ Sorted by name.last:
           a sequence of two items, in which case the first item is the FTL
           string to interpret, and the second items is the template name used
           after the <literal>"-&gt;"</literal>.</para>
+
+          <para>The configuration settings that affect the interpreted
+          template are the same as of the surrounding template, except that
+          parser settings specified in the <link
+          linkend="ref.directive.ftl"><literal>ftl</literal> directive</link>
+          or was established via tag syntax or naming convention
+          auto-detection are instead coming from the
+          <literal>Configuration</literal> object (or naturally, from the
+          <link
+          linkend="pgui_config_templateconfigurations"><literal>TemplateConfiguration</literal></link>,
+          if there's any). Thus the tag syntax, naming convention, whitespace
+          handling, etc. of the interpreted template is independent of that
+          established <emphasis>inside</emphasis> the surrounding template. An
+          important exception from this rule is that the <link
+          linkend="dgui_misc_autoescaping_outputformat">output format</link>
+          and auto-escaping policy is inherited from the lexical context where
+          <literal>interpret</literal> is called from. For example in a
+          template that has <literal>&lt;#ftl
+          output_format="XML"&gt;</literal> header (or if you are inside a
+          <literal>&lt;#output_format
+          "XML"&gt;<replaceable>...</replaceable>&lt;/#output_format&gt;</literal>
+          block), <literal>interpret</literal> calls in it will produce
+          directives with XML output format.</para>
         </section>
 
         <section xml:id="ref_builtin_isType">
@@ -27219,6 +27232,14 @@ TemplateModel x = env.getVariable("x");  // get variable x</programlisting>
                 </listitem>
               </itemizedlist>
             </listitem>
+
+            <listitem>
+              <para>The parser used by <literal>?interpet</literal> and
+              <literal>?eval</literal> inherits not only the
+              <literal>output_format</literal> of its surrounding lexical
+              context, but also the auto-escaping policy of it (basically, if
+              auto-escapig is on or off).</para>
+            </listitem>
           </itemizedlist>
         </section>
       </section>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/90fcfb9d/src/test/java/freemarker/core/OutputFormatTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/OutputFormatTest.java b/src/test/java/freemarker/core/OutputFormatTest.java
index cc31920..dc5e7d4 100644
--- a/src/test/java/freemarker/core/OutputFormatTest.java
+++ b/src/test/java/freemarker/core/OutputFormatTest.java
@@ -868,10 +868,32 @@ public class OutputFormatTest extends TemplateTest {
                 + "<#outputFormat 'XML'>" + commonFTL + "</#outputFormat>",
                 "Eval: RTF; Interpret: RTF \\{&\\}\n"
                 + "Eval: XML; Interpret: XML {&amp;}");
+        
+        // parser.autoEscapingPolicy is inherited too:
+        assertOutput(
+                "<#ftl autoEsc=false outputFormat='XML'>"
+                + commonFTL + " ${'.autoEsc'?eval?c}",
+                "Eval: XML; Interpret: XML {&} false");
+        assertOutput(
+                "<#ftl outputFormat='XML'>"
+                + "<#noAutoEsc>" + commonFTL + " ${'.autoEsc'?eval?c}</#noAutoEsc>",
+                "Eval: XML; Interpret: XML {&} false");
         assertOutput(
                 "<#ftl autoEsc=false outputFormat='XML'>"
                 + "<#noAutoEsc>" + commonFTL + " ${'.autoEsc'?eval?c}</#noAutoEsc>",
+                "Eval: XML; Interpret: XML {&} false");
+        assertOutput(
+                "<#ftl autoEsc=false outputFormat='XML'>"
+                + "<#autoEsc>" + commonFTL + " ${'.autoEsc'?eval?c}</#autoEsc>",
                 "Eval: XML; Interpret: XML {&amp;} true");
+        assertOutput(
+                "${.outputFormat}<#assign ftl='<#ftl outputFormat=\\'RTF\\'>$\\{.outputFormat}'> <@ftl?interpret/>",
+                "undefined RTF");
+        assertOutput(
+                "${.outputFormat}<#outputFormat 'RTF'>"
+                + "<#assign ftl='$\\{.outputFormat}'> <@ftl?interpret/> ${'.outputFormat'?eval}"
+                + "</#outputFormat>",
+                "undefined RTF RTF");
     }
 
     @Test