You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2015/09/29 02:05:59 UTC
[3/5] incubator-freemarker git commit: Simplified number/date-like
formatting more: The TemplateValueFormat-s don't get the desired
TemplateOutputFormat as parameter, instead,
an TemplateValueFormat should just return the single type of output it was des
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/DateFormatTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/DateFormatTest.java b/src/test/java/freemarker/core/DateFormatTest.java
index 490ba5b..b36a97f 100644
--- a/src/test/java/freemarker/core/DateFormatTest.java
+++ b/src/test/java/freemarker/core/DateFormatTest.java
@@ -266,57 +266,57 @@ public class DateFormatTest extends TemplateTest {
String dateTimeFormatStr2 = dateTimeFormatStr + "'!'";
assertEquals("2015.09.06. 13:00",
- env.getTemplateDateFormat(TemplateDateModel.DATETIME, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.DATETIME, Date.class).formatToPlainText(TM));
assertEquals("2015.09.06. 13:00!",
- env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Date.class).formatToPlainText(TM));
assertEquals("2015.09.06. (+0100)",
- env.getTemplateDateFormat(TemplateDateModel.DATE, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.DATE, Date.class).formatToPlainText(TM));
assertEquals("2015.09.06. (+0100)!",
- env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, Date.class).formatToPlainText(TM));
assertEquals("13:00",
- env.getTemplateDateFormat(TemplateDateModel.TIME, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.TIME, Date.class).formatToPlainText(TM));
assertEquals("13:00!",
- env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Date.class).formatToString(TM));
+ env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Date.class).formatToPlainText(TM));
assertEquals("2015.09.06. 13:00",
- env.getTemplateDateFormat(TemplateDateModel.DATETIME, Timestamp.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.DATETIME, Timestamp.class).formatToPlainText(TM));
assertEquals("2015.09.06. 13:00!",
- env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Timestamp.class).formatToString(TM));
+ env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Timestamp.class).formatToPlainText(TM));
assertEquals("2015.09.06. (+0000)",
- env.getTemplateDateFormat(TemplateDateModel.DATE, java.sql.Date.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.DATE, java.sql.Date.class).formatToPlainText(TM));
assertEquals("2015.09.06. (+0000)!",
- env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, java.sql.Date.class).formatToString(TM));
+ env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, java.sql.Date.class).formatToPlainText(TM));
assertEquals("12:00",
- env.getTemplateDateFormat(TemplateDateModel.TIME, Time.class).formatToString(TM));
+ env.getTemplateDateFormat(TemplateDateModel.TIME, Time.class).formatToPlainText(TM));
assertEquals("12:00!",
- env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Time.class).formatToString(TM));
+ env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Time.class).formatToPlainText(TM));
{
String dateTimeFormatStrLoc = dateTimeFormatStr + " EEEE";
// Gets into cache:
TemplateDateFormat format1
= env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class);
- assertEquals("2015.09.06. 13:00 Sunday", format1.formatToString(TM));
+ assertEquals("2015.09.06. 13:00 Sunday", format1.formatToPlainText(TM));
// Different locale (not cached):
assertEquals("2015.09.06. 13:00 Sonntag",
env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class,
- Locale.GERMANY).formatToString(TM));
+ Locale.GERMANY).formatToPlainText(TM));
// Different locale and zone (not cached):
assertEquals("2015.09.06. 14:00 Sonntag",
env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class,
- Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToString(TM));
+ Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToPlainText(TM));
// Different locale and zone (not cached):
assertEquals("2015.09.06. 15:00 Sonntag",
env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, java.sql.Date.class,
- Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToString(TM));
+ Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToPlainText(TM));
// Check for corrupted cache:
TemplateDateFormat format2
= env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class);
- assertEquals("2015.09.06. 13:00 Sunday", format2.formatToString(TM));
+ assertEquals("2015.09.06. 13:00 Sunday", format2.formatToPlainText(TM));
assertSame(format1, format2);
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java b/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
index 1a7bf3d..ef6e7dd 100644
--- a/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
+++ b/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
@@ -60,7 +60,7 @@ public class EpochMillisDivTemplateDateFormatFactory extends TemplateDateFormatF
}
@Override
- public String formatToString(TemplateDateModel dateModel)
+ public String formatToPlainText(TemplateDateModel dateModel)
throws UnformattableValueException, TemplateModelException {
return String.valueOf(TemplateFormatUtil.getNonNullDate(dateModel).getTime() / divisor);
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java b/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
index 216f8c0..bbf5cd5 100644
--- a/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
+++ b/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
@@ -47,7 +47,7 @@ public class EpochMillisTemplateDateFormatFactory extends TemplateDateFormatFact
private EpochMillisTemplateDateFormat() { }
@Override
- public String formatToString(TemplateDateModel dateModel)
+ public String formatToPlainText(TemplateDateModel dateModel)
throws UnformattableValueException, TemplateModelException {
return String.valueOf(TemplateFormatUtil.getNonNullDate(dateModel).getTime());
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java b/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
new file mode 100644
index 0000000..8e28ad8
--- /dev/null
+++ b/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
@@ -0,0 +1,104 @@
+/*
+ * 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 freemarker.core;
+
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import freemarker.template.TemplateDateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.utility.DateUtil;
+import freemarker.template.utility.DateUtil.CalendarFieldsToDateConverter;
+import freemarker.template.utility.DateUtil.DateParseException;
+
+public class HTMLISOTemplateDateFormatFactory extends TemplateDateFormatFactory {
+
+ public static final HTMLISOTemplateDateFormatFactory INSTANCE = new HTMLISOTemplateDateFormatFactory();
+
+ private HTMLISOTemplateDateFormatFactory() {
+ // Defined to decrease visibility
+ }
+
+ @Override
+ public TemplateDateFormat get(String params, int dateType, Locale locale, TimeZone timeZone, boolean zonelessInput,
+ Environment env) throws UnknownDateTypeFormattingUnsupportedException, InvalidFormatParametersException {
+ TemplateFormatUtil.checkHasNoParameters(params);
+ return HTMLISOTemplateDateFormat.INSTANCE;
+ }
+
+ private static class HTMLISOTemplateDateFormat extends TemplateDateFormat {
+
+ private static final HTMLISOTemplateDateFormat INSTANCE = new HTMLISOTemplateDateFormat();
+
+ private DateUtil.TrivialDateToISO8601CalendarFactory calendarFactory;
+
+ private CalendarFieldsToDateConverter calToDateConverter;
+
+ private HTMLISOTemplateDateFormat() { }
+
+ @Override
+ public String formatToPlainText(TemplateDateModel dateModel)
+ throws UnformattableValueException, TemplateModelException {
+ if (calendarFactory == null) {
+ calendarFactory = new DateUtil.TrivialDateToISO8601CalendarFactory();
+ }
+ return DateUtil.dateToISO8601String(
+ TemplateFormatUtil.getNonNullDate(dateModel),
+ true, true, true, DateUtil.ACCURACY_SECONDS, DateUtil.UTC,
+ calendarFactory);
+ }
+
+ @Override
+ public boolean isLocaleBound() {
+ return false;
+ }
+
+ @Override
+ public boolean isTimeZoneBound() {
+ return false;
+ }
+
+ @Override
+ public Date parse(String s, int dateType) throws UnparsableValueException {
+ try {
+ if (calToDateConverter == null) {
+ calToDateConverter = new DateUtil.TrivialCalendarFieldsToDateConverter();
+ }
+ return DateUtil.parseISO8601DateTime(s, DateUtil.UTC, calToDateConverter);
+ } catch (DateParseException e) {
+ throw new UnparsableValueException("Malformed ISO date-time", e);
+ }
+ }
+
+ @Override
+ public Object format(TemplateDateModel dateModel) throws TemplateValueFormatException, TemplateModelException {
+ return HTMLOutputFormat.INSTANCE.fromMarkup(
+ formatToPlainText(dateModel).replace("T", "<span class='T'>T</span>"));
+ }
+
+ @Override
+ public String getDescription() {
+ return "ISO UTC HTML";
+ }
+
+ }
+
+}
+
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java b/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
index 4b5bf0b..54fc0dc 100644
--- a/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
+++ b/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
@@ -46,7 +46,7 @@ public class HexTemplateNumberFormatFactory extends TemplateNumberFormatFactory
private HexTemplateNumberFormat() { }
@Override
- public String formatToString(TemplateNumberModel numberModel)
+ public String formatToPlainText(TemplateNumberModel numberModel)
throws UnformattableValueException, TemplateModelException {
Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
try {
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java b/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
index b307f2a..0b32bd7 100644
--- a/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
+++ b/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
@@ -51,7 +51,7 @@ public class LocAndTZSensitiveTemplateDateFormatFactory extends TemplateDateForm
}
@Override
- public String formatToString(TemplateDateModel dateModel)
+ public String formatToPlainText(TemplateDateModel dateModel)
throws UnformattableValueException, TemplateModelException {
return String.valueOf(TemplateFormatUtil.getNonNullDate(dateModel).getTime() + "@" + locale + ":" + timeZone.getID());
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java b/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
index 0b2baef..0c349cb 100644
--- a/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
+++ b/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
@@ -47,7 +47,7 @@ public class LocaleSensitiveTemplateNumberFormatFactory extends TemplateNumberFo
}
@Override
- public String formatToString(TemplateNumberModel numberModel)
+ public String formatToPlainText(TemplateNumberModel numberModel)
throws UnformattableValueException, TemplateModelException {
Number n = numberModel.getAsNumber();
try {
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/NumberFormatTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/NumberFormatTest.java b/src/test/java/freemarker/core/NumberFormatTest.java
index 2c2fd40..ddfbf28 100644
--- a/src/test/java/freemarker/core/NumberFormatTest.java
+++ b/src/test/java/freemarker/core/NumberFormatTest.java
@@ -151,17 +151,17 @@ public class NumberFormatTest extends TemplateTest {
TemplateNumberFormat defF = env.getTemplateNumberFormat();
//
TemplateNumberFormat explF = env.getTemplateNumberFormat("0.00");
- assertEquals("1.25", explF.formatToString(new SimpleNumber(1.25)));
+ assertEquals("1.25", explF.formatToPlainText(new SimpleNumber(1.25)));
//
TemplateNumberFormat expl2F = env.getTemplateNumberFormat("@loc");
- assertEquals("1.25_en_US", expl2F.formatToString(new SimpleNumber(1.25)));
+ assertEquals("1.25_en_US", expl2F.formatToPlainText(new SimpleNumber(1.25)));
TemplateNumberFormat explFFr = env.getTemplateNumberFormat("0.00", Locale.FRANCE);
assertNotSame(explF, explFFr);
- assertEquals("1,25", explFFr.formatToString(new SimpleNumber(1.25)));
+ assertEquals("1,25", explFFr.formatToPlainText(new SimpleNumber(1.25)));
//
TemplateNumberFormat expl2FFr = env.getTemplateNumberFormat("@loc", Locale.FRANCE);
- assertEquals("1.25_fr_FR", expl2FFr.formatToString(new SimpleNumber(1.25)));
+ assertEquals("1.25_fr_FR", expl2FFr.formatToPlainText(new SimpleNumber(1.25)));
assertSame(env.getTemplateNumberFormat(), defF);
//
@@ -291,18 +291,16 @@ public class NumberFormatTest extends TemplateTest {
getConfiguration().setNumberFormat("@printfG_3");
String commonFTL = "${1234567} ${'cat:' + 1234567} ${0.0000123}";
- assertOutput(commonFTL,
- "1.23E+06 cat:1.23E+06 1.23E-05");
- assertOutput("<#ftl outputFormat='HTML'>" + commonFTL,
- "1.23*10<sup>6</sup> cat:1.23*10<sup>6</sup> 1.23*10<sup>-5</sup>");
- assertOutput("<#ftl outputFormat='HTML'>${\"" + commonFTL + "\"}",
- "1.23E+06 cat:1.23E+06 1.23E-05");
- assertOutput("<#escape x as x?html>" + commonFTL + "</#escape>",
- "1.23*10<sup>6</sup> cat:1.23E+06 1.23*10<sup>-5</sup>");
- assertOutput("<#escape x as x?xhtml>" + commonFTL + "</#escape>",
- "1.23*10<sup>6</sup> cat:1.23E+06 1.23*10<sup>-5</sup>");
- assertOutput("<#escape x as x?xml>" + commonFTL + "</#escape>",
- "1.23E+06 cat:1.23E+06 1.23E-05");
+ String commonOutput = "1.23*10<sup>6</sup> cat:1.23*10<sup>6</sup> 1.23*10<sup>-5</sup>";
+ assertOutput(commonFTL, commonOutput);
+ assertOutput("<#ftl outputFormat='HTML'>" + commonFTL, commonOutput);
+ assertOutput("<#escape x as x?html>" + commonFTL + "</#escape>", commonOutput);
+ assertOutput("<#escape x as x?xhtml>" + commonFTL + "</#escape>", commonOutput);
+ assertOutput("<#escape x as x?xml>" + commonFTL + "</#escape>", commonOutput);
+ // TODO: Should give markup, but currently does interpolation in plain text:
+ // assertOutput("${\"" + commonFTL + "\"}",
+ // "1.23*10<sup>6</sup> cat:1.23*10<sup>6</sup> 1.23*10<sup>-5</sup>");
+ assertErrorContains("<#ftl outputFormat='plainText'>" + commonFTL, "HTML", "plainText", "conversion");
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c798862a/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java b/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
index 47d46b1..ccaca18 100644
--- a/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
+++ b/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
@@ -68,7 +68,7 @@ public class PrintfGTemplateNumberFormatFactory extends TemplateNumberFormatFact
}
@Override
- public String formatToString(TemplateNumberModel numberModel)
+ public String formatToPlainText(TemplateNumberModel numberModel)
throws UnformattableValueException, TemplateModelException {
final Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
@@ -90,12 +90,9 @@ public class PrintfGTemplateNumberFormatFactory extends TemplateNumberFormatFact
}
@Override
- public Object formatToMarkupOrString(TemplateNumberModel numberModel, MarkupOutputFormat<?> outputFormat)
+ public Object format(TemplateNumberModel numberModel)
throws UnformattableValueException, TemplateModelException {
- String strResult = formatToString(numberModel);
- if (!(outputFormat instanceof HTMLOutputFormat || outputFormat instanceof XHTMLOutputFormat)) {
- return strResult;
- }
+ String strResult = formatToPlainText(numberModel);
int expIdx = strResult.indexOf('E');
if (expIdx == -1) {
@@ -108,7 +105,7 @@ public class PrintfGTemplateNumberFormatFactory extends TemplateNumberFormatFact
expSignifNumBegin++;
}
- return outputFormat.fromMarkup(
+ return HTMLOutputFormat.INSTANCE.fromMarkup(
strResult.substring(0, expIdx)
+ "*10<sup>"
+ (expStr.charAt(0) == '-' ? "-" : "") + expStr.substring(expSignifNumBegin)