chrono-node 2.7.2 → 2.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/refiners/OverlapRemovalRefiner.js +16 -6
- package/dist/cjs/common/refiners/OverlapRemovalRefiner.js.map +1 -1
- package/dist/cjs/locales/en/configuration.js +13 -8
- package/dist/cjs/locales/en/configuration.js.map +1 -1
- package/dist/cjs/locales/en/constants.d.ts +1 -1
- package/dist/cjs/locales/en/constants.js +1 -1
- package/dist/cjs/locales/en/constants.js.map +1 -1
- package/dist/cjs/locales/en/index.d.ts +2 -0
- package/dist/cjs/locales/en/index.js +5 -5
- package/dist/cjs/locales/en/index.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.d.ts +2 -0
- package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.js +13 -2
- package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameParser.js +1 -0
- package/dist/cjs/locales/en/parsers/ENMonthNameParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
- package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/refiners/ENMergeRelativeAfterDateRefiner.d.ts +6 -0
- package/dist/cjs/locales/en/refiners/ENMergeRelativeAfterDateRefiner.js +30 -0
- package/dist/cjs/locales/en/refiners/ENMergeRelativeAfterDateRefiner.js.map +1 -0
- package/dist/cjs/locales/en/refiners/{ENMergeRelativeDateRefiner.d.ts → ENMergeRelativeFollowByDateRefiner.d.ts} +1 -1
- package/dist/cjs/locales/en/refiners/{ENMergeRelativeDateRefiner.js → ENMergeRelativeFollowByDateRefiner.js} +3 -3
- package/dist/cjs/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js.map +1 -0
- package/dist/cjs/locales/nl/parsers/NLRelativeDateFormatParser.js +3 -3
- package/dist/cjs/locales/nl/parsers/NLRelativeDateFormatParser.js.map +1 -1
- package/dist/cjs/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +6 -4
- package/dist/cjs/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
- package/dist/cjs/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.js +24 -0
- package/dist/cjs/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
- package/dist/cjs/locales/uk/parsers/UKCasualDateParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKCasualDateParser.js +4 -9
- package/dist/cjs/locales/uk/parsers/UKCasualDateParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.js +4 -10
- package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.js +14 -19
- package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKMonthNameParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKMonthNameParser.js +10 -14
- package/dist/cjs/locales/uk/parsers/UKMonthNameParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.js +5 -8
- package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.js +4 -8
- package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js +4 -8
- package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKTimeUnitWithinFormatParser.js +3 -3
- package/dist/cjs/locales/uk/parsers/UKTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKWeekdayParser.d.ts +3 -4
- package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js +10 -15
- package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js.map +1 -1
- package/dist/esm/common/refiners/OverlapRemovalRefiner.js +16 -6
- package/dist/esm/common/refiners/OverlapRemovalRefiner.js.map +1 -1
- package/dist/esm/locales/en/configuration.js +13 -8
- package/dist/esm/locales/en/configuration.js.map +1 -1
- package/dist/esm/locales/en/constants.d.ts +1 -1
- package/dist/esm/locales/en/constants.js +1 -1
- package/dist/esm/locales/en/constants.js.map +1 -1
- package/dist/esm/locales/en/index.d.ts +2 -0
- package/dist/esm/locales/en/index.js +4 -4
- package/dist/esm/locales/en/index.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.d.ts +2 -0
- package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.js +13 -2
- package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameParser.js +1 -0
- package/dist/esm/locales/en/parsers/ENMonthNameParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
- package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/esm/locales/en/refiners/ENMergeRelativeAfterDateRefiner.d.ts +6 -0
- package/dist/esm/locales/en/refiners/ENMergeRelativeAfterDateRefiner.js +27 -0
- package/dist/esm/locales/en/refiners/ENMergeRelativeAfterDateRefiner.js.map +1 -0
- package/dist/esm/locales/en/refiners/{ENMergeRelativeDateRefiner.d.ts → ENMergeRelativeFollowByDateRefiner.d.ts} +1 -1
- package/dist/esm/locales/en/refiners/{ENMergeRelativeDateRefiner.js → ENMergeRelativeFollowByDateRefiner.js} +2 -2
- package/dist/esm/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js.map +1 -0
- package/dist/esm/locales/nl/parsers/NLRelativeDateFormatParser.js +3 -3
- package/dist/esm/locales/nl/parsers/NLRelativeDateFormatParser.js.map +1 -1
- package/dist/esm/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +6 -4
- package/dist/esm/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
- package/dist/esm/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.js +19 -0
- package/dist/esm/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
- package/dist/esm/locales/uk/parsers/UKCasualDateParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKCasualDateParser.js +4 -9
- package/dist/esm/locales/uk/parsers/UKCasualDateParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKCasualTimeParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKCasualTimeParser.js +4 -10
- package/dist/esm/locales/uk/parsers/UKCasualTimeParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.js +15 -20
- package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKMonthNameParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKMonthNameParser.js +11 -15
- package/dist/esm/locales/uk/parsers/UKMonthNameParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.js +6 -9
- package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.js +5 -9
- package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js +5 -9
- package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKTimeUnitWithinFormatParser.js +3 -3
- package/dist/esm/locales/uk/parsers/UKTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKWeekdayParser.d.ts +3 -4
- package/dist/esm/locales/uk/parsers/UKWeekdayParser.js +11 -16
- package/dist/esm/locales/uk/parsers/UKWeekdayParser.js.map +1 -1
- package/package.json +1 -1
- package/src/common/refiners/OverlapRemovalRefiner.ts +16 -7
- package/src/locales/en/configuration.ts +15 -8
- package/src/locales/en/constants.ts +1 -1
- package/src/locales/en/index.ts +4 -4
- package/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts +20 -5
- package/src/locales/en/parsers/ENMonthNameParser.ts +1 -0
- package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +5 -0
- package/src/locales/en/refiners/ENMergeRelativeAfterDateRefiner.ts +46 -0
- package/src/locales/en/refiners/{ENMergeRelativeDateRefiner.ts → ENMergeRelativeFollowByDateRefiner.ts} +4 -4
- package/src/locales/nl/parsers/NLRelativeDateFormatParser.ts +3 -3
- package/src/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.ts +10 -4
- package/src/locales/uk/parsers/AbstractParserWithWordBoundaryChecking.ts +27 -0
- package/src/locales/uk/parsers/UKCasualDateParser.ts +4 -14
- package/src/locales/uk/parsers/UKCasualTimeParser.ts +4 -14
- package/src/locales/uk/parsers/UKMonthNameLittleEndianParser.ts +17 -26
- package/src/locales/uk/parsers/UKMonthNameParser.ts +13 -20
- package/src/locales/uk/parsers/UKRelativeDateFormatParser.ts +8 -16
- package/src/locales/uk/parsers/UKTimeUnitAgoFormatParser.ts +5 -11
- package/src/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.ts +4 -13
- package/src/locales/uk/parsers/UKTimeUnitWithinFormatParser.ts +3 -7
- package/src/locales/uk/parsers/UKWeekdayParser.ts +13 -21
- package/test/en/en_month.test.ts +6 -0
- package/test/en/en_month_name_middle_endian.test.ts +23 -0
- package/test/en/en_time_units_later.test.ts +22 -0
- package/test/en/negative_cases.test.ts +4 -0
- package/test/nl/nl_relative.test.ts +16 -2
- package/dist/cjs/locales/en/refiners/ENMergeRelativeDateRefiner.js.map +0 -1
- package/dist/esm/locales/en/refiners/ENMergeRelativeDateRefiner.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UKTimeUnitCasualRelativeFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"UKTimeUnitCasualRelativeFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,2CAA2C,EAAE,MAAM,0CAA0C,CAAC;AAEvG,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,2CAA2C;IACzG,kBAAkB,CAAC,OAAuB;QACtC,OAAO,+DAA+D,kBAAkB,GAAG,CAAC;IAChG,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,QAAQ,MAAM,EAAE;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,GAAG;gBACJ,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM;SACb;QAED,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;CACJ"}
|
|
@@ -2,14 +2,14 @@ import { TIME_UNITS_PATTERN, parseTimeUnits, REGEX_PARTS } from "../constants.js
|
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
3
|
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
4
4
|
const PATTERN = `(?:(?:приблизно|орієнтовно)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})${REGEX_PARTS.rightBoundary}`;
|
|
5
|
-
const PATTERN_WITH_PREFIX = new RegExp(`(?:протягом|на протязі|протягом|упродовж|впродовж)\\s*${PATTERN}`, REGEX_PARTS.flags);
|
|
6
|
-
const PATTERN_WITHOUT_PREFIX = new RegExp(PATTERN, "i");
|
|
7
5
|
export default class UKTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
8
6
|
patternLeftBoundary() {
|
|
9
7
|
return REGEX_PARTS.leftBoundary;
|
|
10
8
|
}
|
|
11
9
|
innerPattern(context) {
|
|
12
|
-
return context.option.forwardDate
|
|
10
|
+
return context.option.forwardDate
|
|
11
|
+
? new RegExp(PATTERN, "i")
|
|
12
|
+
: new RegExp(`(?:протягом|на протязі|протягом|упродовж|впродовж)\\s*${PATTERN}`, REGEX_PARTS.flags);
|
|
13
13
|
}
|
|
14
14
|
innerExtract(context, match) {
|
|
15
15
|
const timeUnits = parseTimeUnits(match[1]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UKTimeUnitWithinFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKTimeUnitWithinFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAEhH,MAAM,OAAO,GAAG,+CAA+C,kBAAkB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"UKTimeUnitWithinFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKTimeUnitWithinFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAEhH,MAAM,OAAO,GAAG,+CAA+C,kBAAkB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;AAEjH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,sCAAsC;IAC5F,mBAAmB;QACf,OAAO,WAAW,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,OAAuB;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW;YAC7B,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,MAAM,CAAC,yDAAyD,OAAO,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5G,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;CACJ"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
|
-
import {
|
|
4
|
-
export default class UKWeekdayParser extends
|
|
5
|
-
|
|
6
|
-
patternLeftBoundary(): string;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class UKWeekdayParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
8
7
|
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WEEKDAY_DICTIONARY } from "../constants.js";
|
|
2
2
|
import { matchAnyPattern } from "../../../utils/pattern.js";
|
|
3
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
4
3
|
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays.js";
|
|
5
|
-
|
|
6
|
-
`(?:в\\s*?)?` +
|
|
7
|
-
`(?:у\\s*?)?` +
|
|
8
|
-
`(?:(цей|минулого|минулий|попередній|попереднього|наступного|наступний|наступному)\\s*)?` +
|
|
9
|
-
`(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
|
|
10
|
-
`(?:\\s*(?:,|\\)|)))?` +
|
|
11
|
-
`(?:\\s*(на|у|в)\\s*(цьому|минулому|наступному)\\s*тижні)?` +
|
|
12
|
-
`${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
4
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
13
5
|
const PREFIX_GROUP = 1;
|
|
14
6
|
const WEEKDAY_GROUP = 2;
|
|
15
7
|
const POSTFIX_GROUP = 3;
|
|
16
|
-
export default class UKWeekdayParser extends
|
|
17
|
-
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
export default class UKWeekdayParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
9
|
+
innerPatternString(context) {
|
|
10
|
+
return (`(?:(?:,|\\(|()\\s*)?` +
|
|
11
|
+
`(?:в\\s*?)?` +
|
|
12
|
+
`(?:у\\s*?)?` +
|
|
13
|
+
`(?:(цей|минулого|минулий|попередній|попереднього|наступного|наступний|наступному)\\s*)?` +
|
|
14
|
+
`(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
|
|
15
|
+
`(?:\\s*(?:,|\\)|)))?` +
|
|
16
|
+
`(?:\\s*(на|у|в)\\s*(цьому|минулому|наступному)\\s*тижні)?`);
|
|
22
17
|
}
|
|
23
18
|
innerExtract(context, match) {
|
|
24
19
|
const dayOfWeek = match[WEEKDAY_GROUP].toLocaleLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UKWeekdayParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKWeekdayParser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"UKWeekdayParser.js","sourceRoot":"","sources":["../../../../../src/locales/uk/parsers/UKWeekdayParser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EAAE,2CAA2C,EAAE,MAAM,0CAA0C,CAAC;AAEvG,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,2CAA2C;IACpF,kBAAkB,CAAC,OAAuB;QACtC,OAAO,CACH,sBAAsB;YACtB,aAAa;YACb,aAAa;YACb,yFAAyF;YACzF,IAAI,eAAe,CAAC,kBAAkB,CAAC,GAAG;YAC1C,sBAAsB;YACtB,2DAA2D,CAC9D,CAAC;IACN,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC;QACrC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QAClC,YAAY,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAEhD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IACI,YAAY,IAAI,UAAU;YAC1B,YAAY,IAAI,SAAS;YACzB,YAAY,IAAI,YAAY;YAC5B,YAAY,IAAI,cAAc,EAChC;YACE,QAAQ,GAAG,MAAM,CAAC;SACrB;aAAM,IAAI,YAAY,IAAI,YAAY,IAAI,YAAY,IAAI,WAAW,EAAE;YACpE,QAAQ,GAAG,MAAM,CAAC;SACrB;aAAM,IAAI,YAAY,IAAI,KAAK,IAAI,YAAY,IAAI,OAAO,IAAI,YAAY,IAAI,OAAO,EAAE;YACpF,QAAQ,GAAG,MAAM,CAAC;SACrB;QAED,OAAO,gCAAgC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClF,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -12,20 +12,29 @@ export default class OverlapRemovalRefiner implements Refiner {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
const filteredResults = [];
|
|
15
|
-
|
|
16
15
|
let prevResult = results[0];
|
|
17
16
|
for (let i = 1; i < results.length; i++) {
|
|
18
17
|
const result = results[i];
|
|
18
|
+
if (result.index >= prevResult.index + prevResult.text.length) {
|
|
19
|
+
filteredResults.push(prevResult);
|
|
20
|
+
prevResult = result;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
19
23
|
|
|
20
24
|
// If overlap, compare the length and discard the shorter one
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
let kept = null;
|
|
26
|
+
let removed = null;
|
|
27
|
+
if (result.text.length > prevResult.text.length) {
|
|
28
|
+
kept = result;
|
|
29
|
+
removed = prevResult;
|
|
25
30
|
} else {
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
kept = prevResult;
|
|
32
|
+
removed = result;
|
|
28
33
|
}
|
|
34
|
+
context.debug(() => {
|
|
35
|
+
console.log(`${this.constructor.name} remove ${removed} by ${kept}`);
|
|
36
|
+
});
|
|
37
|
+
prevResult = kept;
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
// The last one
|
|
@@ -20,7 +20,9 @@ import ENRelativeDateFormatParser from "./parsers/ENRelativeDateFormatParser";
|
|
|
20
20
|
|
|
21
21
|
import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
|
|
22
22
|
import ENTimeUnitCasualRelativeFormatParser from "./parsers/ENTimeUnitCasualRelativeFormatParser";
|
|
23
|
-
import
|
|
23
|
+
import ENMergeRelativeAfterDateRefiner from "./refiners/ENMergeRelativeAfterDateRefiner";
|
|
24
|
+
import ENMergeRelativeFollowByDateRefiner from "./refiners/ENMergeRelativeFollowByDateRefiner";
|
|
25
|
+
import OverlapRemovalRefiner from "../../common/refiners/OverlapRemovalRefiner";
|
|
24
26
|
|
|
25
27
|
export default class ENDefaultConfiguration {
|
|
26
28
|
/**
|
|
@@ -29,11 +31,11 @@ export default class ENDefaultConfiguration {
|
|
|
29
31
|
*/
|
|
30
32
|
createCasualConfiguration(littleEndian = false): Configuration {
|
|
31
33
|
const option = this.createConfiguration(false, littleEndian);
|
|
32
|
-
option.parsers.
|
|
33
|
-
option.parsers.
|
|
34
|
-
option.parsers.
|
|
35
|
-
option.parsers.
|
|
36
|
-
option.parsers.
|
|
34
|
+
option.parsers.push(new ENCasualDateParser());
|
|
35
|
+
option.parsers.push(new ENCasualTimeParser());
|
|
36
|
+
option.parsers.push(new ENMonthNameParser());
|
|
37
|
+
option.parsers.push(new ENRelativeDateFormatParser());
|
|
38
|
+
option.parsers.push(new ENTimeUnitCasualRelativeFormatParser());
|
|
37
39
|
return option;
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -50,7 +52,7 @@ export default class ENDefaultConfiguration {
|
|
|
50
52
|
new SlashDateFormatParser(littleEndian),
|
|
51
53
|
new ENTimeUnitWithinFormatParser(strictMode),
|
|
52
54
|
new ENMonthNameLittleEndianParser(),
|
|
53
|
-
new ENMonthNameMiddleEndianParser(),
|
|
55
|
+
new ENMonthNameMiddleEndianParser(/*shouldSkipYearLikeDate=*/ littleEndian),
|
|
54
56
|
new ENWeekdayParser(),
|
|
55
57
|
new ENCasualYearMonthDayParser(),
|
|
56
58
|
new ENSlashMonthFormatParser(),
|
|
@@ -58,10 +60,15 @@ export default class ENDefaultConfiguration {
|
|
|
58
60
|
new ENTimeUnitAgoFormatParser(strictMode),
|
|
59
61
|
new ENTimeUnitLaterFormatParser(strictMode),
|
|
60
62
|
],
|
|
61
|
-
refiners: [new
|
|
63
|
+
refiners: [new ENMergeDateTimeRefiner()],
|
|
62
64
|
},
|
|
63
65
|
strictMode
|
|
64
66
|
);
|
|
67
|
+
// These relative-dates consideration should be done before other common refiners.
|
|
68
|
+
options.refiners.unshift(new ENMergeRelativeFollowByDateRefiner());
|
|
69
|
+
options.refiners.unshift(new ENMergeRelativeAfterDateRefiner());
|
|
70
|
+
options.refiners.unshift(new OverlapRemovalRefiner());
|
|
71
|
+
|
|
65
72
|
// Re-apply the date time refiner again after the timezone refinement and exclusion in common refiners.
|
|
66
73
|
options.refiners.push(new ENMergeDateTimeRefiner());
|
|
67
74
|
// Keep the date range refiner at the end (after all other refinements).
|
|
@@ -231,7 +231,7 @@ export function parseOrdinalNumberPattern(match: string): number {
|
|
|
231
231
|
|
|
232
232
|
//-----------------------------
|
|
233
233
|
|
|
234
|
-
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s{0,2}(?:BE|AD|BC|BCE|CE)|[1-2][0-9]{3}|[5-9][0-9])`;
|
|
234
|
+
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s{0,2}(?:BE|AD|BC|BCE|CE)|[1-2][0-9]{3}|[5-9][0-9]|2[0-5])`;
|
|
235
235
|
export function parseYear(match: string): number {
|
|
236
236
|
if (/BE/i.test(match)) {
|
|
237
237
|
// Buddhist Era
|
package/src/locales/en/index.ts
CHANGED
|
@@ -13,22 +13,22 @@ import ENDefaultConfiguration from "./configuration";
|
|
|
13
13
|
export { Chrono, Parser, Refiner, ParsingResult, ParsingComponents, ReferenceWithTimezone };
|
|
14
14
|
export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
export const configuration = new ENDefaultConfiguration();
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Chrono object configured for parsing *casual* English
|
|
20
20
|
*/
|
|
21
|
-
export const casual = new Chrono(
|
|
21
|
+
export const casual = new Chrono(configuration.createCasualConfiguration(false));
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Chrono object configured for parsing *strict* English
|
|
25
25
|
*/
|
|
26
|
-
export const strict = new Chrono(
|
|
26
|
+
export const strict = new Chrono(configuration.createConfiguration(true, false));
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Chrono object configured for parsing *UK-style* English
|
|
30
30
|
*/
|
|
31
|
-
export const GB = new Chrono(
|
|
31
|
+
export const GB = new Chrono(configuration.createCasualConfiguration(true));
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* A shortcut for en.casual.parse()
|
|
@@ -36,8 +36,16 @@ const YEAR_GROUP = 4;
|
|
|
36
36
|
* - January 12:00
|
|
37
37
|
* - January 12.44
|
|
38
38
|
* - January 1222344
|
|
39
|
+
* - January 21 (when shouldSkipYearLikeDate=true)
|
|
39
40
|
*/
|
|
40
41
|
export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking {
|
|
42
|
+
shouldSkipYearLikeDate: boolean;
|
|
43
|
+
|
|
44
|
+
constructor(shouldSkipYearLikeDate: boolean) {
|
|
45
|
+
super();
|
|
46
|
+
this.shouldSkipYearLikeDate = shouldSkipYearLikeDate;
|
|
47
|
+
}
|
|
48
|
+
|
|
41
49
|
innerPattern(): RegExp {
|
|
42
50
|
return PATTERN;
|
|
43
51
|
}
|
|
@@ -49,10 +57,18 @@ export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWor
|
|
|
49
57
|
return null;
|
|
50
58
|
}
|
|
51
59
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
60
|
+
// Skip the case where the day looks like a year (ex: January 21)
|
|
61
|
+
if (this.shouldSkipYearLikeDate) {
|
|
62
|
+
if (!match[DATE_TO_GROUP] && !match[YEAR_GROUP] && match[DATE_GROUP].match(/^2[0-5]$/)) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const components = context
|
|
67
|
+
.createParsingComponents({
|
|
68
|
+
day: day,
|
|
69
|
+
month: month,
|
|
70
|
+
})
|
|
71
|
+
.addTag("parser/ENMonthNameMiddleEndianParser");
|
|
56
72
|
|
|
57
73
|
if (match[YEAR_GROUP]) {
|
|
58
74
|
const year = parseYear(match[YEAR_GROUP]);
|
|
@@ -61,7 +77,6 @@ export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWor
|
|
|
61
77
|
const year = findYearClosestToRef(context.refDate, day, month);
|
|
62
78
|
components.imply("year", year);
|
|
63
79
|
}
|
|
64
|
-
|
|
65
80
|
if (!match[DATE_TO_GROUP]) {
|
|
66
81
|
return components;
|
|
67
82
|
}
|
|
@@ -45,6 +45,7 @@ export default class ENMonthNameParser extends AbstractParserWithWordBoundaryChe
|
|
|
45
45
|
match.index + match[0].length
|
|
46
46
|
);
|
|
47
47
|
result.start.imply("day", 1);
|
|
48
|
+
result.start.addTag("parser/ENMonthNameParser");
|
|
48
49
|
|
|
49
50
|
const month = MONTH_DICTIONARY[monthName];
|
|
50
51
|
result.start.assign("month", month);
|
|
@@ -34,6 +34,11 @@ export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWord
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
|
|
37
|
+
// Exclude "for the unit" phases, e.g. "for the year"
|
|
38
|
+
if (match[0].match(/^for\s*the\s*\w+/)) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
const timeUnits = parseTimeUnits(match[1]);
|
|
38
43
|
return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
|
|
39
44
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MergingRefiner } from "../../../common/abstractRefiners";
|
|
2
|
+
import { ParsingComponents, ParsingResult, ReferenceWithTimezone } from "../../../results";
|
|
3
|
+
import { parseTimeUnits } from "../constants";
|
|
4
|
+
import { reverseTimeUnits } from "../../../utils/timeunits";
|
|
5
|
+
|
|
6
|
+
function IsPositiveFollowingReference(result: ParsingResult): boolean {
|
|
7
|
+
return result.text.match(/^[+-]/i) != null;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function IsNegativeFollowingReference(result: ParsingResult): boolean {
|
|
11
|
+
return result.text.match(/^-/i) != null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Merges a relative data/time that comes after an absolute date.
|
|
16
|
+
* - [2020-02-13] [+2 weeks]
|
|
17
|
+
* - [next tuesday] [+10 days]
|
|
18
|
+
*/
|
|
19
|
+
export default class ENMergeRelativeAfterDateRefiner extends MergingRefiner {
|
|
20
|
+
shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): boolean {
|
|
21
|
+
if (!textBetween.match(/^\s*$/i)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return IsPositiveFollowingReference(nextResult) || IsNegativeFollowingReference(nextResult);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult, context): ParsingResult {
|
|
29
|
+
let timeUnits = parseTimeUnits(nextResult.text);
|
|
30
|
+
if (IsNegativeFollowingReference(nextResult)) {
|
|
31
|
+
timeUnits = reverseTimeUnits(timeUnits);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const components = ParsingComponents.createRelativeFromReference(
|
|
35
|
+
new ReferenceWithTimezone(currentResult.start.date()),
|
|
36
|
+
timeUnits
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
return new ParsingResult(
|
|
40
|
+
currentResult.reference,
|
|
41
|
+
currentResult.index,
|
|
42
|
+
`${currentResult.text}${textBetween}${nextResult.text}`,
|
|
43
|
+
components
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -12,11 +12,11 @@ function hasImpliedLaterReferenceDate(result: ParsingResult): boolean {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* Merges
|
|
16
|
-
* - 2 weeks before 2020-02-13
|
|
17
|
-
* - 2 days after next Friday
|
|
15
|
+
* Merges a relative data/time that follow by an absolute date.
|
|
16
|
+
* - [2 weeks before] [2020-02-13]
|
|
17
|
+
* - [2 days after] [next Friday]
|
|
18
18
|
*/
|
|
19
|
-
export default class
|
|
19
|
+
export default class ENMergeRelativeFollowByDateRefiner extends MergingRefiner {
|
|
20
20
|
patternBetween(): RegExp {
|
|
21
21
|
return /^\s*$/i;
|
|
22
22
|
}
|
|
@@ -6,7 +6,7 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/
|
|
|
6
6
|
import { matchAnyPattern } from "../../../utils/pattern";
|
|
7
7
|
|
|
8
8
|
const PATTERN = new RegExp(
|
|
9
|
-
`(dit|deze|
|
|
9
|
+
`(dit|deze|(?:aan)?komend|volgend|afgelopen|vorig)e?\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})(?=\\s*)` +
|
|
10
10
|
"(?=\\W|$)",
|
|
11
11
|
"i"
|
|
12
12
|
);
|
|
@@ -24,13 +24,13 @@ export default class NLRelativeDateFormatParser extends AbstractParserWithWordBo
|
|
|
24
24
|
const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase();
|
|
25
25
|
const timeunit = TIME_UNIT_DICTIONARY[unitWord];
|
|
26
26
|
|
|
27
|
-
if (modifier == "volgend" || modifier == "
|
|
27
|
+
if (modifier == "volgend" || modifier == "komend" || modifier == "aankomend") {
|
|
28
28
|
const timeUnits = {};
|
|
29
29
|
timeUnits[timeunit] = 1;
|
|
30
30
|
return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (modifier == "afgelopen" || modifier == "
|
|
33
|
+
if (modifier == "afgelopen" || modifier == "vorig") {
|
|
34
34
|
const timeUnits = {};
|
|
35
35
|
timeUnits[timeunit] = -1;
|
|
36
36
|
return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
|
|
@@ -4,7 +4,13 @@ import { ParsingComponents } from "../../../results";
|
|
|
4
4
|
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
5
5
|
import { reverseTimeUnits } from "../../../utils/timeunits";
|
|
6
6
|
|
|
7
|
-
const PATTERN = new RegExp(
|
|
7
|
+
const PATTERN = new RegExp(
|
|
8
|
+
`(dit|deze|vorig|afgelopen|(?:aan)?komend|over|\\+|-)e?\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`,
|
|
9
|
+
"i"
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
const PREFIX_WORD_GROUP = 1;
|
|
13
|
+
const TIME_UNIT_WORD_GROUP = 2;
|
|
8
14
|
|
|
9
15
|
export default class NLTimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
10
16
|
innerPattern(): RegExp {
|
|
@@ -12,10 +18,10 @@ export default class NLTimeUnitCasualRelativeFormatParser extends AbstractParser
|
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
|
|
15
|
-
const prefix = match[
|
|
16
|
-
let timeUnits = parseTimeUnits(match[
|
|
21
|
+
const prefix = match[PREFIX_WORD_GROUP].toLowerCase();
|
|
22
|
+
let timeUnits = parseTimeUnits(match[TIME_UNIT_WORD_GROUP]);
|
|
17
23
|
switch (prefix) {
|
|
18
|
-
case "
|
|
24
|
+
case "vorig":
|
|
19
25
|
case "afgelopen":
|
|
20
26
|
case "-":
|
|
21
27
|
timeUnits = reverseTimeUnits(timeUnits);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// noinspection DuplicatedCode
|
|
2
|
+
|
|
3
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
4
|
+
import { REGEX_PARTS } from "../constants";
|
|
5
|
+
import { ParsingContext } from "../../../chrono";
|
|
6
|
+
|
|
7
|
+
export abstract class AbstractParserWithLeftBoundaryChecking extends AbstractParserWithWordBoundaryChecking {
|
|
8
|
+
abstract innerPatternString(context: ParsingContext): string;
|
|
9
|
+
|
|
10
|
+
patternLeftBoundary(): string {
|
|
11
|
+
return REGEX_PARTS.leftBoundary;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
innerPattern(context: ParsingContext): RegExp {
|
|
15
|
+
return new RegExp(this.innerPatternString(context), REGEX_PARTS.flags);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
innerPatternHasChange(context: ParsingContext, currentInnerPattern: RegExp): boolean {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export abstract class AbstractParserWithLeftRightBoundaryChecking extends AbstractParserWithLeftBoundaryChecking {
|
|
24
|
+
innerPattern(context: ParsingContext): RegExp {
|
|
25
|
+
return new RegExp(`${this.innerPatternString(context)}${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono";
|
|
2
2
|
import { ParsingComponents, ParsingResult } from "../../../results";
|
|
3
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
4
3
|
import * as references from "../../../common/casualReferences";
|
|
5
|
-
import {
|
|
4
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking";
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
export default class UKCasualDateParser extends AbstractParserWithWordBoundaryChecking {
|
|
13
|
-
patternLeftBoundary(): string {
|
|
14
|
-
return REGEX_PARTS.leftBoundary;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
innerPattern(context: ParsingContext): RegExp {
|
|
18
|
-
return PATTERN;
|
|
6
|
+
export default class UKCasualDateParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
7
|
+
innerPatternString(context: ParsingContext): string {
|
|
8
|
+
return `(?:з|із|від)?\\s*(сьогодні|вчора|завтра|післязавтра|післяпіслязавтра|позапозавчора|позавчора)`;
|
|
19
9
|
}
|
|
20
10
|
|
|
21
11
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult {
|
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono";
|
|
2
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
2
|
import * as references from "../../../common/casualReferences";
|
|
4
3
|
import { assignSimilarDate } from "../../../utils/dayjs";
|
|
5
4
|
import dayjs from "dayjs";
|
|
6
|
-
import {
|
|
5
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking";
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
REGEX_PARTS.flags
|
|
12
|
-
);
|
|
13
|
-
export default class UKCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
|
|
14
|
-
patternLeftBoundary(): string {
|
|
15
|
-
return REGEX_PARTS.leftBoundary;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
innerPattern() {
|
|
19
|
-
return PATTERN;
|
|
7
|
+
export default class UKCasualTimeParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
8
|
+
innerPatternString(context: ParsingContext): string {
|
|
9
|
+
return `(зараз|минулого\\s*вечора|минулої\\s*ночі|наступної\\s*ночі|сьогодні\\s*вночі|цієї\\s*ночі|цього ранку|вранці|ранку|зранку|опівдні|ввечері|вечора|опівночі|вночі)`;
|
|
20
10
|
}
|
|
21
11
|
|
|
22
12
|
innerExtract(context: ParsingContext, match: RegExpMatchArray) {
|
|
@@ -1,41 +1,32 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono";
|
|
2
2
|
import { ParsingResult } from "../../../results";
|
|
3
3
|
import { findYearClosestToRef } from "../../../calculation/years";
|
|
4
|
-
import { MONTH_DICTIONARY
|
|
4
|
+
import { MONTH_DICTIONARY } from "../constants";
|
|
5
5
|
import { YEAR_PATTERN, parseYearPattern } from "../constants";
|
|
6
6
|
import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants";
|
|
7
7
|
import { matchAnyPattern } from "../../../utils/pattern";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
// prettier-ignore
|
|
11
|
-
const PATTERN = new RegExp(
|
|
12
|
-
`(?:з|із)?\\s*(${ORDINAL_NUMBER_PATTERN})` +
|
|
13
|
-
`(?:` +
|
|
14
|
-
`\\s{0,3}(?:по|-|–|до)?\\s{0,3}` +
|
|
15
|
-
`(${ORDINAL_NUMBER_PATTERN})` +
|
|
16
|
-
`)?` +
|
|
17
|
-
`(?:-|\\/|\\s{0,3}(?:of)?\\s{0,3})` +
|
|
18
|
-
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
19
|
-
`(?:` +
|
|
20
|
-
`(?:-|\\/|,?\\s{0,3})` +
|
|
21
|
-
`(${YEAR_PATTERN}(?![^\\s]\\d))` +
|
|
22
|
-
`)?` +
|
|
23
|
-
`${REGEX_PARTS.rightBoundary}`,
|
|
24
|
-
REGEX_PARTS.flags
|
|
25
|
-
);
|
|
8
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking";
|
|
26
9
|
|
|
27
10
|
const DATE_GROUP = 1;
|
|
28
11
|
const DATE_TO_GROUP = 2;
|
|
29
12
|
const MONTH_NAME_GROUP = 3;
|
|
30
13
|
const YEAR_GROUP = 4;
|
|
31
14
|
|
|
32
|
-
export default class UKMonthNameLittleEndianParser extends
|
|
33
|
-
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
15
|
+
export default class UKMonthNameLittleEndianParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
16
|
+
innerPatternString(context: ParsingContext): string {
|
|
17
|
+
return (
|
|
18
|
+
`(?:з|із)?\\s*(${ORDINAL_NUMBER_PATTERN})` +
|
|
19
|
+
`(?:` +
|
|
20
|
+
`\\s{0,3}(?:по|-|–|до)?\\s{0,3}` +
|
|
21
|
+
`(${ORDINAL_NUMBER_PATTERN})` +
|
|
22
|
+
`)?` +
|
|
23
|
+
`(?:-|\\/|\\s{0,3}(?:of)?\\s{0,3})` +
|
|
24
|
+
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
25
|
+
`(?:` +
|
|
26
|
+
`(?:-|\\/|,?\\s{0,3})` +
|
|
27
|
+
`(${YEAR_PATTERN}(?![^\\s]\\d))` +
|
|
28
|
+
`)?`
|
|
29
|
+
);
|
|
39
30
|
}
|
|
40
31
|
|
|
41
32
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import { FULL_MONTH_NAME_DICTIONARY, MONTH_DICTIONARY
|
|
1
|
+
import { FULL_MONTH_NAME_DICTIONARY, MONTH_DICTIONARY } from "../constants";
|
|
2
2
|
import { ParsingContext } from "../../../chrono";
|
|
3
3
|
import { findYearClosestToRef } from "../../../calculation/years";
|
|
4
4
|
import { matchAnyPattern } from "../../../utils/pattern";
|
|
5
5
|
import { YEAR_PATTERN, parseYearPattern } from "../constants";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
const PATTERN = new RegExp(
|
|
9
|
-
`((?:в|у)\\s*)?` +
|
|
10
|
-
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
11
|
-
`\\s*` +
|
|
12
|
-
`(?:` +
|
|
13
|
-
`[,-]?\\s*(${YEAR_PATTERN})?` +
|
|
14
|
-
`)?` +
|
|
15
|
-
`(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)`,
|
|
16
|
-
REGEX_PARTS.flags
|
|
17
|
-
);
|
|
6
|
+
import { AbstractParserWithLeftBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking";
|
|
18
7
|
|
|
19
8
|
const MONTH_NAME_GROUP = 2;
|
|
20
9
|
const YEAR_GROUP = 3;
|
|
@@ -25,13 +14,17 @@ const YEAR_GROUP = 3;
|
|
|
25
14
|
* - Січень 2012
|
|
26
15
|
* - Січень
|
|
27
16
|
*/
|
|
28
|
-
export default class UkMonthNameParser extends
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
export default class UkMonthNameParser extends AbstractParserWithLeftBoundaryChecking {
|
|
18
|
+
innerPatternString(context: ParsingContext): string {
|
|
19
|
+
return (
|
|
20
|
+
`((?:в|у)\\s*)?` +
|
|
21
|
+
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
22
|
+
`\\s*` +
|
|
23
|
+
`(?:` +
|
|
24
|
+
`[,-]?\\s*(${YEAR_PATTERN})?` +
|
|
25
|
+
`)?` +
|
|
26
|
+
`(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)`
|
|
27
|
+
);
|
|
35
28
|
}
|
|
36
29
|
|
|
37
30
|
innerExtract(context: ParsingContext, match: RegExpMatchArray) {
|