}
+ /**
+ * Normalizes a display date for evaluation.
+ * - Remove leading and trailing whitespace
+ * - Remove leading and trailing braces
+ * - Convert to lowercase
+ *
+ * @param displayDate
+ * @return The normalized display date
+ */
+ protected String normalizeDisplayDate(String displayDate) {
+ String normalDisplayDate =
+ displayDate
+ .replaceAll("^[\\[\\(\\{\\s]+|[\\]\\)\\}\\s]+$", "")
+ .toLowerCase();
+
+ return normalDisplayDate;
+ }
+
@Override
public StructuredDateInternal evaluate(String displayDate) throws StructuredDateFormatException {
stack = new Stack<Object>();
result = new StructuredDateInternal();
result.setDisplayDate(displayDate);
- // Instantiate a parser from the lowercased display date, so that parsing will be case insensitive
- ANTLRInputStream inputStream = new ANTLRInputStream(displayDate.toLowerCase());
+ // Instantiate a parser from the normalized display date.
+ ANTLRInputStream inputStream = new ANTLRInputStream(normalizeDisplayDate(displayDate));
StructuredDateLexer lexer = new StructuredDateLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
StructuredDateParser parser = new StructuredDateParser(tokenStream);
earliestSingleDate: [1995, 4, 13, CE]
latestDate: [2019, 4, 18, CE]
+ '(1997)': # enclosing parens
+ earliestSingleDate: [1997, 1, 1, CE]
+ latestDate: [1997, 12, 31, CE]
+
+ '( 1997 )': # enclosing parens
+ earliestSingleDate: [1997, 1, 1, CE]
+ latestDate: [1997, 12, 31, CE]
+
+ '[1997]': # enclosing square brackets
+ earliestSingleDate: [1997, 1, 1, CE]
+ latestDate: [1997, 12, 31, CE]
+
+ '{1997}': # enclosing curly brackets
+ earliestSingleDate: [1997, 1, 1, CE]
+ latestDate: [1997, 12, 31, CE]
+
+ ' ([1997 }]] )': # enclosing mixed brackets
+ earliestSingleDate: [1997, 1, 1, CE]
+ latestDate: [1997, 12, 31, CE]
+
+
# -------------------------------------------------------------------------------------------------------
# Invalid dates
# -------------------------------------------------------------------------------------------------------