You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:10:29 UTC
[sling-org-apache-sling-scripting-sightly-compiler] 09/31:
SLING-6399 - Implement support for date and number formatting for HTL
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.scripting.sightly.compiler-1.0.10
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler.git
commit 3f0ea53adde02feaf097c098d79fddf5f4d65e2f
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Dec 14 22:13:32 2016 +0000
SLING-6399 - Implement support for date and number formatting for HTL
* implemented support for the date and number formatting features from version 1.3
of the HTL Language Specification
* applied slightly modified patch submitted by Vlad Băilescu at https://github.com/apache/sling/pull/191
(Closes #191)
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/scripting/sightly/compiler@1774351 13f79535-47bb-0310-9956-ffa450edef68
---
.../sling/scripting/sightly/compiler/SightlyCompiler.java | 2 +-
.../sightly/compiler/expression/nodes/NumericConstant.java | 7 +++----
.../sling/scripting/sightly/impl/filter/FormatFilter.java | 12 +++++++++++-
.../sling/scripting/sightly/impl/filter/I18nFilter.java | 6 +++++-
.../sightly/impl/frontend/ExpressionWrapperTest.java | 12 ++++++------
5 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/sightly/compiler/SightlyCompiler.java b/src/main/java/org/apache/sling/scripting/sightly/compiler/SightlyCompiler.java
index 008c89a..ed5ef36 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/compiler/SightlyCompiler.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/compiler/SightlyCompiler.java
@@ -103,8 +103,8 @@ public final class SightlyCompiler {
// register filters
final List<Filter> filters = new ArrayList<>(5);
- filters.add(FormatFilter.getInstance());
filters.add(I18nFilter.getInstance());
+ filters.add(FormatFilter.getInstance());
filters.add(JoinFilter.getInstance());
filters.add(URIManipulationFilter.getInstance());
filters.add(XSSFilter.getInstance());
diff --git a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/NumericConstant.java b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/NumericConstant.java
index 22c852c..d03056c 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/NumericConstant.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/NumericConstant.java
@@ -49,7 +49,7 @@ public final class NumericConstant implements Atom {
* @param value the number representation
*/
public NumericConstant(Number value) {
- this.value = value.longValue();
+ this.value = value;
this.text = value.toString();
}
@@ -80,11 +80,10 @@ public final class NumericConstant implements Atom {
}
private Number parseNumber(String s) {
- try {
- return Long.parseLong(s);
- } catch (NumberFormatException e) {
+ if (s.contains(".")) {
return Double.parseDouble(s);
}
+ return Long.parseLong(s);
}
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
index bf7291a..52e00f0 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
@@ -21,6 +21,7 @@ package org.apache.sling.scripting.sightly.impl.filter;
import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
import org.apache.sling.scripting.sightly.compiler.expression.Expression;
import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
+import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
import org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
/**
@@ -29,6 +30,9 @@ import org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
public class FormatFilter extends AbstractFilter {
public static final String FORMAT_OPTION = "format";
+ public static final String TYPE_OPTION = "type";
+ public static final String FORMAT_LOCALE_OPTION = "formatLocale";
+ public static final String TIMEZONE_OPTION = "timezone";
private static final class FormatFilterLoader {
private static final FormatFilter INSTANCE = new FormatFilter();
@@ -53,7 +57,13 @@ public class FormatFilter extends AbstractFilter {
return expression;
}
ExpressionNode translation =
- new RuntimeCall(RuntimeFunction.FORMAT, expression.getRoot(), expression.removeOption(FORMAT_OPTION));
+ new RuntimeCall(RuntimeFunction.FORMAT, expression.getRoot(),
+ new MapLiteral(getFilterOptions(expression,
+ FORMAT_OPTION,
+ TYPE_OPTION,
+ I18nFilter.LOCALE_OPTION,
+ FORMAT_LOCALE_OPTION,
+ TIMEZONE_OPTION)));
return expression.withNode(translation);
}
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
index 3fe12d5..fdb07cd 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
@@ -18,6 +18,8 @@
******************************************************************************/
package org.apache.sling.scripting.sightly.impl.filter;
+import java.util.Map;
+
import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
import org.apache.sling.scripting.sightly.compiler.expression.Expression;
import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
@@ -55,9 +57,11 @@ public final class I18nFilter extends AbstractFilter {
== ExpressionContext.PLUGIN_DATA_SLY_TEMPLATE || expressionContext == ExpressionContext.PLUGIN_DATA_SLY_CALL) {
return expression;
}
+ Map <String, ExpressionNode> options = getFilterOptions(expression, HINT_OPTION, LOCALE_OPTION, BASENAME_OPTION);
ExpressionNode translation = new RuntimeCall(RuntimeFunction.I18N, expression.getRoot(), new MapLiteral
- (getFilterOptions(expression, HINT_OPTION, LOCALE_OPTION, BASENAME_OPTION)));
+ (options));
expression.removeOption(I18N_OPTION);
+ expression.getOptions().put(FormatFilter.FORMAT_LOCALE_OPTION, options.get(LOCALE_OPTION));
return expression.withNode(translation);
}
}
diff --git a/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java b/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
index 85ca544..a9b0588 100644
--- a/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
+++ b/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
@@ -74,7 +74,7 @@ public class ExpressionWrapperTest {
interpolation.addExpression(new Expression(new StringConstant("hello"), options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
- List<ExpressionNode> xssArguments = runEmptyOptionsAndXSSAssertions(result);
+ List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 1);
RuntimeCall i18n = (RuntimeCall) xssArguments.get(0);
assertEquals("Expected to I18n runtime function call.", RuntimeFunction.I18N, i18n.getFunctionName());
}
@@ -90,7 +90,7 @@ public class ExpressionWrapperTest {
interpolation.addExpression(new Expression(new StringConstant("Hello {0} {1}"), options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
- List<ExpressionNode> xssArguments = runEmptyOptionsAndXSSAssertions(result);
+ List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 0);
RuntimeCall format = (RuntimeCall) xssArguments.get(0);
assertEquals(RuntimeFunction.FORMAT, format.getFunctionName());
}
@@ -106,7 +106,7 @@ public class ExpressionWrapperTest {
interpolation.addExpression(new Expression(new ArrayLiteral(array), options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
- List<ExpressionNode> xssArguments = runEmptyOptionsAndXSSAssertions(result);
+ List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 0);
RuntimeCall join = (RuntimeCall) xssArguments.get(0);
assertEquals(RuntimeFunction.JOIN, join.getFunctionName());
}
@@ -142,13 +142,13 @@ public class ExpressionWrapperTest {
options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
- List<ExpressionNode> xssArguments = runEmptyOptionsAndXSSAssertions(result);
+ List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 0);
RuntimeCall join = (RuntimeCall) xssArguments.get(0);
assertEquals(RuntimeFunction.URI_MANIPULATION, join.getFunctionName());
}
- private List<ExpressionNode> runEmptyOptionsAndXSSAssertions(Expression result) {
- assertTrue("Expected empty options map for expression after processing.", result.getOptions().isEmpty());
+ private List<ExpressionNode> runOptionsAndXSSAssertions(Expression result, int expectedOptions) {
+ assertEquals("Options map size for expression after processing is different from expected.", expectedOptions, result.getOptions().size());
RuntimeCall xss = (RuntimeCall) result.getRoot();
assertEquals("Expected XSS escaping applied to expression.", RuntimeFunction.XSS, xss.getFunctionName());
return xss.getArguments();
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.