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 2017/09/13 18:24:30 UTC

incubator-freemarker git commit: Added public formatToPlainText and formatToPlainTextOrMarkup to Environment.

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 5f6a9174d -> 742ed4fee


Added public formatToPlainText and formatToPlainTextOrMarkup to Environment.


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

Branch: refs/heads/3
Commit: 742ed4feeba42457f693c7e1ff9a86ffe2196335
Parents: 5f6a917
Author: ddekany <dd...@apache.org>
Authored: Wed Sep 13 20:05:21 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Sep 13 20:05:21 2017 +0200

----------------------------------------------------------------------
 .../freemarker/core/ASTDollarInterpolation.java |  2 +-
 .../freemarker/core/ASTExpAddOrConcat.java      |  4 +--
 .../apache/freemarker/core/ASTExpression.java   |  8 +++---
 .../core/BuiltInForLegacyEscaping.java          |  2 +-
 .../core/BuiltInsForOutputFormatRelated.java    |  2 +-
 .../freemarker/core/BuiltInsForSequences.java   |  2 +-
 .../org/apache/freemarker/core/Environment.java | 28 ++++++++++++++++++++
 .../org/apache/freemarker/core/_EvalUtils.java  | 12 ++++-----
 8 files changed, 44 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
index 80d7f6a..5dc66c1 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
@@ -95,7 +95,7 @@ final class ASTDollarInterpolation extends ASTInterpolation {
 
     @Override
     protected Object calculateInterpolatedStringOrMarkup(Environment env) throws TemplateException {
-        return _EvalUtils.coerceModelToStringOrMarkup(escapedExpression.eval(env), escapedExpression, null, env);
+        return _EvalUtils.coerceModelToPlainTextOrMarkup(escapedExpression.eval(env), escapedExpression, null, env);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
index 6f7670d..230d1a9 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
@@ -79,7 +79,7 @@ final class ASTExpAddOrConcat extends ASTExpression {
             // We try string addition first. If hash addition is possible, then instead of throwing exception
             // we return null and do hash addition instead. (We can't simply give hash addition a priority, like
             // with sequence addition above, as FTL strings are often also FTL hashes.)
-            Object leftOMOrStr = _EvalUtils.coerceModelToStringOrMarkup(
+            Object leftOMOrStr = _EvalUtils.coerceModelToPlainTextOrMarkup(
                     leftModel, leftExp, /* returnNullOnNonCoercableType = */ hashConcatPossible, null,
                     env);
             if (leftOMOrStr == null) {
@@ -87,7 +87,7 @@ final class ASTExpAddOrConcat extends ASTExpression {
             }
 
             // Same trick with null return as above.
-            Object rightOMOrStr = _EvalUtils.coerceModelToStringOrMarkup(
+            Object rightOMOrStr = _EvalUtils.coerceModelToPlainTextOrMarkup(
                     rightModel, rightExp, /* returnNullOnNonCoercableType = */ hashConcatPossible, null,
                     env);
             if (rightOMOrStr == null) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpression.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpression.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpression.java
index 69bb34c..c10beac 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpression.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpression.java
@@ -82,25 +82,25 @@ abstract class ASTExpression extends ASTNode {
     }
 
     Object evalAndCoerceToStringOrMarkup(Environment env) throws TemplateException {
-        return _EvalUtils.coerceModelToStringOrMarkup(eval(env), this, null, env);
+        return _EvalUtils.coerceModelToPlainTextOrMarkup(eval(env), this, null, env);
     }
 
     /**
      * @param seqTip Tip to display if the value type is not coercable, but it's iterable.
      */
     Object evalAndCoerceToStringOrMarkup(Environment env, String seqTip) throws TemplateException {
-        return _EvalUtils.coerceModelToStringOrMarkup(eval(env), this, seqTip, env);
+        return _EvalUtils.coerceModelToPlainTextOrMarkup(eval(env), this, seqTip, env);
     }
     
     String evalAndCoerceToStringOrUnsupportedMarkup(Environment env) throws TemplateException {
-        return _EvalUtils.coerceModelToStringOrUnsupportedMarkup(eval(env), this, null, env);
+        return _EvalUtils.coerceModelToPlainTextOrUnsupportedMarkup(eval(env), this, null, env);
     }
 
     /**
      * @param seqTip Tip to display if the value type is not coercable, but it's iterable.
      */
     String evalAndCoerceToStringOrUnsupportedMarkup(Environment env, String seqTip) throws TemplateException {
-        return _EvalUtils.coerceModelToStringOrUnsupportedMarkup(eval(env), this, seqTip, env);
+        return _EvalUtils.coerceModelToPlainTextOrUnsupportedMarkup(eval(env), this, seqTip, env);
     }
     
     Number evalToNumber(Environment env) throws TemplateException {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
index 96304a9..0d7fd43 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
@@ -32,7 +32,7 @@ abstract class BuiltInForLegacyEscaping extends BuiltInBannedWhenAutoEscaping {
     TemplateModel _eval(Environment env)
     throws TemplateException {
         TemplateModel tm = target.eval(env);
-        Object moOrStr = _EvalUtils.coerceModelToStringOrMarkup(tm, target, null, env);
+        Object moOrStr = _EvalUtils.coerceModelToPlainTextOrMarkup(tm, target, null, env);
         if (moOrStr instanceof String) {
             return calculateResult((String) moOrStr, env);
         } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
index e1e7b5f..5fa6558 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
@@ -49,7 +49,7 @@ class BuiltInsForOutputFormatRelated {
         @Override
         protected TemplateModel calculateResult(Environment env) throws TemplateException {
             TemplateModel lhoTM = target.eval(env);
-            Object lhoMOOrStr = _EvalUtils.coerceModelToStringOrMarkup(lhoTM, target, null, env);
+            Object lhoMOOrStr = _EvalUtils.coerceModelToPlainTextOrMarkup(lhoTM, target, null, env);
             MarkupOutputFormat contextOF = outputFormat;
             if (lhoMOOrStr instanceof String) { // TemplateMarkupOutputModel
                 return calculateResult((String) lhoMOOrStr, contextOF, env);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
index 6b8be3d..0052a81 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
@@ -210,7 +210,7 @@ class BuiltInsForSequences {
                             hadItem = true;
                         }
                         try {
-                            sb.append(_EvalUtils.coerceModelToStringOrUnsupportedMarkup(item, null, null, env));
+                            sb.append(_EvalUtils.coerceModelToPlainTextOrUnsupportedMarkup(item, null, null, env));
                         } catch (TemplateException e) {
                             throw new TemplateException(e,
                                     "\"?", key, "\" failed at index ", idx, " with this error:\n\n",

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/Environment.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/Environment.java b/freemarker-core/src/main/java/org/apache/freemarker/core/Environment.java
index 23df374..e6c273e 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/Environment.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/Environment.java
@@ -54,6 +54,7 @@ import org.apache.freemarker.core.model.TemplateDirectiveModel;
 import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateHashModelEx;
+import org.apache.freemarker.core.model.TemplateMarkupOutputModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelIterator;
 import org.apache.freemarker.core.model.TemplateModelWithOriginName;
@@ -75,6 +76,7 @@ import org.apache.freemarker.core.valueformat.TemplateDateFormat;
 import org.apache.freemarker.core.valueformat.TemplateDateFormatFactory;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormatFactory;
+import org.apache.freemarker.core.valueformat.TemplateValueFormat;
 import org.apache.freemarker.core.valueformat.TemplateValueFormatException;
 import org.apache.freemarker.core.valueformat.UndefinedCustomFormatException;
 import org.apache.freemarker.core.valueformat.UnknownDateTypeFormattingUnsupportedException;
@@ -1025,6 +1027,30 @@ public final class Environment extends MutableProcessingConfiguration<Environmen
         return getMainTemplate().getBooleanFormat();
     }
 
+    /**
+     * Converts a value to plain text {@link String}, or to {@link TemplateMarkupOutputModel} if that's what the
+     * {@link TemplateValueFormat} involved prefer to produce. (Most {@link TemplateValueFormat} produce plain text,
+     * markup producting formatters are very rare.) This will only convert values that <code>${value}</code> would too,
+     * for example, it will throw {@link TemplateException} if you try to convert a sequence or a date whose type is not
+     * known. 
+     * 
+     * @return Never {@code null}
+     * 
+     * @see #formatToPlainText(TemplateModel)
+     */
+    public Object formatToPlainTextOrMarkup(TemplateModel tm)
+            throws TemplateException {
+        return _EvalUtils.coerceModelToPlainTextOrMarkup(tm, null, null, this);
+    }
+    
+    /**
+     * Same as {@link #formatToPlainTextOrMarkup(TemplateModel)}, but always formats to plain text, even if the
+     * {@link TemplateValueFormat} involved by normally produces markup.
+     */
+    public String formatToPlainText(TemplateModel tm) throws TemplateException {
+        return _EvalUtils.coerceModelToPlainText(tm, null, null, this);
+    }
+    
     String formatBoolean(boolean value, boolean fallbackToTrueFalse) throws TemplateException {
         TemplateBooleanFormat templateBooleanFormat = getTemplateBooleanFormat();
         if (value) {
@@ -3060,6 +3086,7 @@ public final class Environment extends MutableProcessingConfiguration<Environmen
             return callableDefinition.getArgumentArrayLayout();
         }
 
+        @Override
         boolean isFunction() {
             return false;
         }
@@ -3094,6 +3121,7 @@ public final class Environment extends MutableProcessingConfiguration<Environmen
             return callableDefinition.getArgumentArrayLayout();
         }
 
+        @Override
         boolean isFunction() {
             return true;
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/742ed4fe/freemarker-core/src/main/java/org/apache/freemarker/core/_EvalUtils.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/_EvalUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/_EvalUtils.java
index 30b869c..1b59d1e 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/_EvalUtils.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/_EvalUtils.java
@@ -341,18 +341,18 @@ public class _EvalUtils {
      * 
      * @return Never {@code null}
      */
-    static Object coerceModelToStringOrMarkup(TemplateModel tm, ASTExpression exp, String seqTip, Environment env)
+    static Object coerceModelToPlainTextOrMarkup(TemplateModel tm, ASTExpression exp, String seqTip, Environment env)
             throws TemplateException {
-        return coerceModelToStringOrMarkup(tm, exp, false, seqTip, env);
+        return coerceModelToPlainTextOrMarkup(tm, exp, false, seqTip, env);
     }
     
     /**
      * @return {@code null} if the {@code returnNullOnNonCoercableType} parameter is {@code true}, and the coercion is
      *         not possible, because of the type is not right for it.
      * 
-     * @see #coerceModelToStringOrMarkup(TemplateModel, ASTExpression, String, Environment)
+     * @see #coerceModelToPlainTextOrMarkup(TemplateModel, ASTExpression, String, Environment)
      */
-    static Object coerceModelToStringOrMarkup(
+    static Object coerceModelToPlainTextOrMarkup(
             TemplateModel tm, ASTExpression exp, boolean returnNullOnNonCoercableType, String seqTip, Environment env)
             throws TemplateException {
         if (tm instanceof TemplateNumberModel) {
@@ -379,7 +379,7 @@ public class _EvalUtils {
     }
 
     /**
-     * Like {@link #coerceModelToStringOrMarkup(TemplateModel, ASTExpression, String, Environment)}, but gives error
+     * Like {@link #coerceModelToPlainTextOrMarkup(TemplateModel, ASTExpression, String, Environment)}, but gives error
      * if the result is markup. This is what you normally use where markup results can't be used.
      *
      * @param seqTip
@@ -387,7 +387,7 @@ public class _EvalUtils {
      * 
      * @return Never {@code null}
      */
-    static String coerceModelToStringOrUnsupportedMarkup(
+    static String coerceModelToPlainTextOrUnsupportedMarkup(
             TemplateModel tm, ASTExpression exp, String seqTip, Environment env)
             throws TemplateException {
         if (tm instanceof TemplateNumberModel) {