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"><#macro img src extra...>
- <img src="/context${src?html}"
- <#list extra?keys as attr>
- ${attr}="${extra[attr]?html}"
- </#list>
+ <img src="/myapp${src?ensure_starts_with('/')}"
+ <#list extra as attrName, attrVal>
+ ${attrName}="${attrVal}"
+ </#list>
>
</#macro>
<@img src="/images/test.png" width=100 height=50 alt="Test"/></programlisting>
@@ -20977,9 +20977,9 @@ or
width="100"
></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"><#macro m a b ext...>
a = ${a}
@@ -20989,8 +20989,8 @@ or
${e?index} = ${e}
</#list>
<#else>
- <#list ext?keys as k>
- ${k} = ${ext[k]}
+ <#list ext as k, v>
+ ${k} = ${v}
</#list>
</#if>
</#macro>
@@ -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}.