Moved value formatter related classes from o.a.f.core to core.valueformatter


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

Branch: refs/heads/3
Commit: ef96875779aff9f68617c1c7e833131bb13de8da
Parents: 6774e61
Author: ddekany <[email protected]>
Authored: Fri Feb 24 18:53:53 2017 +0100
Committer: ddekany <[email protected]>
Committed: Fri Feb 24 23:00:17 2017 +0100

----------------------------------------------------------------------
 .../freemarker/core/ASTDirAssignment.java       |   2 +-
 .../apache/freemarker/core/ASTDirInclude.java   |   2 +-
 .../apache/freemarker/core/ASTDirSwitch.java    |   4 +-
 .../freemarker/core/ASTDollarInterpolation.java |   2 +-
 .../freemarker/core/ASTExpAddOrConcat.java      |  16 +-
 .../apache/freemarker/core/ASTExpBuiltIn.java   |   4 +-
 .../freemarker/core/ASTExpComparison.java       |  14 +-
 .../freemarker/core/ASTExpDynamicKeyName.java   |   2 +-
 .../freemarker/core/ASTExpStringLiteral.java    |   4 +-
 .../apache/freemarker/core/ASTExpression.java   |  14 +-
 ...AliasTargetTemplateValueFormatException.java |  36 --
 .../core/AliasTemplateDateFormatFactory.java    |  92 ----
 .../core/AliasTemplateNumberFormatFactory.java  |  91 ----
 .../freemarker/core/ArithmeticExpression.java   |   2 +-
 .../BackwardCompatibleTemplateNumberFormat.java |  31 --
 .../apache/freemarker/core/BuiltInForDate.java  |   2 +-
 .../core/BuiltInForLegacyEscaping.java          |   2 +-
 .../freemarker/core/BuiltInsForDates.java       |   4 +-
 .../core/BuiltInsForMultipleTypes.java          |  26 +-
 .../freemarker/core/BuiltInsForNumbers.java     |   2 +-
 .../core/BuiltInsForOutputFormatRelated.java    |   2 +-
 .../freemarker/core/BuiltInsForSequences.java   |   6 +-
 .../core/BuiltInsWithParseTimeParameters.java   |   4 +-
 .../apache/freemarker/core/Configurable.java    |   3 +
 .../org/apache/freemarker/core/Environment.java |  44 +-
 .../org/apache/freemarker/core/EvalUtil.java    | 539 ------------------
 .../core/ExtendedDecimalFormatParser.java       | 525 ------------------
 .../core/ISOLikeTemplateDateFormat.java         | 264 ---------
 .../core/ISOLikeTemplateDateFormatFactory.java  |  52 --
 .../freemarker/core/ISOTemplateDateFormat.java  |  87 ---
 .../core/ISOTemplateDateFormatFactory.java      |  43 --
 .../core/InvalidFormatParametersException.java  |  37 --
 .../core/InvalidFormatStringException.java      |  37 --
 .../freemarker/core/JavaTemplateDateFormat.java |  72 ---
 .../core/JavaTemplateDateFormatFactory.java     | 173 ------
 .../core/JavaTemplateNumberFormat.java          |  66 ---
 .../core/JavaTemplateNumberFormatFactory.java   | 120 ----
 .../org/apache/freemarker/core/MessageUtil.java |  32 +-
 .../core/ParsingNotSupportedException.java      |  37 --
 .../freemarker/core/TemplateConfiguration.java  |   2 +
 .../freemarker/core/TemplateDateFormat.java     | 109 ----
 .../core/TemplateDateFormatFactory.java         |  91 ----
 .../freemarker/core/TemplateFormatUtil.java     |  76 ---
 .../freemarker/core/TemplateNumberFormat.java   |  91 ----
 .../core/TemplateNumberFormatFactory.java       |  62 ---
 .../freemarker/core/TemplateValueFormat.java    |  33 --
 .../core/TemplateValueFormatException.java      |  37 --
 .../core/TemplateValueFormatFactory.java        |  28 -
 .../core/UndefinedCustomFormatException.java    |  34 --
 .../core/UnformattableValueException.java       |  41 --
 ...nDateTypeFormattingUnsupportedException.java |  35 --
 ...nownDateTypeParsingUnsupportedException.java |  36 --
 .../core/UnparsableValueException.java          |  38 --
 .../freemarker/core/XSTemplateDateFormat.java   |  91 ----
 .../core/XSTemplateDateFormatFactory.java       |  43 --
 .../org/apache/freemarker/core/_EvalUtil.java   | 543 +++++++++++++++++++
 .../InvalidFormatParametersException.java       |  37 ++
 .../InvalidFormatStringException.java           |  41 ++
 .../ParsingNotSupportedException.java           |  40 ++
 .../core/valueformat/TemplateDateFormat.java    | 110 ++++
 .../valueformat/TemplateDateFormatFactory.java  |  92 ++++
 .../core/valueformat/TemplateFormatUtil.java    |  77 +++
 .../core/valueformat/TemplateNumberFormat.java  |  93 ++++
 .../TemplateNumberFormatFactory.java            |  66 +++
 .../core/valueformat/TemplateValueFormat.java   |  33 ++
 .../TemplateValueFormatException.java           |  37 ++
 .../valueformat/TemplateValueFormatFactory.java |  28 +
 .../UndefinedCustomFormatException.java         |  34 ++
 .../UnformattableValueException.java            |  41 ++
 ...nDateTypeFormattingUnsupportedException.java |  36 ++
 ...nownDateTypeParsingUnsupportedException.java |  37 ++
 .../valueformat/UnparsableValueException.java   |  41 ++
 ...AliasTargetTemplateValueFormatException.java |  38 ++
 .../impl/AliasTemplateDateFormatFactory.java    |  97 ++++
 .../impl/AliasTemplateNumberFormatFactory.java  |  96 ++++
 .../impl/ExtendedDecimalFormatParser.java       | 530 ++++++++++++++++++
 .../impl/ISOLikeTemplateDateFormat.java         | 270 +++++++++
 .../impl/ISOLikeTemplateDateFormatFactory.java  |  54 ++
 .../valueformat/impl/ISOTemplateDateFormat.java |  90 +++
 .../impl/ISOTemplateDateFormatFactory.java      |  56 ++
 .../impl/JavaTemplateDateFormat.java            |  75 +++
 .../impl/JavaTemplateDateFormatFactory.java     | 187 +++++++
 .../impl/JavaTemplateNumberFormat.java          |  64 +++
 .../impl/JavaTemplateNumberFormatFactory.java   | 133 +++++
 .../valueformat/impl/XSTemplateDateFormat.java  |  94 ++++
 .../impl/XSTemplateDateFormatFactory.java       |  51 ++
 src/manual/en_US/FM3-CHANGE-LOG.txt             |   1 +
 .../freemarker/core/ConfigurationTest.java      |   2 +
 .../apache/freemarker/core/DateFormatTest.java  |   4 +
 .../core/ExtendedDecimalFormatTest.java         | 341 ------------
 .../freemarker/core/NumberFormatTest.java       | 321 -----------
 .../core/TemplateConfigurationTest.java         |   2 +
 .../AppMetaTemplateDateFormatFactory.java       |  14 +-
 .../BaseNTemplateNumberFormatFactory.java       |  12 +-
 ...EpochMillisDivTemplateDateFormatFactory.java |  14 +-
 .../EpochMillisTemplateDateFormatFactory.java   |  12 +-
 .../HTMLISOTemplateDateFormatFactory.java       |  16 +-
 .../userpkg/HexTemplateNumberFormatFactory.java |  10 +-
 ...AndTZSensitiveTemplateDateFormatFactory.java |  14 +-
 ...aleSensitiveTemplateNumberFormatFactory.java |  10 +-
 .../PrintfGTemplateNumberFormatFactory.java     |  10 +-
 .../core/valueformat/NumberFormatTest.java      | 325 +++++++++++
 .../impl/ExtendedDecimalFormatTest.java         | 343 ++++++++++++
 .../manualtest/CustomFormatsExample.java        |   8 +-
 .../UnitAwareTemplateNumberFormatFactory.java   |   6 +-
 105 files changed, 4052 insertions(+), 3976 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java 
b/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
index 734e6eb..f34f0fb 100644
--- a/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
+++ b/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
@@ -154,7 +154,7 @@ final class ASTDirAssignment extends _ASTElement {
             } else {  // Numerical operation
                 Number lhoNumber;
                 if (lhoValue instanceof TemplateNumberModel) {
-                    lhoNumber = EvalUtil.modelToNumber((TemplateNumberModel) 
lhoValue, null);
+                    lhoNumber = _EvalUtil.modelToNumber((TemplateNumberModel) 
lhoValue, null);
                 } else if (lhoValue == null) {
                     throw InvalidReferenceException.getInstance(variableName, 
getOperatorTypeAsString(), env);
                 } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTDirInclude.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTDirInclude.java 
b/src/main/java/org/apache/freemarker/core/ASTDirInclude.java
index 4fec5c1..4f6053d 100644
--- a/src/main/java/org/apache/freemarker/core/ASTDirInclude.java
+++ b/src/main/java/org/apache/freemarker/core/ASTDirInclude.java
@@ -140,7 +140,7 @@ final class ASTDirInclude extends _ASTElement {
             TemplateModel tm = parseExp.eval(env);
             if (tm instanceof TemplateScalarModel) {
                 // Legacy
-                parse = getYesNo(parseExp, 
EvalUtil.modelToString((TemplateScalarModel) tm, parseExp, env));
+                parse = getYesNo(parseExp, 
_EvalUtil.modelToString((TemplateScalarModel) tm, parseExp, env));
             } else {
                 parse = parseExp.modelToBoolean(tm, env);
             }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTDirSwitch.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTDirSwitch.java 
b/src/main/java/org/apache/freemarker/core/ASTDirSwitch.java
index 6d1218e..4fe32c2 100644
--- a/src/main/java/org/apache/freemarker/core/ASTDirSwitch.java
+++ b/src/main/java/org/apache/freemarker/core/ASTDirSwitch.java
@@ -59,9 +59,9 @@ final class ASTDirSwitch extends _ASTElement {
                     processCase = true;
                 } else if (cas.condition != null) {
                     // Otherwise, if this case isn't the default, test it.
-                    processCase = EvalUtil.compare(
+                    processCase = _EvalUtil.compare(
                             searched,
-                            EvalUtil.CMP_OP_EQUALS, "case==", cas.condition, 
cas.condition, env);
+                            _EvalUtil.CMP_OP_EQUALS, "case==", cas.condition, 
cas.condition, env);
                 }
                 if (processCase) {
                     env.visit(cas);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java 
b/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
index d80c7c0..882b680 100644
--- a/src/main/java/org/apache/freemarker/core/ASTDollarInterpolation.java
+++ b/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 
EvalUtil.coerceModelToStringOrMarkup(escapedExpression.eval(env), 
escapedExpression, null, env);
+        return 
_EvalUtil.coerceModelToStringOrMarkup(escapedExpression.eval(env), 
escapedExpression, null, env);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java 
b/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
index 088e2fa..d37fa14 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpAddOrConcat.java
@@ -68,8 +68,8 @@ final class ASTExpAddOrConcat extends ASTExpression {
             ASTExpression rightExp, TemplateModel rightModel)
             throws TemplateException {
         if (leftModel instanceof TemplateNumberModel && rightModel instanceof 
TemplateNumberModel) {
-            Number first = EvalUtil.modelToNumber((TemplateNumberModel) 
leftModel, leftExp);
-            Number second = EvalUtil.modelToNumber((TemplateNumberModel) 
rightModel, rightExp);
+            Number first = _EvalUtil.modelToNumber((TemplateNumberModel) 
leftModel, leftExp);
+            Number second = _EvalUtil.modelToNumber((TemplateNumberModel) 
rightModel, rightExp);
             return _evalOnNumbers(env, parent, first, second);
         } else if (leftModel instanceof TemplateSequenceModel && rightModel 
instanceof TemplateSequenceModel) {
             return new ConcatenatedSequence((TemplateSequenceModel) leftModel, 
(TemplateSequenceModel) rightModel);
@@ -80,7 +80,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 = EvalUtil.coerceModelToStringOrMarkup(
+                Object leftOMOrStr = _EvalUtil.coerceModelToStringOrMarkup(
                         leftModel, leftExp, /* returnNullOnNonCoercableType = 
*/ hashConcatPossible, null,
                         env);
                 if (leftOMOrStr == null) {
@@ -88,7 +88,7 @@ final class ASTExpAddOrConcat extends ASTExpression {
                 }
 
                 // Same trick with null return as above.
-                Object rightOMOrStr = EvalUtil.coerceModelToStringOrMarkup(
+                Object rightOMOrStr = _EvalUtil.coerceModelToStringOrMarkup(
                         rightModel, rightExp, /* returnNullOnNonCoercableType 
= */ hashConcatPossible, null,
                         env);
                 if (rightOMOrStr == null) {
@@ -100,18 +100,18 @@ final class ASTExpAddOrConcat extends ASTExpression {
                         return new SimpleScalar(((String) 
leftOMOrStr).concat((String) rightOMOrStr));
                     } else { // rightOMOrStr instanceof 
TemplateMarkupOutputModel
                         TemplateMarkupOutputModel<?> rightMO = 
(TemplateMarkupOutputModel<?>) rightOMOrStr; 
-                        return EvalUtil.concatMarkupOutputs(parent,
+                        return _EvalUtil.concatMarkupOutputs(parent,
                                 
rightMO.getOutputFormat().fromPlainTextByEscaping((String) leftOMOrStr),
                                 rightMO);
                     }                    
                 } else { // leftOMOrStr instanceof TemplateMarkupOutputModel 
                     TemplateMarkupOutputModel<?> leftMO = 
(TemplateMarkupOutputModel<?>) leftOMOrStr; 
                     if (rightOMOrStr instanceof String) {  // markup output
-                        return EvalUtil.concatMarkupOutputs(parent,
+                        return _EvalUtil.concatMarkupOutputs(parent,
                                 leftMO,
                                 
leftMO.getOutputFormat().fromPlainTextByEscaping((String) rightOMOrStr));
                     } else { // rightOMOrStr instanceof 
TemplateMarkupOutputModel
-                        return EvalUtil.concatMarkupOutputs(parent,
+                        return _EvalUtil.concatMarkupOutputs(parent,
                                 leftMO,
                                 (TemplateMarkupOutputModel<?>) rightOMOrStr);
                     }
@@ -148,7 +148,7 @@ final class ASTExpAddOrConcat extends ASTExpression {
 
     static TemplateModel _evalOnNumbers(Environment env, ASTNode parent, 
Number first, Number second)
             throws TemplateException {
-        ArithmeticEngine ae = EvalUtil.getArithmeticEngine(env, parent);
+        ArithmeticEngine ae = _EvalUtil.getArithmeticEngine(env, parent);
         return new SimpleNumber(ae.add(first, second));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java 
b/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
index b67e28f..c42a7b6 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
@@ -422,7 +422,7 @@ abstract class ASTExpBuiltIn extends ASTExpression 
implements Cloneable {
         if (!(arg instanceof TemplateScalarModel)) {
             throw MessageUtil.newMethodArgMustBeStringException("?" + key, 
argIdx, arg);
         } else {
-            return EvalUtil.modelToString((TemplateScalarModel) arg, null, 
null);
+            return _EvalUtil.modelToString((TemplateScalarModel) arg, null, 
null);
         }
     }
 
@@ -435,7 +435,7 @@ abstract class ASTExpBuiltIn extends ASTExpression 
implements Cloneable {
         if (!(arg instanceof TemplateNumberModel)) {
             throw MessageUtil.newMethodArgMustBeNumberException("?" + key, 
argIdx, arg);
         } else {
-            return EvalUtil.modelToNumber((TemplateNumberModel) arg, null);
+            return _EvalUtil.modelToNumber((TemplateNumberModel) arg, null);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpComparison.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpComparison.java 
b/src/main/java/org/apache/freemarker/core/ASTExpComparison.java
index 793e323..3ae5b87 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpComparison.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpComparison.java
@@ -37,17 +37,17 @@ final class ASTExpComparison extends ASTExpBoolean {
         opString = opString.intern();
         this.opString = opString;
         if (opString == "==" || opString == "=") {
-            operation = EvalUtil.CMP_OP_EQUALS;
+            operation = _EvalUtil.CMP_OP_EQUALS;
         } else if (opString == "!=") {
-            operation = EvalUtil.CMP_OP_NOT_EQUALS;
+            operation = _EvalUtil.CMP_OP_NOT_EQUALS;
         } else if (opString == "gt" || opString == "\\gt" || opString == ">" 
|| opString == "&gt;") {
-            operation = EvalUtil.CMP_OP_GREATER_THAN;
+            operation = _EvalUtil.CMP_OP_GREATER_THAN;
         } else if (opString == "gte" || opString == "\\gte" || opString == 
">=" || opString == "&gt;=") {
-            operation = EvalUtil.CMP_OP_GREATER_THAN_EQUALS;
+            operation = _EvalUtil.CMP_OP_GREATER_THAN_EQUALS;
         } else if (opString == "lt" || opString == "\\lt" || opString == "<" 
|| opString == "&lt;") {
-            operation = EvalUtil.CMP_OP_LESS_THAN;
+            operation = _EvalUtil.CMP_OP_LESS_THAN;
         } else if (opString == "lte" || opString == "\\lte" || opString == 
"<=" || opString == "&lt;=") {
-            operation = EvalUtil.CMP_OP_LESS_THAN_EQUALS;
+            operation = _EvalUtil.CMP_OP_LESS_THAN_EQUALS;
         } else {
             throw new BugException("Unknown comparison operator " + opString);
         }
@@ -59,7 +59,7 @@ final class ASTExpComparison extends ASTExpBoolean {
      */
     @Override
     boolean evalToBoolean(Environment env) throws TemplateException {
-        return EvalUtil.compare(left, operation, opString, right, this, env);
+        return _EvalUtil.compare(left, operation, opString, right, this, env);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpDynamicKeyName.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpDynamicKeyName.java 
b/src/main/java/org/apache/freemarker/core/ASTExpDynamicKeyName.java
index 96eec38..dbff718 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpDynamicKeyName.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpDynamicKeyName.java
@@ -56,7 +56,7 @@ final class ASTExpDynamicKeyName extends ASTExpression {
             return dealWithNumericalKey(targetModel, index, env);
         }
         if (keyModel instanceof TemplateScalarModel) {
-            String key = EvalUtil.modelToString((TemplateScalarModel) 
keyModel, keyExpression, env);
+            String key = _EvalUtil.modelToString((TemplateScalarModel) 
keyModel, keyExpression, env);
             return dealWithStringKey(targetModel, key, env);
         }
         if (keyModel instanceof RangeModel) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java 
b/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
index 4871afb..811ff32 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
@@ -104,7 +104,7 @@ final class ASTExpStringLiteral extends ASTExpression 
implements TemplateScalarM
                     TemplateMarkupOutputModel<?> partMO = calcedPart 
instanceof String
                             ? 
markupResult.getOutputFormat().fromPlainTextByEscaping((String) calcedPart)
                             : (TemplateMarkupOutputModel<?>) calcedPart;
-                    markupResult = EvalUtil.concatMarkupOutputs(this, 
markupResult, partMO);
+                    markupResult = _EvalUtil.concatMarkupOutputs(this, 
markupResult, partMO);
                 } else { // We are using `plainTextOutput` (or nothing yet)
                     if (calcedPart instanceof String) {
                         String partStr = (String) calcedPart;
@@ -118,7 +118,7 @@ final class ASTExpStringLiteral extends ASTExpression 
implements TemplateScalarM
                         if (plainTextResult != null) {
                             TemplateMarkupOutputModel<?> leftHandMO = 
moPart.getOutputFormat()
                                     
.fromPlainTextByEscaping(plainTextResult.toString());
-                            markupResult = EvalUtil.concatMarkupOutputs(this, 
leftHandMO, moPart);
+                            markupResult = _EvalUtil.concatMarkupOutputs(this, 
leftHandMO, moPart);
                             plainTextResult = null;
                         } else {
                             markupResult = moPart;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ASTExpression.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpression.java 
b/src/main/java/org/apache/freemarker/core/ASTExpression.java
index 629d71c..6635e35 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpression.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpression.java
@@ -72,36 +72,36 @@ abstract class ASTExpression extends ASTNode {
     }
     
     String evalAndCoerceToPlainText(Environment env) throws TemplateException {
-        return EvalUtil.coerceModelToPlainText(eval(env), this, null, env);
+        return _EvalUtil.coerceModelToPlainText(eval(env), this, null, env);
     }
 
     /**
      * @param seqTip Tip to display if the value type is not coercable, but 
it's sequence or collection.
      */
     String evalAndCoerceToPlainText(Environment env, String seqTip) throws 
TemplateException {
-        return EvalUtil.coerceModelToPlainText(eval(env), this, seqTip, env);
+        return _EvalUtil.coerceModelToPlainText(eval(env), this, seqTip, env);
     }
 
     Object evalAndCoerceToStringOrMarkup(Environment env) throws 
TemplateException {
-        return EvalUtil.coerceModelToStringOrMarkup(eval(env), this, null, 
env);
+        return _EvalUtil.coerceModelToStringOrMarkup(eval(env), this, null, 
env);
     }
 
     /**
      * @param seqTip Tip to display if the value type is not coercable, but 
it's sequence or collection.
      */
     Object evalAndCoerceToStringOrMarkup(Environment env, String seqTip) 
throws TemplateException {
-        return EvalUtil.coerceModelToStringOrMarkup(eval(env), this, seqTip, 
env);
+        return _EvalUtil.coerceModelToStringOrMarkup(eval(env), this, seqTip, 
env);
     }
     
     String evalAndCoerceToStringOrUnsupportedMarkup(Environment env) throws 
TemplateException {
-        return EvalUtil.coerceModelToStringOrUnsupportedMarkup(eval(env), 
this, null, env);
+        return _EvalUtil.coerceModelToStringOrUnsupportedMarkup(eval(env), 
this, null, env);
     }
 
     /**
      * @param seqTip Tip to display if the value type is not coercable, but 
it's sequence or collection.
      */
     String evalAndCoerceToStringOrUnsupportedMarkup(Environment env, String 
seqTip) throws TemplateException {
-        return EvalUtil.coerceModelToStringOrUnsupportedMarkup(eval(env), 
this, seqTip, env);
+        return _EvalUtil.coerceModelToStringOrUnsupportedMarkup(eval(env), 
this, seqTip, env);
     }
     
     Number evalToNumber(Environment env) throws TemplateException {
@@ -111,7 +111,7 @@ abstract class ASTExpression extends ASTNode {
 
     Number modelToNumber(TemplateModel model, Environment env) throws 
TemplateException {
         if (model instanceof TemplateNumberModel) {
-            return EvalUtil.modelToNumber((TemplateNumberModel) model, this);
+            return _EvalUtil.modelToNumber((TemplateNumberModel) model, this);
         } else {
             throw new NonNumericalException(this, model, env);
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/AliasTargetTemplateValueFormatException.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/AliasTargetTemplateValueFormatException.java
 
b/src/main/java/org/apache/freemarker/core/AliasTargetTemplateValueFormatException.java
deleted file mode 100644
index 705346a..0000000
--- 
a/src/main/java/org/apache/freemarker/core/AliasTargetTemplateValueFormatException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.core;
-
-/**
- * Can't create a template format that the template format refers to 
(typically thrown by alias template formats).
- * 
- * @since 2.3.24
- */
-class AliasTargetTemplateValueFormatException extends 
TemplateValueFormatException {
-
-    public AliasTargetTemplateValueFormatException(String message, Throwable 
cause) {
-        super(message, cause);
-    }
-
-    public AliasTargetTemplateValueFormatException(String message) {
-        super(message);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/AliasTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/AliasTemplateDateFormatFactory.java 
b/src/main/java/org/apache/freemarker/core/AliasTemplateDateFormatFactory.java
deleted file mode 100644
index 5e6333c..0000000
--- 
a/src/main/java/org/apache/freemarker/core/AliasTemplateDateFormatFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.core;
-
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-
-import org.apache.freemarker.core.util._LocaleUtil;
-import org.apache.freemarker.core.util._StringUtil;
-
-/**
- * Creates an alias to another format, so that the format can be referred to 
with a simple name in the template, rather
- * than as a concrete pattern or other kind of format string.
- * 
- * @since 2.3.24
- */
-public final class AliasTemplateDateFormatFactory extends 
TemplateDateFormatFactory {
-
-    private final String defaultTargetFormatString;
-    private final Map<Locale, String> localizedTargetFormatStrings;
-
-    /**
-     * @param targetFormatString
-     *            The format string this format will be an alias to.
-     */
-    public AliasTemplateDateFormatFactory(String targetFormatString) {
-        defaultTargetFormatString = targetFormatString;
-        localizedTargetFormatStrings = null;
-    }
-
-    /**
-     * @param defaultTargetFormatString
-     *            The format string this format will be an alias to if there's 
no locale-specific format string for the
-     *            requested locale in {@code localizedTargetFormatStrings}
-     * @param localizedTargetFormatStrings
-     *            Maps {@link Locale}-s to format strings. If the desired 
locale doesn't occur in the map, a less
-     *            specific locale is tried, repeatedly until only the language 
part remains. For example, if locale is
-     *            {@code new Locale("en", "US", "Linux")}, then these keys 
will be attempted untol a match is found, in
-     *            this order: {@code new Locale("en", "US", "Linux")}, {@code 
new Locale("en", "US")},
-     *            {@code new Locale("en")}. If there's still no matching key, 
the value of the
-     *            {@code targetFormatString} will be used.
-     */
-    public AliasTemplateDateFormatFactory(
-            String defaultTargetFormatString, Map<Locale, String> 
localizedTargetFormatStrings) {
-        this.defaultTargetFormatString = defaultTargetFormatString;
-        this.localizedTargetFormatStrings = localizedTargetFormatStrings;
-    }
-    
-    @Override
-    public TemplateDateFormat get(String params, int dateType, Locale locale, 
TimeZone timeZone, boolean zonelessInput,
-            Environment env) throws TemplateValueFormatException {
-        TemplateFormatUtil.checkHasNoParameters(params);
-        try {
-            String targetFormatString;
-            if (localizedTargetFormatStrings != null) {
-                Locale lookupLocale = locale;
-                targetFormatString = 
localizedTargetFormatStrings.get(lookupLocale);
-                while (targetFormatString == null
-                        && (lookupLocale = 
_LocaleUtil.getLessSpecificLocale(lookupLocale)) != null) {
-                    targetFormatString = 
localizedTargetFormatStrings.get(lookupLocale);
-                }
-            } else {
-                targetFormatString = null;
-            }
-            if (targetFormatString == null) {
-                targetFormatString = defaultTargetFormatString;
-            }
-            return env.getTemplateDateFormat(targetFormatString, dateType, 
locale, timeZone, zonelessInput);
-        } catch (TemplateValueFormatException e) {
-            throw new AliasTargetTemplateValueFormatException("Failed to 
create format based on target format string,  "
-                    + _StringUtil.jQuote(params) + ". Reason given: " + 
e.getMessage(), e);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/AliasTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/AliasTemplateNumberFormatFactory.java
 
b/src/main/java/org/apache/freemarker/core/AliasTemplateNumberFormatFactory.java
deleted file mode 100644
index 6b00223..0000000
--- 
a/src/main/java/org/apache/freemarker/core/AliasTemplateNumberFormatFactory.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.core;
-
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.freemarker.core.util._LocaleUtil;
-import org.apache.freemarker.core.util._StringUtil;
-
-/**
- * Creates an alias to another format, so that the format can be referred to 
with a simple name in the template, rather
- * than as a concrete pattern or other kind of format string.
- * 
- * @since 2.3.24
- */
-public final class AliasTemplateNumberFormatFactory extends 
TemplateNumberFormatFactory {
-
-    private final String defaultTargetFormatString;
-    private final Map<Locale, String> localizedTargetFormatStrings;
-
-    /**
-     * @param targetFormatString
-     *            The format string this format will be an alias to
-     */
-    public AliasTemplateNumberFormatFactory(String targetFormatString) {
-        defaultTargetFormatString = targetFormatString;
-        localizedTargetFormatStrings = null;
-    }
-
-    /**
-     * @param defaultTargetFormatString
-     *            The format string this format will be an alias to if there's 
no locale-specific format string for the
-     *            requested locale in {@code localizedTargetFormatStrings}
-     * @param localizedTargetFormatStrings
-     *            Maps {@link Locale}-s to format strings. If the desired 
locale doesn't occur in the map, a less
-     *            specific locale is tried, repeatedly until only the language 
part remains. For example, if locale is
-     *            {@code new Locale("en", "US", "Linux")}, then these keys 
will be attempted untol a match is found, in
-     *            this order: {@code new Locale("en", "US", "Linux")}, {@code 
new Locale("en", "US")},
-     *            {@code new Locale("en")}. If there's still no matching key, 
the value of the
-     *            {@code targetFormatString} will be used.
-     */
-    public AliasTemplateNumberFormatFactory(
-            String defaultTargetFormatString, Map<Locale, String> 
localizedTargetFormatStrings) {
-        this.defaultTargetFormatString = defaultTargetFormatString;
-        this.localizedTargetFormatStrings = localizedTargetFormatStrings;
-    }
-
-    @Override
-    public TemplateNumberFormat get(String params, Locale locale, Environment 
env)
-            throws TemplateValueFormatException {
-        TemplateFormatUtil.checkHasNoParameters(params);
-        try {
-            String targetFormatString;
-            if (localizedTargetFormatStrings != null) {
-                Locale lookupLocale = locale;
-                targetFormatString = 
localizedTargetFormatStrings.get(lookupLocale);
-                while (targetFormatString == null
-                        && (lookupLocale = 
_LocaleUtil.getLessSpecificLocale(lookupLocale)) != null) {
-                    targetFormatString = 
localizedTargetFormatStrings.get(lookupLocale);
-                }
-            } else {
-                targetFormatString = null;
-            }
-            if (targetFormatString == null) {
-                targetFormatString = defaultTargetFormatString;
-            }
-            return env.getTemplateNumberFormat(targetFormatString, locale);
-        } catch (TemplateValueFormatException e) {
-            throw new AliasTargetTemplateValueFormatException("Failed to 
create format based on target format string,  "
-                    + _StringUtil.jQuote(params) + ". Reason given: " + 
e.getMessage(), e);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java 
b/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java
index 5b7bfe4..d075e45 100644
--- a/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java
+++ b/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java
@@ -52,7 +52,7 @@ final class ArithmeticExpression extends ASTExpression {
 
     static TemplateModel _eval(Environment env, ASTNode parent, Number 
lhoNumber, int operator, Number rhoNumber)
             throws TemplateException {
-        ArithmeticEngine ae = EvalUtil.getArithmeticEngine(env, parent); 
+        ArithmeticEngine ae = _EvalUtil.getArithmeticEngine(env, parent);
         switch (operator) {
             case TYPE_SUBSTRACTION : 
                 return new SimpleNumber(ae.subtract(lhoNumber, rhoNumber));

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
 
b/src/main/java/org/apache/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
deleted file mode 100644
index de5983b..0000000
--- 
a/src/main/java/org/apache/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.core;
-
-/**
- * Only exists for emulating pre-2.3.24-IcI {@code ?string} behavior. 
- * 
- * @since 2.3.24
- */
-// [FM3] Still needed?
-abstract class BackwardCompatibleTemplateNumberFormat extends 
TemplateNumberFormat {
-
-    abstract String format(Number number) throws UnformattableValueException;
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInForDate.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/BuiltInForDate.java 
b/src/main/java/org/apache/freemarker/core/BuiltInForDate.java
index 47bf910..98da920 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInForDate.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInForDate.java
@@ -31,7 +31,7 @@ abstract class BuiltInForDate extends ASTExpBuiltIn {
         TemplateModel model = target.eval(env);
         if (model instanceof TemplateDateModel) {
             TemplateDateModel tdm = (TemplateDateModel) model;
-            return calculateResult(EvalUtil.modelToDate(tdm, target), 
tdm.getDateType(), env);
+            return calculateResult(_EvalUtil.modelToDate(tdm, target), 
tdm.getDateType(), env);
         } else {
             throw newNonDateException(env, model, target);
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java 
b/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
index 47622a7..5a5ad65 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInForLegacyEscaping.java
@@ -31,7 +31,7 @@ abstract class BuiltInForLegacyEscaping extends 
BuiltInBannedWhenAutoEscaping {
     TemplateModel _eval(Environment env)
     throws TemplateException {
         TemplateModel tm = target.eval(env);
-        Object moOrStr = EvalUtil.coerceModelToStringOrMarkup(tm, target, 
null, env);
+        Object moOrStr = _EvalUtil.coerceModelToStringOrMarkup(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/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsForDates.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/BuiltInsForDates.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsForDates.java
index 8c2e392..92fe3e1 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInsForDates.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInsForDates.java
@@ -57,7 +57,7 @@ class BuiltInsForDates {
                 if (tdmDateType != TemplateDateModel.UNKNOWN) {
                     return tdm;
                 }
-                return new SimpleDate(EvalUtil.modelToDate(tdm, target), 
dateType);
+                return new SimpleDate(_EvalUtil.modelToDate(tdm, target), 
dateType);
             } else {
                 throw BuiltInForDate.newNonDateException(env, model, target);
             }
@@ -100,7 +100,7 @@ class BuiltInsForDates {
                             instanceof TimeZone) {
                     tzArg = (TimeZone) adaptedObj;                    
                 } else if (tzArgTM instanceof TemplateScalarModel) {
-                    String tzName = 
EvalUtil.modelToString((TemplateScalarModel) tzArgTM, null, null);
+                    String tzName = 
_EvalUtil.modelToString((TemplateScalarModel) tzArgTM, null, null);
                     try {
                         tzArg = _DateUtil.getTimeZone(tzName);
                     } catch (UnrecognizedTimeZoneException e) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsForMultipleTypes.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/BuiltInsForMultipleTypes.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsForMultipleTypes.java
index 1db96e5..b7bd7f6 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInsForMultipleTypes.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInsForMultipleTypes.java
@@ -45,6 +45,9 @@ import org.apache.freemarker.core.model.impl.SimpleScalar;
 import org.apache.freemarker.core.model.impl.beans.OverloadedMethodsModel;
 import org.apache.freemarker.core.model.impl.beans.SimpleMethodModel;
 import org.apache.freemarker.core.util.BugException;
+import org.apache.freemarker.core.valueformat.TemplateDateFormat;
+import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
+import org.apache.freemarker.core.valueformat.TemplateValueFormatException;
 
 /**
  * A holder for builtins that didn't fit into any other category.
@@ -71,7 +74,7 @@ class BuiltInsForMultipleTypes {
 
         @Override
         protected TemplateModel formatNumber(Environment env, TemplateModel 
model) throws TemplateModelException {
-            Number num = EvalUtil.modelToNumber((TemplateNumberModel) model, 
target);
+            Number num = _EvalUtil.modelToNumber((TemplateNumberModel) model, 
target);
             if (num instanceof Integer || num instanceof Long) {
                 // Accelerate these fairly common cases
                 return new SimpleScalar(num.toString());
@@ -534,7 +537,7 @@ class BuiltInsForMultipleTypes {
                 defaultFormat = dateType == TemplateDateModel.UNKNOWN
                         ? null  // Lazy unknown type error in getAsString()
                         : env.getTemplateDateFormat(
-                                dateType, EvalUtil.modelToDate(dateModel, 
target).getClass(), target, true);
+                                dateType, _EvalUtil.modelToDate(dateModel, 
target).getClass(), target, true);
             }
     
             @Override
@@ -571,7 +574,7 @@ class BuiltInsForMultipleTypes {
                         }
                     }
                     try {
-                        cachedValue = 
EvalUtil.assertFormatResultNotNull(defaultFormat.formatToPlainText(dateModel));
+                        cachedValue = 
_EvalUtil.assertFormatResultNotNull(defaultFormat.formatToPlainText(dateModel));
                     } catch (TemplateValueFormatException e) {
                         try {
                             throw 
MessageUtil.newCantFormatDateException(defaultFormat, target, e, true);
@@ -606,7 +609,7 @@ class BuiltInsForMultipleTypes {
                 
                 // As we format lazily, we need a snapshot of the format 
inputs:
                 this.numberModel = numberModel;
-                number = EvalUtil.modelToNumber(numberModel, target);  // for 
BackwardCompatibleTemplateNumberFormat-s
+                number = _EvalUtil.modelToNumber(numberModel, target);  // for 
BackwardCompatibleTemplateNumberFormat-s
                 try {
                     defaultFormat = env.getTemplateNumberFormat(stringBI.this, 
true);
                 } catch (TemplateException e) {
@@ -633,11 +636,7 @@ class BuiltInsForMultipleTypes {
                 
                 String result;
                 try {
-                    if (format instanceof 
BackwardCompatibleTemplateNumberFormat) {
-                        result = env.formatNumberToPlainText(number, 
(BackwardCompatibleTemplateNumberFormat) format, target);
-                    } else {
-                        result = env.formatNumberToPlainText(numberModel, 
format, target, true);
-                    }
+                    result = env.formatNumberToPlainText(numberModel, format, 
target, true);
                 } catch (TemplateException e) {
                     // `e` should always be a TemplateModelException here, but 
to be sure: 
                     throw _CoreAPI.ensureIsTemplateModelException("Failed to 
format number", e); 
@@ -650,12 +649,7 @@ class BuiltInsForMultipleTypes {
             public String getAsString() throws TemplateModelException {
                 if (cachedValue == null) {
                     try {
-                        if (defaultFormat instanceof 
BackwardCompatibleTemplateNumberFormat) {
-                            cachedValue = env.formatNumberToPlainText(
-                                    number, 
(BackwardCompatibleTemplateNumberFormat) defaultFormat, target);
-                        } else {
-                            cachedValue = 
env.formatNumberToPlainText(numberModel, defaultFormat, target, true);
-                        }
+                        cachedValue = env.formatNumberToPlainText(numberModel, 
defaultFormat, target, true);
                     } catch (TemplateException e) {
                         // `e` should always be a TemplateModelException here, 
but to be sure: 
                         throw _CoreAPI.ensureIsTemplateModelException("Failed 
to format number", e); 
@@ -675,7 +669,7 @@ class BuiltInsForMultipleTypes {
             TemplateModel model = target.eval(env);
             if (model instanceof TemplateNumberModel) {
                 TemplateNumberModel numberModel = (TemplateNumberModel) model;
-                Number num = EvalUtil.modelToNumber(numberModel, target);
+                Number num = _EvalUtil.modelToNumber(numberModel, target);
                 return new NumberFormatter(numberModel, env);
             } else if (model instanceof TemplateDateModel) {
                 TemplateDateModel dm = (TemplateDateModel) model;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsForNumbers.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/BuiltInsForNumbers.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsForNumbers.java
index 2275d86..6b66ca4 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInsForNumbers.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInsForNumbers.java
@@ -222,7 +222,7 @@ class BuiltInsForNumbers {
             TemplateModel model = target.eval(env);
             if (!(model instanceof TemplateNumberModel)
                     && model instanceof TemplateDateModel) {
-                Date date = EvalUtil.modelToDate((TemplateDateModel) model, 
target);
+                Date date = _EvalUtil.modelToDate((TemplateDateModel) model, 
target);
                 return new SimpleNumber(date.getTime());
             } else {
                 Number num = target.modelToNumber(model, env);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
index adff22f..6f67969 100644
--- 
a/src/main/java/org/apache/freemarker/core/BuiltInsForOutputFormatRelated.java
+++ 
b/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 = EvalUtil.coerceModelToStringOrMarkup(lhoTM, 
target, null, env);
+            Object lhoMOOrStr = _EvalUtil.coerceModelToStringOrMarkup(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/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
index 54479e7..793eb1e 100644
--- a/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
+++ b/src/main/java/org/apache/freemarker/core/BuiltInsForSequences.java
@@ -215,7 +215,7 @@ class BuiltInsForSequences {
                             hadItem = true;
                         }
                         try {
-                            
sb.append(EvalUtil.coerceModelToStringOrUnsupportedMarkup(item, null, null, 
env));
+                            
sb.append(_EvalUtil.coerceModelToStringOrUnsupportedMarkup(item, null, null, 
env));
                         } catch (TemplateException e) {
                             throw new _TemplateModelException(e,
                                     "\"?", key, "\" failed at index ", 
Integer.valueOf(idx), " with this error:\n\n",
@@ -856,9 +856,9 @@ class BuiltInsForSequences {
             Environment env)
             throws TemplateModelException {
         try {
-            return EvalUtil.compare(
+            return _EvalUtil.compare(
                     seqItem, null,
-                    EvalUtil.CMP_OP_EQUALS, null,
+                    _EvalUtil.CMP_OP_EQUALS, null,
                     searchedItem, null,
                     null, false,
                     true, true, true, // The last one is true to emulate an 
old bug for BC 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/BuiltInsWithParseTimeParameters.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/BuiltInsWithParseTimeParameters.java 
b/src/main/java/org/apache/freemarker/core/BuiltInsWithParseTimeParameters.java
index 1fc03a9..5d9ddad 100644
--- 
a/src/main/java/org/apache/freemarker/core/BuiltInsWithParseTimeParameters.java
+++ 
b/src/main/java/org/apache/freemarker/core/BuiltInsWithParseTimeParameters.java
@@ -132,9 +132,9 @@ final class BuiltInsWithParseTimeParameters {
             for (int i = 0; i + 1 < paramCnt; i += 2) {
                 ASTExpression caseExp = (ASTExpression) parameters.get(i);
                 TemplateModel caseValue = caseExp.evalToNonMissing(env);
-                if (EvalUtil.compare(
+                if (_EvalUtil.compare(
                         targetValue, target,
-                        EvalUtil.CMP_OP_EQUALS, "==",
+                        _EvalUtil.CMP_OP_EQUALS, "==",
                         caseValue, caseExp,
                         this, true,
                         false, false, false,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/Configurable.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/Configurable.java 
b/src/main/java/org/apache/freemarker/core/Configurable.java
index b4fc5bf..52fa6d2 100644
--- a/src/main/java/org/apache/freemarker/core/Configurable.java
+++ b/src/main/java/org/apache/freemarker/core/Configurable.java
@@ -69,6 +69,9 @@ import org.apache.freemarker.core.util.GenericParseException;
 import org.apache.freemarker.core.util._NullArgumentException;
 import org.apache.freemarker.core.util._SortedArraySet;
 import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.valueformat.TemplateDateFormatFactory;
+import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
+import org.apache.freemarker.core.valueformat.TemplateNumberFormatFactory;
 
 /**
  * This is a common superclass of {@link 
org.apache.freemarker.core.Configuration},

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ef968757/src/main/java/org/apache/freemarker/core/Environment.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/Environment.java 
b/src/main/java/org/apache/freemarker/core/Environment.java
index ef1602e..300b765 100644
--- a/src/main/java/org/apache/freemarker/core/Environment.java
+++ b/src/main/java/org/apache/freemarker/core/Environment.java
@@ -69,6 +69,11 @@ import org.apache.freemarker.core.util._DateUtil;
 import org.apache.freemarker.core.util._DateUtil.DateToISO8601CalendarFactory;
 import org.apache.freemarker.core.util._NullWriter;
 import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.valueformat.*;
+import 
org.apache.freemarker.core.valueformat.impl.ISOTemplateDateFormatFactory;
+import 
org.apache.freemarker.core.valueformat.impl.JavaTemplateDateFormatFactory;
+import 
org.apache.freemarker.core.valueformat.impl.JavaTemplateNumberFormatFactory;
+import org.apache.freemarker.core.valueformat.impl.XSTemplateDateFormatFactory;
 import org.slf4j.Logger;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -958,7 +963,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyEqualsOperator(TemplateModel leftValue, TemplateModel 
rightValue)
             throws TemplateException {
-        return EvalUtil.compare(leftValue, EvalUtil.CMP_OP_EQUALS, rightValue, 
this);
+        return _EvalUtil.compare(leftValue, _EvalUtil.CMP_OP_EQUALS, 
rightValue, this);
     }
 
     /**
@@ -970,7 +975,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyEqualsOperatorLenient(TemplateModel leftValue, 
TemplateModel rightValue)
             throws TemplateException {
-        return EvalUtil.compareLenient(leftValue, EvalUtil.CMP_OP_EQUALS, 
rightValue, this);
+        return _EvalUtil.compareLenient(leftValue, _EvalUtil.CMP_OP_EQUALS, 
rightValue, this);
     }
 
     /**
@@ -980,7 +985,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyLessThanOperator(TemplateModel leftValue, 
TemplateModel rightValue)
             throws TemplateException {
-        return EvalUtil.compare(leftValue, EvalUtil.CMP_OP_LESS_THAN, 
rightValue, this);
+        return _EvalUtil.compare(leftValue, _EvalUtil.CMP_OP_LESS_THAN, 
rightValue, this);
     }
 
     /**
@@ -990,7 +995,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyLessThanOrEqualsOperator(TemplateModel leftValue, 
TemplateModel rightValue)
             throws TemplateException {
-        return EvalUtil.compare(leftValue, EvalUtil.CMP_OP_LESS_THAN_EQUALS, 
rightValue, this);
+        return _EvalUtil.compare(leftValue, _EvalUtil.CMP_OP_LESS_THAN_EQUALS, 
rightValue, this);
     }
 
     /**
@@ -1000,7 +1005,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyGreaterThanOperator(TemplateModel leftValue, 
TemplateModel rightValue)
             throws TemplateException {
-        return EvalUtil.compare(leftValue, EvalUtil.CMP_OP_GREATER_THAN, 
rightValue, this);
+        return _EvalUtil.compare(leftValue, _EvalUtil.CMP_OP_GREATER_THAN, 
rightValue, this);
     }
 
     /**
@@ -1010,7 +1015,7 @@ public final class Environment extends Configurable {
      */
     public boolean applyWithGreaterThanOrEqualsOperator(TemplateModel 
leftValue, TemplateModel rightValue)
             throws TemplateException {
-        return EvalUtil.compare(leftValue, 
EvalUtil.CMP_OP_GREATER_THAN_EQUALS, rightValue, this);
+        return _EvalUtil.compare(leftValue, 
_EvalUtil.CMP_OP_GREATER_THAN_EQUALS, rightValue, this);
     }
 
     public void setOut(Writer out) {
@@ -1049,30 +1054,13 @@ public final class Environment extends Configurable {
             boolean useTempModelExc)
             throws TemplateException {
         try {
-            return 
EvalUtil.assertFormatResultNotNull(format.formatToPlainText(number));
+            return 
_EvalUtil.assertFormatResultNotNull(format.formatToPlainText(number));
         } catch (TemplateValueFormatException e) {
             throw MessageUtil.newCantFormatNumberException(format, exp, e, 
useTempModelExc);
         }
     }
 
     /**
-     * Format number with the number format specified as the parameter, with 
the current locale.
-     * 
-     * @param exp
-     *            The blamed expression if an error occurs; it's only needed 
for better error messages
-     */
-    String formatNumberToPlainText(Number number, 
BackwardCompatibleTemplateNumberFormat format, ASTExpression exp)
-            throws TemplateModelException, _MiscTemplateException {
-        try {
-            return format.format(number);
-        } catch (UnformattableValueException e) {
-            throw new _MiscTemplateException(exp, e, this,
-                    "Failed to format number with ", new 
_DelayedJQuote(format.getDescription()), ": ",
-                    e.getMessage());
-        }
-    }
-
-    /**
      * Returns the current number format ({@link #getNumberFormat()}) as 
{@link TemplateNumberFormat}.
      * 
      * <p>
@@ -1323,7 +1311,7 @@ public final class Environment extends Configurable {
         TemplateDateFormat format = getTemplateDateFormat(tdm, tdmSourceExpr, 
useTempModelExc);
         
         try {
-            return 
EvalUtil.assertFormatResultNotNull(format.formatToPlainText(tdm));
+            return 
_EvalUtil.assertFormatResultNotNull(format.formatToPlainText(tdm));
         } catch (TemplateValueFormatException e) {
             throw MessageUtil.newCantFormatDateException(format, 
tdmSourceExpr, e, useTempModelExc);
         }
@@ -1338,7 +1326,7 @@ public final class Environment extends Configurable {
     String formatDateToPlainText(TemplateDateModel tdm, String formatString,
             ASTExpression blamedDateSourceExp, ASTExpression 
blamedFormatterExp,
             boolean useTempModelExc) throws TemplateException {
-        Date date = EvalUtil.modelToDate(tdm, blamedDateSourceExp);
+        Date date = _EvalUtil.modelToDate(tdm, blamedDateSourceExp);
         
         TemplateDateFormat format = getTemplateDateFormat(
                 formatString, tdm.getDateType(), date.getClass(),
@@ -1346,7 +1334,7 @@ public final class Environment extends Configurable {
                 useTempModelExc);
         
         try {
-            return 
EvalUtil.assertFormatResultNotNull(format.formatToPlainText(tdm));
+            return 
_EvalUtil.assertFormatResultNotNull(format.formatToPlainText(tdm));
         } catch (TemplateValueFormatException e) {
             throw MessageUtil.newCantFormatDateException(format, 
blamedDateSourceExp, e, useTempModelExc);
         }
@@ -1518,7 +1506,7 @@ public final class Environment extends Configurable {
     
     TemplateDateFormat getTemplateDateFormat(TemplateDateModel tdm, 
ASTExpression tdmSourceExpr, boolean useTempModelExc)
             throws TemplateException {
-        Date date = EvalUtil.modelToDate(tdm, tdmSourceExpr);
+        Date date = _EvalUtil.modelToDate(tdm, tdmSourceExpr);
         
         return getTemplateDateFormat(
                 tdm.getDateType(), date.getClass(), tdmSourceExpr,

Reply via email to