From 4069ad9f9cc7af57b9ae823209daf2603fdb3bce Mon Sep 17 00:00:00 2001
From: Vasyl Khrystiuk
Date: Thu, 28 Nov 2024 01:54:25 +0200
Subject: [PATCH] fix for https://github.com/bkiers/Liqp/issues/313
---
src/main/java/liqp/TemplateContext.java | 5 +
src/main/java/liqp/TemplateParser.java | 26 +++-
src/main/java/liqp/filters/Date.java | 3 +-
.../liqp/filters/date/BasicDateParser.java | 102 +++++++++++++++
.../filters/date/FuzzyDateDateParser.java | 117 ++++++++++++++++++
src/main/java/liqp/filters/date/Parser.java | 95 ++++----------
.../filters/date/FuzzyDateDateParserTest.java | 27 ++++
7 files changed, 298 insertions(+), 77 deletions(-)
create mode 100644 src/main/java/liqp/filters/date/BasicDateParser.java
create mode 100644 src/main/java/liqp/filters/date/FuzzyDateDateParser.java
create mode 100644 src/test/java/liqp/filters/date/FuzzyDateDateParserTest.java
diff --git a/src/main/java/liqp/TemplateContext.java b/src/main/java/liqp/TemplateContext.java
index 33f12dae..ee783a6c 100644
--- a/src/main/java/liqp/TemplateContext.java
+++ b/src/main/java/liqp/TemplateContext.java
@@ -10,6 +10,7 @@
import liqp.RenderTransformer.ObjectAppender;
import liqp.exceptions.ExceededMaxIterationsException;
+import liqp.filters.date.BasicDateParser;
public class TemplateContext {
@@ -67,6 +68,10 @@ public TemplateParser getParser() {
return parser;
}
+ public BasicDateParser getDateParser() {
+ return parser.getDateParser();
+ }
+
public void addError(Exception exception) {
this.errors.add(exception);
}
diff --git a/src/main/java/liqp/TemplateParser.java b/src/main/java/liqp/TemplateParser.java
index df078d00..a54a0753 100644
--- a/src/main/java/liqp/TemplateParser.java
+++ b/src/main/java/liqp/TemplateParser.java
@@ -8,6 +8,8 @@
import liqp.blocks.Block;
import liqp.filters.Filter;
import liqp.filters.Filters;
+import liqp.filters.date.BasicDateParser;
+import liqp.filters.date.Parser;
import liqp.parser.Flavor;
import liqp.parser.LiquidSupport;
import liqp.tags.Tag;
@@ -36,7 +38,6 @@ public class TemplateParser {
public static final TemplateParser DEFAULT_JEKYLL = Flavor.JEKYLL.defaultParser();
-
/**
* Equivalent of
*
@@ -91,6 +92,7 @@ public enum ErrorMode {
private final int limitMaxSizeRenderedString;
private final long limitMaxRenderTimeMillis;
private final long limitMaxTemplateSizeBytes;
+ private final BasicDateParser dateParser;
public enum EvaluateMode {
LAZY,
@@ -158,6 +160,7 @@ public static class Builder {
private Long limitMaxRenderTimeMillis = Long.MAX_VALUE;
private Long limitMaxTemplateSizeBytes = Long.MAX_VALUE;
private NameResolver nameResolver;
+ private BasicDateParser dateParser;
public Builder() {
}
@@ -188,6 +191,7 @@ public Builder(TemplateParser parser) {
this.errorMode = parser.errorMode;
this.nameResolver = parser.nameResolver;
+ this.dateParser = parser.dateParser;
}
@SuppressWarnings("hiding")
@@ -360,6 +364,11 @@ public Builder withErrorMode(ErrorMode errorMode) {
return this;
}
+ public Builder withDateParser(BasicDateParser dateParser) {
+ this.dateParser = dateParser;
+ return this;
+ }
+
@SuppressWarnings("hiding")
public TemplateParser build() {
@@ -415,8 +424,12 @@ public TemplateParser build() {
nameResolver = new LocalFSNameResolver(snippetsFolderName);
}
+ if (dateParser == null) {
+ dateParser = new Parser();
+ }
+
return new TemplateParser(strictVariables, showExceptionsFromInclude, evaluateMode, renderTransformer, locale, defaultTimeZone, environmentMapConfigurator, errorMode, fl, stripSpacesAroundTags, stripSingleLine, mapper,
- allInsertions, finalFilters, evaluateInOutputTag, strictTypedExpressions, liquidStyleInclude, liquidStyleWhere, nameResolver, limitMaxIterations, limitMaxSizeRenderedString, limitMaxRenderTimeMillis, limitMaxTemplateSizeBytes);
+ allInsertions, finalFilters, evaluateInOutputTag, strictTypedExpressions, liquidStyleInclude, liquidStyleWhere, nameResolver, limitMaxIterations, limitMaxSizeRenderedString, limitMaxRenderTimeMillis, limitMaxTemplateSizeBytes, dateParser);
}
}
@@ -428,7 +441,8 @@ public TemplateParser build() {
Consumer