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 <[email protected]> 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 "[email protected]" <[email protected]>.
