From 9eb3d485dcdf90184d6f380abad54633c548b1d7 Mon Sep 17 00:00:00 2001 From: cesarvh Date: Wed, 17 Apr 2019 17:18:36 -0700 Subject: [PATCH] CC-396: Added format to fix range intervals where only first has an era --- .../structureddate/antlr/StructuredDate.g4 | 4 +++- .../antlr/ANTLRStructuredDateEvaluator.java | 19 ++++++++++++++++++- .../src/test/resources/test-dates.yaml | 14 +++++++++----- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 b/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 index 6eb14b19a..a4781ab44 100644 --- a/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 +++ b/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 @@ -20,7 +20,8 @@ displayDate: uncertainDate uncertainDate: CIRCA certainDate ; -certainDate: hyphenatedRange +certainDate: partialEraRange +| hyphenatedRange | singleInterval ; @@ -96,6 +97,7 @@ century: ( strCentury | numCentury ) era? ; millennium: nth MILLENNIUM era? ; +partialEraRange: num strMonth num era (DASH|HYPHEN) num strMonth num ; romanDate: num (HYPHEN | SLASH) romanMonth (HYPHEN | SLASH) numYear era? ; strDate: strMonth ( numDayOfMonth | nth ) COMMA? numYear era?; invStrDate: era num COMMA? strMonth num diff --git a/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java b/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java index 89e82f3ea..937cb662e 100644 --- a/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java +++ b/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java @@ -76,6 +76,7 @@ import org.collectionspace.services.structureddate.antlr.StructuredDateParser.Nu import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartOfContext; import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialCenturyContext; import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialDecadeContext; +import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialEraRangeContext; import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialYearContext; import org.collectionspace.services.structureddate.antlr.StructuredDateParser.RomanDateContext; import org.collectionspace.services.structureddate.antlr.StructuredDateParser.QuarterCenturyContext; @@ -1197,6 +1198,23 @@ public class ANTLRStructuredDateEvaluator extends StructuredDateBaseListener imp stack.push(dayOfMonth); } + @Override + public void exitPartialEraRange(PartialEraRangeContext ctx) { + if (ctx.exception != null) return; + + Integer secondYear = (Integer) stack.pop(); + Integer secondMonth = (Integer) stack.pop(); + Integer secondDay = (Integer) stack.pop(); + + Era era = (Era) stack.pop(); + Integer firstYear = (Integer) stack.pop(); + Integer firstMonth = (Integer) stack.pop(); + Integer firstDay = (Integer) stack.pop(); + + stack.push(new Date(secondYear, secondMonth, secondDay, null)); + stack.push(new Date(firstYear, firstMonth, firstDay, era)); + } + @Override public void exitNum(NumContext ctx) { if (ctx.exception != null) return; @@ -1219,7 +1237,6 @@ public class ANTLRStructuredDateEvaluator extends StructuredDateBaseListener imp @Override public void exitRomanDate(RomanDateContext ctx) { if (ctx.exception != null) return; - System.out.println("I am going in here"); Era era = (ctx.era() == null) ? null : (Era) stack.pop(); Integer year = (Integer) stack.pop(); diff --git a/services/structureddate/structureddate/src/test/resources/test-dates.yaml b/services/structureddate/structureddate/src/test/resources/test-dates.yaml index 344737e8f..824a1b2f0 100644 --- a/services/structureddate/structureddate/src/test/resources/test-dates.yaml +++ b/services/structureddate/structureddate/src/test/resources/test-dates.yaml @@ -1266,12 +1266,16 @@ '29-IV-2018': # Day-Month-Year with roman numeral as month earliestSingleDate: [2018, 4, 29, CE] - '01-IV-2017 BCE': # Day-Month-Year with roman numeral as month, with Era - earliestSingleDate: [2017, 4, 1, BCE] + '01-IV-2017 BCE': # Day-Month-Year with roman numeral as month, with Era + earliestSingleDate: [2017, 4, 1, BCE] - # '12 june 1942 - 13 june 1943': # hyphenatedRange, date with comma'd numbers - # earliestSingleDate: [1942, 6, 12, CE] - # latestDate: [1942, 6, 13, CE] + '12 june 1942 BCE - 13 june 1943': # hyphenatedRange range with era only in first interval, mixed eras + earliestSingleDate: [1942, 6, 12, BCE] + latestDate: [1943, 6, 13, CE] + + '13 april 1995 CE - 18 april 2019': # hyphenatedRange range with era only in first interval + earliestSingleDate: [1995, 4, 13, CE] + latestDate: [2019, 4, 18, CE] # ------------------------------------------------------------------------------------------------------- # Invalid dates -- 2.47.3