| dayFirstDate
| dayOrYearFirstDate
| invStrDateEraLastDate
+| romanDate
;
month: monthYear
millennium: nth MILLENNIUM era? ;
+romanDate: num (HYPHEN | SLASH) romanMonth (HYPHEN | SLASH) numYear era? ;
strDate: strMonth ( numDayOfMonth | nth ) COMMA? numYear era?;
invStrDate: era num COMMA? strMonth num
| era? num COMMA strMonth num ;
nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era? ;
strSeasonInYearRange: strSeason ( HYPHEN | DASH ) strSeason COMMA? numYear era? ;
numDayInMonthRange: numMonth SLASH num ( HYPHEN | DASH ) num SLASH numYear era? ;
-numDate: num SLASH ( num | romanNum ) SLASH num era?
-| num HYPHEN ( num | romanNum ) HYPHEN num era? ;
+numDate: num SLASH num SLASH num era?
+| num HYPHEN num HYPHEN num era? ;
monthYear: strMonth COMMA? numYear era? ;
invMonthYear: era? numYear COMMA? strMonth ;
seasonYear: strSeason COMMA? numYear era? ;
numDayOfMonth: NUMBER ;
num: NUMBER ;
unknownDate: UNKNOWN ;
-romanNum: ROMANNUMBER ;
+romanMonth: ROMANMONTH ;
/*
* Lexer rules
HUNDREDS: [0-9]*? '00' '\''? 's';
TENS: [0-9]*? '0' '\''? 's';
NUMBER: ([0-9,]+)*[0-9] ;
-ROMANNUMBER: [ivx]+ ;
+ROMANMONTH: 'i' | 'ii' | 'iii' | 'iv' | 'v' | 'vi' | 'vii' | 'viii' | 'ix' | 'x' | 'xi' | 'xii' ;
COMMA: ',' ;
HYPHEN: '-' ;
DASH: [—–] ; /* EM DASH, EN DASH */
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialCenturyContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialDecadeContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.PartialYearContext;
+import org.collectionspace.services.structureddate.antlr.StructuredDateParser.RomanDateContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.QuarterCenturyContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.QuarterInYearRangeContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.QuarterYearContext;
-import org.collectionspace.services.structureddate.antlr.StructuredDateParser.RomanNumContext;
+import org.collectionspace.services.structureddate.antlr.StructuredDateParser.RomanMonthContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.SeasonYearContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.StrCenturyContext;
import org.collectionspace.services.structureddate.antlr.StructuredDateParser.StrDateContext;
numMonth = num2;
dayOfMonth = num3;
}
- else if (DateUtils.isValidDate(num3, num2, num1, era)) {
- // The date was of format day-month-year
- numMonth = num2;
- dayOfMonth = num1;
- }
stack.push(year);
stack.push(numMonth);
}
@Override
- public void exitRomanNum(RomanNumContext ctx) {
-
- int num = DateUtils.romanToDecimal(ctx.ROMANNUMBER().getText());
-
- if (num < 1 || num > 12) {
- throw new StructuredDateFormatException("unexpected month '" + Integer.toString(num) + "'");
- }
+ public void exitRomanMonth(RomanMonthContext ctx) {
+ int num = DateUtils.romanToDecimal(ctx.ROMANMONTH().getText());
stack.push(num);
}
+ @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();
+ Integer month = (Integer) stack.pop();
+ Integer day = (Integer) stack.pop();
+
+ stack.push(year);
+ stack.push(month);
+ stack.push(day);
+ stack.push(era);
+ }
+
@Override
public void exitUnknownDate(UnknownDateContext ctx) {
if (ctx.exception != null) return;
earliestSingleDate: [54962, 5, 13, BCE]
latestDate: [2019, 4, 5, CE]
- '17-X-13': # Day-Month-Year with roman numeral as month, makes sure ambiguities resolved as they were before
- earliestSingleDate: [17, 10, 13, CE]
-
'01-I-2017 BCE': # Day-Month-Year with roman numeral as month
earliestSingleDate: [2017, 1, 1, BCE]
'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]
+
# -------------------------------------------------------------------------------------------------------
# Invalid dates
# -------------------------------------------------------------------------------------------------------