diff --git a/pom.xml b/pom.xml index 92f05e81..aec5e7ae 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,6 @@ 4.13.0 2.13.4.2 2.13.2 - 1.15.3 4.13.1 @@ -101,13 +100,6 @@ ${jackson.version} - - - org.jsoup - jsoup - ${jsoup.version} - - ua.co.k strftime4j diff --git a/src/main/java/liqp/LValue.java b/src/main/java/liqp/LValue.java index 9e91fb84..42acf352 100644 --- a/src/main/java/liqp/LValue.java +++ b/src/main/java/liqp/LValue.java @@ -493,4 +493,19 @@ public boolean isMap(Object value) { public Map asMap(Object value) { return (Map)value; } + + public static boolean isBlank(final String string) { + if (string == null || string.length() == 0) + return true; + + int l = string.length(); + for (int i = 0; i < l; i++) { + if (!isWhitespace(string.codePointAt(i))) + return false; + } + return true; + } + private static boolean isWhitespace(int c){ + return c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r'; + } } diff --git a/src/main/java/liqp/filters/Strip_HTML.java b/src/main/java/liqp/filters/Strip_HTML.java index 49b2e401..3798b4fc 100644 --- a/src/main/java/liqp/filters/Strip_HTML.java +++ b/src/main/java/liqp/filters/Strip_HTML.java @@ -1,10 +1,21 @@ package liqp.filters; import liqp.TemplateContext; -import org.jsoup.Jsoup; + +import java.util.regex.Pattern; public class Strip_HTML extends Filter { + // STRIP_HTML_BLOCKS = Regexp.union( + // //m, + // //m, + // //m + // ) + private static final Pattern STRIP_HTML_BLOCKS = Pattern.compile("||", Pattern.MULTILINE); + + // STRIP_HTML_TAGS = /<.*?>/m + private static final Pattern STRIP_HTML_TAGS = Pattern.compile("<.*?>", Pattern.MULTILINE); + /* * strip_html(input) * @@ -14,7 +25,9 @@ public class Strip_HTML extends Filter { public Object apply(Object value, TemplateContext context, Object... params) { String html = super.asString(value, context); + html = STRIP_HTML_BLOCKS.matcher(html).replaceAll(""); + html = STRIP_HTML_TAGS.matcher(html).replaceAll(""); - return Jsoup.parse(html).text(); + return html; } } diff --git a/src/main/java/liqp/nodes/OutputNode.java b/src/main/java/liqp/nodes/OutputNode.java index 558122b6..6b0a840f 100644 --- a/src/main/java/liqp/nodes/OutputNode.java +++ b/src/main/java/liqp/nodes/OutputNode.java @@ -4,12 +4,13 @@ import liqp.TemplateContext; import liqp.TemplateParser; import liqp.exceptions.LiquidException; -import org.jsoup.internal.StringUtil; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import static liqp.LValue.isBlank; + public class OutputNode implements LNode { private LNode expression; @@ -40,7 +41,7 @@ public Object render(TemplateContext context) { } if (context != null && context.getParser().errorMode == TemplateParser.ErrorMode.WARN) { String localUnparsed = unparsed; - if (!StringUtil.isBlank(localUnparsed)) { + if (!isBlank(localUnparsed)) { if (localUnparsed.length() > 30) { localUnparsed = localUnparsed.substring(0, 30) + "..."; } diff --git a/src/test/java/liqp/filters/Strip_HTMLTest.java b/src/test/java/liqp/filters/Strip_HTMLTest.java index 710fb088..b950173e 100644 --- a/src/test/java/liqp/filters/Strip_HTMLTest.java +++ b/src/test/java/liqp/filters/Strip_HTMLTest.java @@ -52,4 +52,20 @@ public void applyOriginalTest() { assertThat(filter.apply("", context), is((Object)"")); assertThat(filter.apply(null, context), is((Object)"")); } + + + @Test + public void testIssue306() { + // given + // {{ "test" | escape }} --> <em>test</em> + TemplateContext context = new TemplateContext(); + Filter filter = Filters.COMMON_FILTERS.get("strip_html"); + + // when + Object result = filter.apply("<em>test</em>", context); + + + // then + assertThat(result, is("<em>test</em>")); + } }