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 2016/06/01 21:14:38 UTC

[1/3] incubator-freemarker git commit: Manual: Modernized some examples that use ?keys and then hash[k]

Repository: incubator-freemarker
Updated Branches:
  refs/heads/2.3-gae 64a250049 -> 7195f178a


Manual: Modernized some examples that use ?keys and then hash[k]


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

Branch: refs/heads/2.3-gae
Commit: 351bb246f6ce60e766c0ae1dbc253ded3b7abca1
Parents: 64a2500
Author: ddekany <dd...@apache.org>
Authored: Wed Jun 1 23:11:27 2016 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Jun 1 23:11:27 2016 +0200

----------------------------------------------------------------------
 src/manual/en_US/book.xml | 42 +++++++++++++++++++++++-------------------
 1 file changed, 23 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/351bb246/src/manual/en_US/book.xml
----------------------------------------------------------------------
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index 30e91b5..d735859 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -20961,10 +20961,10 @@ or
           parameters:</para>
 
           <programlisting role="template">&lt;#macro img src extra...&gt;
-  &lt;img src="/context${src?html}" 
-  &lt;#list extra?keys as attr&gt;
-    ${attr}="${extra[attr]?html}"
-  &lt;/#list&gt;
+  &lt;img src="/myapp${src?ensure_starts_with('/')}" 
+    &lt;#list extra as attrName, attrVal&gt;
+      ${attrName}="${attrVal}"
+    &lt;/#list&gt;
   &gt;
 &lt;/#macro&gt;
 &lt;@img src="/images/test.png" width=100 height=50 alt="Test"/&gt;</programlisting>
@@ -20977,9 +20977,9 @@ or
     width="100"
   &gt;</programlisting>
 
-          <para>Example: A macro with that supports a variable number of
-          positional parameters, regardless if it uses named or positional
-          parameter passing:</para>
+          <para>Example: A macro that supports a variable number of positional
+          parameters, regardless if it uses named or positional parameter
+          passing:</para>
 
           <programlisting role="template">&lt;#macro m a b ext...&gt;
   a = ${a}
@@ -20989,8 +20989,8 @@ or
       ${e?index} = ${e}
     &lt;/#list&gt;
   &lt;#else&gt;
-    &lt;#list ext?keys as k&gt;
-      ${k} = ${ext[k]}
+    &lt;#list ext as k, v&gt;
+      ${k} = ${v}
     &lt;/#list&gt;
   &lt;/#if&gt;
 &lt;/#macro&gt;
@@ -24542,7 +24542,7 @@ Test Book</programlisting>
           </listitem>
 
           <listitem>
-            <para>Variables do <emphasis>not</emphasis> support
+            <para>These variables do <emphasis>not</emphasis> support
             <literal>?keys</literal> and <literal>?values</literal>.</para>
           </listitem>
 
@@ -26012,17 +26012,21 @@ End book</programlisting>
           </question>
 
           <answer>
-            <para>Certainly you are using <literal>BeansWrapper</literal> as
-            your object wrapper, or a custom subclass of it, and the
-            <literal>simpleMapWrapper</literal> property of that is left to
-            <literal>false</literal>. Unfortunately, it's the default (for
-            backward compatibility), so you have to explicitly set it to
-            <literal>true</literal> where you create the object wrapper. Also,
-            at least since 2.3.22, applications should just use
+            <para>Certainly you are using pure <literal>BeansWrapper</literal>
+            as your object wrapper (instead of the default,
+            <literal>DefaultObjectWrapper</literal>), or a custom subclass of
+            it, and the <literal>simpleMapWrapper</literal> property of that
+            is left to <literal>false</literal>. Unfortunately, that's the
+            default of <literal>BeansWrapper</literal> (for backward
+            compatibility), so you have to explicitly set it to
+            <literal>true</literal> where you instantiate it. Also, at least
+            since 2.3.22, applications should just use
             <literal>DefaultObjectWrapper</literal> (with <link
             linkend="topic.defaultObjectWrapperIcI">its
-            <literal>incompatibleImprovements</literal> set to 2.3.22</link> -
-            that's important), which never had this problem.</para>
+            <literal>incompatibleImprovements</literal> set to at least
+            2.3.22</link> - that's especially important if you are switching
+            from pure <literal>BeansWrapper</literal>), which never had this
+            problem.</para>
           </answer>
         </qandaentry>
 


[3/3] incubator-freemarker git commit: Hash literals now implement TemplateHashModelEx2. This is necessary to be consistent with pre-IcI-2.3.21 ?keys/?values behavior, which supports duplicate keys.

Posted by dd...@apache.org.
Hash literals now implement TemplateHashModelEx2. This is necessary to be consistent with pre-IcI-2.3.21 ?keys/?values behavior, which supports duplicate keys.


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

Branch: refs/heads/2.3-gae
Commit: 7195f178abb562291c652dfdfd00b7b1177feabd
Parents: 9010b28
Author: ddekany <dd...@apache.org>
Authored: Wed Jun 1 23:14:25 2016 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Jun 1 23:14:25 2016 +0200

----------------------------------------------------------------------
 src/main/java/freemarker/core/HashLiteral.java  | 33 +++++++++++++++++++-
 .../expected/listhashliteral-ici-2.3.20.txt     | 21 +++++++++++++
 .../expected/listhashliteral-ici-2.3.21.txt     | 18 +++++++++++
 .../templatesuite/templates/listhashliteral.ftl | 17 ++++++++++
 .../freemarker/test/templatesuite/testcases.xml |  6 ++++
 5 files changed, 94 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7195f178/src/main/java/freemarker/core/HashLiteral.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/HashLiteral.java b/src/main/java/freemarker/core/HashLiteral.java
index dcf5f4a..794ade0 100644
--- a/src/main/java/freemarker/core/HashLiteral.java
+++ b/src/main/java/freemarker/core/HashLiteral.java
@@ -28,7 +28,10 @@ import freemarker.template.SimpleSequence;
 import freemarker.template.TemplateCollectionModel;
 import freemarker.template.TemplateException;
 import freemarker.template.TemplateHashModelEx;
+import freemarker.template.TemplateHashModelEx2;
 import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateModelIterator;
 import freemarker.template._TemplateAPI;
 
 final class HashLiteral extends Expression {
@@ -103,7 +106,7 @@ final class HashLiteral extends Expression {
     	return new HashLiteral(clonedKeys, clonedValues);
     }
 
-    private class SequenceHash implements TemplateHashModelEx {
+    private class SequenceHash implements TemplateHashModelEx2 {
 
         private HashMap map; // maps keys to integer offset
         private TemplateCollectionModel keyCollection, valueCollection; // ordered lists of keys and values
@@ -176,6 +179,34 @@ final class HashLiteral extends Expression {
         public String toString() {
             return getCanonicalForm();
         }
+
+        public KeyValuePairIterator keyValuePairIterator() throws TemplateModelException {
+            return new KeyValuePairIterator() {
+                private final TemplateModelIterator keyIterator = keys().iterator();
+                private final TemplateModelIterator valueIterator = values().iterator();
+
+                public boolean hasNext() throws TemplateModelException {
+                    return keyIterator.hasNext();
+                }
+
+                public KeyValuePair next() throws TemplateModelException {
+                    return new KeyValuePair() {
+                        private final TemplateModel key = keyIterator.next();
+                        private final TemplateModel value = valueIterator.next();
+
+                        public TemplateModel getKey() throws TemplateModelException {
+                            return key;
+                        }
+
+                        public TemplateModel getValue() throws TemplateModelException {
+                            return value;
+                        }
+                        
+                    };
+                }
+                
+            };
+        }
         
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7195f178/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt b/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
new file mode 100644
index 0000000..4f3873b
--- /dev/null
+++ b/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
@@ -0,0 +1,21 @@
+  KVPs:
+    a = 1
+    b = 2
+    a = 3
+  
+  Keys:
+    a
+    b
+    a
+  
+  Values:
+    1
+    2
+    3
+
+  KVPs:
+  
+  Keys:
+  
+  Values:
+

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7195f178/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt b/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
new file mode 100644
index 0000000..698ebe4
--- /dev/null
+++ b/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
@@ -0,0 +1,18 @@
+  KVPs:
+    a = 3
+    b = 2
+  
+  Keys:
+    a
+    b
+  
+  Values:
+    3
+    2
+
+  KVPs:
+  
+  Keys:
+  
+  Values:
+

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7195f178/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl b/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
new file mode 100644
index 0000000..f56fc84
--- /dev/null
+++ b/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
@@ -0,0 +1,17 @@
+<#list [ { "a": 1, "b": 2, "a": 3 }, { } ] as h>
+  KVPs:
+  <#list h as k, v>
+    ${k} = ${v}
+  </#list>
+  
+  Keys:
+  <#list h?keys as k>
+    ${k}
+  </#list>
+  
+  Values:
+  <#list h?values as v>
+    ${v}
+  </#list>
+
+</#list>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7195f178/src/test/resources/freemarker/test/templatesuite/testcases.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/testcases.xml b/src/test/resources/freemarker/test/templatesuite/testcases.xml
index 8df64bd..25a54e7 100644
--- a/src/test/resources/freemarker/test/templatesuite/testcases.xml
+++ b/src/test/resources/freemarker/test/templatesuite/testcases.xml
@@ -134,6 +134,12 @@
       <setting object_wrapper="DefaultObjectWrapper(2.3.22, forceLegacyNonListCollections=false)" />
    </testCase>
    <testCase name="listhash" />
+   <testCase name="listhashliteral[#endTN]-ici-2.3.20">
+      <setting incompatible_improvements="min, 2.3.20" /> 
+   </testCase>
+   <testCase name="listhashliteral[#endTN]-ici-2.3.21">
+      <setting incompatible_improvements="2.3.21, max" /> 
+   </testCase>
    <testCase name="listliteral" />
    <testCase name="localization" >
       <setting locale="en_AU"/>


[2/3] incubator-freemarker git commit: keyValuePairIterator() should be allowed to throw TemplateModelException

Posted by dd...@apache.org.
keyValuePairIterator() should be allowed to throw TemplateModelException


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

Branch: refs/heads/2.3-gae
Commit: 9010b2841764ed89a6af409b42d5dbb7f1a14d77
Parents: 351bb24
Author: ddekany <dd...@apache.org>
Authored: Wed Jun 1 23:11:57 2016 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Jun 1 23:11:57 2016 +0200

----------------------------------------------------------------------
 src/main/java/freemarker/template/TemplateHashModelEx2.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/9010b284/src/main/java/freemarker/template/TemplateHashModelEx2.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/TemplateHashModelEx2.java b/src/main/java/freemarker/template/TemplateHashModelEx2.java
index 11be6cd..d5b83a7 100644
--- a/src/main/java/freemarker/template/TemplateHashModelEx2.java
+++ b/src/main/java/freemarker/template/TemplateHashModelEx2.java
@@ -34,7 +34,7 @@ public interface TemplateHashModelEx2 extends TemplateHashModelEx {
     /**
      * @return The iterator that walks through the key-value pairs in the hash. Not {@code null}. 
      */
-    KeyValuePairIterator keyValuePairIterator();
+    KeyValuePairIterator keyValuePairIterator() throws TemplateModelException;
     
     /**
      * A key-value pair in a hash; used for {@link KeyValuePairIterator}.