chrono-node 2.7.0 → 2.7.1
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/parsers/AbstractParserWithWordBoundary.d.ts +2 -1
- package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.js +9 -5
- package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
- package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js +24 -0
- package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
- package/dist/cjs/locales/ru/parsers/RUCasualDateParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUCasualDateParser.js +4 -9
- package/dist/cjs/locales/ru/parsers/RUCasualDateParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.js +4 -10
- package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.js +14 -19
- package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUMonthNameParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUMonthNameParser.js +10 -14
- package/dist/cjs/locales/ru/parsers/RUMonthNameParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.js +4 -8
- package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +4 -8
- package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +4 -8
- package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +3 -0
- package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +6 -3
- package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUWeekdayParser.d.ts +3 -4
- package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js +9 -14
- package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
- package/dist/esm/common/parsers/AbstractParserWithWordBoundary.d.ts +2 -1
- package/dist/esm/common/parsers/AbstractParserWithWordBoundary.js +9 -5
- package/dist/esm/common/parsers/AbstractParserWithWordBoundary.js.map +1 -1
- package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
- package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js +19 -0
- package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
- package/dist/esm/locales/ru/parsers/RUCasualDateParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUCasualDateParser.js +4 -9
- package/dist/esm/locales/ru/parsers/RUCasualDateParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUCasualTimeParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUCasualTimeParser.js +4 -10
- package/dist/esm/locales/ru/parsers/RUCasualTimeParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.js +15 -20
- package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUMonthNameParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUMonthNameParser.js +11 -15
- package/dist/esm/locales/ru/parsers/RUMonthNameParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.js +5 -9
- package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +5 -9
- package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +5 -9
- package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +3 -0
- package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +6 -3
- package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUWeekdayParser.d.ts +3 -4
- package/dist/esm/locales/ru/parsers/RUWeekdayParser.js +10 -15
- package/dist/esm/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
- package/package.json +1 -1
- package/src/common/parsers/AbstractParserWithWordBoundary.ts +17 -9
- package/src/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.ts +25 -0
- package/src/locales/ru/parsers/RUCasualDateParser.ts +4 -14
- package/src/locales/ru/parsers/RUCasualTimeParser.ts +4 -14
- package/src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts +16 -26
- package/src/locales/ru/parsers/RUMonthNameParser.ts +13 -20
- package/src/locales/ru/parsers/RURelativeDateFormatParser.ts +6 -14
- package/src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts +5 -11
- package/src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts +4 -13
- package/src/locales/ru/parsers/RUTimeUnitWithinFormatParser.ts +10 -4
- package/src/locales/ru/parsers/RUWeekdayParser.ts +12 -20
- package/test/en/en.test.ts +3 -3
- package/test/result.test.ts +29 -0
- package/test/ru/ru_relative.test.ts +44 -11
- package/test/ru/ru_time_units_casual_relative.test.ts +96 -30
- package/test/uk/uk_relative.test.ts +44 -11
- package/test/uk/uk_time_units_casual_relative.test.ts +40 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractParserWithWordBoundary.js","sourceRoot":"","sources":["../../../../src/common/parsers/AbstractParserWithWordBoundary.ts"],"names":[],"mappings":"AAOA,MAAM,OAAgB,sCAAsC;IAA5D;
|
|
1
|
+
{"version":3,"file":"AbstractParserWithWordBoundary.js","sourceRoot":"","sources":["../../../../src/common/parsers/AbstractParserWithWordBoundary.ts"],"names":[],"mappings":"AAOA,MAAM,OAAgB,sCAAsC;IAA5D;QAgBY,uBAAkB,GAAY,IAAI,CAAC;QACnC,kBAAa,GAAY,IAAI,CAAC;IA0B1C,CAAC;IAnCG,qBAAqB,CAAC,OAAuB,EAAE,mBAA2B;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,mBAAmB,CAAC;IAC9D,CAAC;IAED,mBAAmB;QACf,OAAO,SAAS,CAAC;IACrB,CAAC;IAKD,OAAO,CAAC,OAAuB;QAC3B,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBAC/D,OAAO,IAAI,CAAC,aAAa,CAAC;aAC7B;SACJ;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAC3B,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAChE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAChC,CAAC;QACF,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,OAAuB,EAAE,KAAuB;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3B;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;CACJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
2
|
+
import { ParsingContext } from "../../../chrono.js";
|
|
3
|
+
export declare abstract class AbstractParserWithLeftBoundaryChecking extends AbstractParserWithWordBoundaryChecking {
|
|
4
|
+
abstract innerPatternString(context: ParsingContext): string;
|
|
5
|
+
patternLeftBoundary(): string;
|
|
6
|
+
innerPattern(context: ParsingContext): RegExp;
|
|
7
|
+
innerPatternHasChange(context: ParsingContext, currentInnerPattern: RegExp): boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class AbstractParserWithLeftRightBoundaryChecking extends AbstractParserWithLeftBoundaryChecking {
|
|
10
|
+
innerPattern(context: ParsingContext): RegExp;
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
2
|
+
import { REGEX_PARTS } from "../constants.js";
|
|
3
|
+
export class AbstractParserWithLeftBoundaryChecking extends AbstractParserWithWordBoundaryChecking {
|
|
4
|
+
patternLeftBoundary() {
|
|
5
|
+
return REGEX_PARTS.leftBoundary;
|
|
6
|
+
}
|
|
7
|
+
innerPattern(context) {
|
|
8
|
+
return new RegExp(this.innerPatternString(context), REGEX_PARTS.flags);
|
|
9
|
+
}
|
|
10
|
+
innerPatternHasChange(context, currentInnerPattern) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class AbstractParserWithLeftRightBoundaryChecking extends AbstractParserWithLeftBoundaryChecking {
|
|
15
|
+
innerPattern(context) {
|
|
16
|
+
return new RegExp(`${this.innerPatternString(context)}${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AbstractParserWithWordBoundaryChecking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractParserWithWordBoundaryChecking.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAChH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,OAAgB,sCAAuC,SAAQ,sCAAsC;IAGvG,mBAAmB;QACf,OAAO,WAAW,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,OAAuB;QAChC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,qBAAqB,CAAC,OAAuB,EAAE,mBAA2B;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAED,MAAM,OAAgB,2CAA4C,SAAQ,sCAAsC;IAC5G,YAAY,CAAC,OAAuB;QAChC,OAAO,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,aAAa,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5G,CAAC;CACJ"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
2
|
import { ParsingComponents, ParsingResult } from "../../../results.js";
|
|
3
|
-
import {
|
|
4
|
-
export default class RUCasualDateParser extends
|
|
5
|
-
|
|
6
|
-
innerPattern(context: ParsingContext): RegExp;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RUCasualDateParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult;
|
|
8
7
|
}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
2
1
|
import * as references from "../../../common/casualReferences.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return REGEX_PARTS.leftBoundary;
|
|
8
|
-
}
|
|
9
|
-
innerPattern(context) {
|
|
10
|
-
return PATTERN;
|
|
2
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
3
|
+
export default class RUCasualDateParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
4
|
+
innerPatternString(context) {
|
|
5
|
+
return `(?:с|со)?\\s*(сегодня|вчера|завтра|послезавтра|послепослезавтра|позапозавчера|позавчера)`;
|
|
11
6
|
}
|
|
12
7
|
innerExtract(context, match) {
|
|
13
8
|
const lowerText = match[1].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUCasualDateParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUCasualDateParser.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"RUCasualDateParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUCasualDateParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,2CAA2C,EAAE,MAAM,0CAA0C,CAAC;AAEvG,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,2CAA2C;IACvF,kBAAkB,CAAC,OAAuB;QACtC,OAAO,0FAA0F,CAAC;IACtG,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAEpD,QAAQ,SAAS,EAAE;YACf,KAAK,SAAS;gBACV,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE/C,KAAK,OAAO;gBACR,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEnD,KAAK,QAAQ;gBACT,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElD,KAAK,aAAa;gBACd,OAAO,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAExD,KAAK,kBAAkB;gBACnB,OAAO,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAExD,KAAK,WAAW;gBACZ,OAAO,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEzD,KAAK,eAAe;gBAChB,OAAO,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC5D;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
|
-
import {
|
|
3
|
-
export default class RUCasualTimeParser extends
|
|
4
|
-
|
|
5
|
-
innerPattern(): RegExp;
|
|
2
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
3
|
+
export default class RUCasualTimeParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
4
|
+
innerPatternString(context: ParsingContext): string;
|
|
6
5
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../index.js").ParsingComponents;
|
|
7
6
|
}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
2
1
|
import * as references from "../../../common/casualReferences.js";
|
|
3
2
|
import { assignSimilarDate } from "../../../utils/dayjs.js";
|
|
4
3
|
import dayjs from "dayjs";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
patternLeftBoundary() {
|
|
10
|
-
return REGEX_PARTS.leftBoundary;
|
|
11
|
-
}
|
|
12
|
-
innerPattern() {
|
|
13
|
-
return PATTERN;
|
|
4
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
5
|
+
export default class RUCasualTimeParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
6
|
+
innerPatternString(context) {
|
|
7
|
+
return `(сейчас|прошлым\\s*вечером|прошлой\\s*ночью|следующей\\s*ночью|сегодня\\s*ночью|этой\\s*ночью|ночью|этим утром|утром|утра|в\\s*полдень|вечером|вечера|в\\s*полночь)`;
|
|
14
8
|
}
|
|
15
9
|
innerExtract(context, match) {
|
|
16
10
|
let targetDate = dayjs(context.refDate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUCasualTimeParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUCasualTimeParser.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"RUCasualTimeParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUCasualTimeParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,2CAA2C,EAAE,MAAM,0CAA0C,CAAC;AAEvG,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,2CAA2C;IACvF,kBAAkB,CAAC,OAAuB;QACtC,OAAO,qKAAqK,CAAC;IACjL,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAEpD,IAAI,SAAS,KAAK,QAAQ,EAAE;YACxB,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC5C;QACD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE;YACnD,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAChD;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3D,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAChD;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YAChC,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC7C;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;YACpC,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAClD;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;YACtC,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACzD;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;YACtC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9C,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC9B;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC/D,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACjD;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
2
|
import { ParsingResult } from "../../../results.js";
|
|
3
|
-
import {
|
|
4
|
-
export default class RUMonthNameLittleEndianParser extends
|
|
5
|
-
|
|
6
|
-
innerPattern(): RegExp;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RUMonthNameLittleEndianParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult;
|
|
8
7
|
}
|
|
@@ -1,31 +1,26 @@
|
|
|
1
1
|
import { findYearClosestToRef } from "../../../calculation/years.js";
|
|
2
|
-
import { MONTH_DICTIONARY
|
|
2
|
+
import { MONTH_DICTIONARY } from "../constants.js";
|
|
3
3
|
import { YEAR_PATTERN, parseYear } from "../constants.js";
|
|
4
4
|
import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants.js";
|
|
5
5
|
import { matchAnyPattern } from "../../../utils/pattern.js";
|
|
6
|
-
import {
|
|
7
|
-
const PATTERN = new RegExp(`(?:с)?\\s*(${ORDINAL_NUMBER_PATTERN})` +
|
|
8
|
-
`(?:` +
|
|
9
|
-
`\\s{0,3}(?:по|-|–|до)?\\s{0,3}` +
|
|
10
|
-
`(${ORDINAL_NUMBER_PATTERN})` +
|
|
11
|
-
`)?` +
|
|
12
|
-
`(?:-|\\/|\\s{0,3}(?:of)?\\s{0,3})` +
|
|
13
|
-
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
14
|
-
`(?:` +
|
|
15
|
-
`(?:-|\\/|,?\\s{0,3})` +
|
|
16
|
-
`(${YEAR_PATTERN}(?![^\\s]\\d))` +
|
|
17
|
-
`)?` +
|
|
18
|
-
`${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
6
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
19
7
|
const DATE_GROUP = 1;
|
|
20
8
|
const DATE_TO_GROUP = 2;
|
|
21
9
|
const MONTH_NAME_GROUP = 3;
|
|
22
10
|
const YEAR_GROUP = 4;
|
|
23
|
-
export default class RUMonthNameLittleEndianParser extends
|
|
24
|
-
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
export default class RUMonthNameLittleEndianParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
12
|
+
innerPatternString(context) {
|
|
13
|
+
return `(?:с)?\\s*(${ORDINAL_NUMBER_PATTERN})` +
|
|
14
|
+
`(?:` +
|
|
15
|
+
`\\s{0,3}(?:по|-|–|до)?\\s{0,3}` +
|
|
16
|
+
`(${ORDINAL_NUMBER_PATTERN})` +
|
|
17
|
+
`)?` +
|
|
18
|
+
`(?:-|\\/|\\s{0,3}(?:of)?\\s{0,3})` +
|
|
19
|
+
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
20
|
+
`(?:` +
|
|
21
|
+
`(?:-|\\/|,?\\s{0,3})` +
|
|
22
|
+
`(${YEAR_PATTERN}(?![^\\s]\\d))` +
|
|
23
|
+
`)?`;
|
|
29
24
|
}
|
|
30
25
|
innerExtract(context, match) {
|
|
31
26
|
const result = context.createParsingResult(match.index, match[0]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUMonthNameLittleEndianParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"RUMonthNameLittleEndianParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,2CAA2C,EAAE,MAAM,0CAA0C,CAAC;AAEvG,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,2CAA2C;IAClG,kBAAkB,CAAC,OAAuB;QAEtC,OAAO,cAAc,sBAAsB,GAAG;YAC1C,KAAK;YACD,gCAAgC;YAChC,IAAI,sBAAsB,GAAG;YACjC,IAAI;YACA,mCAAmC;YACnC,IAAI,eAAe,CAAC,gBAAgB,CAAC,GAAG;YAC5C,KAAK;YACD,sBAAsB;YACtB,IAAI,YAAY,gBAAgB;YACpC,IAAI,CAAC;IACb,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,IAAI,GAAG,GAAG,EAAE,EAAE;YAEV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YACrD,OAAO,IAAI,CAAC;SACf;QAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;YACnB,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;SAC3C;aAAM;YACH,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACpC;QAED,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YAEhE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACrC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
|
-
import {
|
|
3
|
-
export default class RUMonthNameParser extends
|
|
4
|
-
|
|
5
|
-
innerPattern(): RegExp;
|
|
2
|
+
import { AbstractParserWithLeftBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
3
|
+
export default class RUMonthNameParser extends AbstractParserWithLeftBoundaryChecking {
|
|
4
|
+
innerPatternString(context: ParsingContext): string;
|
|
6
5
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../index.js").ParsingResult;
|
|
7
6
|
}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
import { FULL_MONTH_NAME_DICTIONARY, MONTH_DICTIONARY
|
|
1
|
+
import { FULL_MONTH_NAME_DICTIONARY, MONTH_DICTIONARY } from "../constants.js";
|
|
2
2
|
import { findYearClosestToRef } from "../../../calculation/years.js";
|
|
3
3
|
import { matchAnyPattern } from "../../../utils/pattern.js";
|
|
4
4
|
import { YEAR_PATTERN, parseYear } from "../constants.js";
|
|
5
|
-
import {
|
|
6
|
-
const PATTERN = new RegExp(`((?:в)\\s*)?` +
|
|
7
|
-
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
8
|
-
`\\s*` +
|
|
9
|
-
`(?:` +
|
|
10
|
-
`[,-]?\\s*(${YEAR_PATTERN})?` +
|
|
11
|
-
`)?` +
|
|
12
|
-
`(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)`, REGEX_PARTS.flags);
|
|
5
|
+
import { AbstractParserWithLeftBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
13
6
|
const MONTH_NAME_GROUP = 2;
|
|
14
7
|
const YEAR_GROUP = 3;
|
|
15
|
-
export default class RUMonthNameParser extends
|
|
16
|
-
|
|
17
|
-
return
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
export default class RUMonthNameParser extends AbstractParserWithLeftBoundaryChecking {
|
|
9
|
+
innerPatternString(context) {
|
|
10
|
+
return (`((?:в)\\s*)?` +
|
|
11
|
+
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
12
|
+
`\\s*` +
|
|
13
|
+
`(?:` +
|
|
14
|
+
`[,-]?\\s*(${YEAR_PATTERN})?` +
|
|
15
|
+
`)?` +
|
|
16
|
+
`(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)`);
|
|
21
17
|
}
|
|
22
18
|
innerExtract(context, match) {
|
|
23
19
|
const monthName = match[MONTH_NAME_GROUP].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUMonthNameParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUMonthNameParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"RUMonthNameParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUMonthNameParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAElG,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,CAAC,CAAC;AAQrB,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,sCAAsC;IACjF,kBAAkB,CAAC,OAAuB;QACtC,OAAO,CACH,cAAc;YACd,IAAI,eAAe,CAAC,gBAAgB,CAAC,GAAG;YACxC,MAAM;YACN,KAAK;YACL,aAAa,YAAY,IAAI;YAC7B,IAAI;YACJ,kCAAkC,CACrC,CAAC;IACN,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QAGxD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;SACf;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEpC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;YACnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACrC;aAAM;YACH,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACpC;QAED,OAAO,MAAM,CAAC;IAClB,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 RURelativeDateFormatParser extends
|
|
5
|
-
|
|
6
|
-
innerPattern(): RegExp;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RURelativeDateFormatParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
8
7
|
}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TIME_UNIT_DICTIONARY } from "../constants.js";
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
3
|
import dayjs from "dayjs";
|
|
4
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
5
4
|
import { matchAnyPattern } from "../../../utils/pattern.js";
|
|
6
|
-
|
|
5
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
7
6
|
const MODIFIER_WORD_GROUP = 1;
|
|
8
7
|
const RELATIVE_WORD_GROUP = 2;
|
|
9
|
-
export default class RURelativeDateFormatParser extends
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
}
|
|
13
|
-
innerPattern() {
|
|
14
|
-
return PATTERN;
|
|
8
|
+
export default class RURelativeDateFormatParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
9
|
+
innerPatternString(context) {
|
|
10
|
+
return `(в прошлом|на прошлой|на следующей|в следующем|на этой|в этом)\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})`;
|
|
15
11
|
}
|
|
16
12
|
innerExtract(context, match) {
|
|
17
13
|
const modifier = match[MODIFIER_WORD_GROUP].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RURelativeDateFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RURelativeDateFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RURelativeDateFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RURelativeDateFormatParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ParsingContext } from "../../../chrono.js";
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
|
-
import {
|
|
4
|
-
export default class RUTimeUnitAgoFormatParser extends
|
|
5
|
-
|
|
6
|
-
innerPattern(): RegExp;
|
|
3
|
+
import { AbstractParserWithLeftBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RUTimeUnitAgoFormatParser extends AbstractParserWithLeftBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
8
7
|
}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { parseTimeUnits,
|
|
1
|
+
import { parseTimeUnits, TIME_UNITS_PATTERN } from "../constants.js";
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
4
3
|
import { reverseTimeUnits } from "../../../utils/timeunits.js";
|
|
5
|
-
|
|
6
|
-
export default class RUTimeUnitAgoFormatParser extends
|
|
7
|
-
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
innerPattern() {
|
|
11
|
-
return PATTERN;
|
|
4
|
+
import { AbstractParserWithLeftBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
5
|
+
export default class RUTimeUnitAgoFormatParser extends AbstractParserWithLeftBoundaryChecking {
|
|
6
|
+
innerPatternString(context) {
|
|
7
|
+
return `(${TIME_UNITS_PATTERN})\\s{0,5}назад(?=(?:\\W|$))`;
|
|
12
8
|
}
|
|
13
9
|
innerExtract(context, match) {
|
|
14
10
|
const timeUnits = parseTimeUnits(match[1]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUTimeUnitAgoFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"RUTimeUnitAgoFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAElG,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,sCAAsC;IACzF,kBAAkB,CAAC,OAAuB;QACtC,OAAO,IAAI,kBAAkB,6BAA6B,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC7F,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 RUTimeUnitCasualRelativeFormatParser extends
|
|
5
|
-
|
|
6
|
-
innerPattern(): RegExp;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RUTimeUnitCasualRelativeFormatParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
8
7
|
}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { TIME_UNITS_PATTERN, parseTimeUnits
|
|
1
|
+
import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants.js";
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
|
-
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
4
3
|
import { reverseTimeUnits } from "../../../utils/timeunits.js";
|
|
5
|
-
|
|
6
|
-
export default class RUTimeUnitCasualRelativeFormatParser extends
|
|
7
|
-
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
innerPattern() {
|
|
11
|
-
return PATTERN;
|
|
4
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
5
|
+
export default class RUTimeUnitCasualRelativeFormatParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
6
|
+
innerPatternString(context) {
|
|
7
|
+
return `(эти|последние|прошлые|следующие|после|спустя|через|\\+|-)\\s*(${TIME_UNITS_PATTERN})`;
|
|
12
8
|
}
|
|
13
9
|
innerExtract(context, match) {
|
|
14
10
|
const prefix = match[1].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUTimeUnitCasualRelativeFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"RUTimeUnitCasualRelativeFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.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,kEAAkE,kBAAkB,GAAG,CAAC;IACnG,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,WAAW,CAAC;YACjB,KAAK,SAAS,CAAC;YACf,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,6 +2,9 @@ import { ParsingContext } from "../../../chrono.js";
|
|
|
2
2
|
import { ParsingComponents } from "../../../results.js";
|
|
3
3
|
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
|
|
4
4
|
export default class RUTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
5
|
+
private readonly patternWithPrefix;
|
|
6
|
+
private readonly patternWithoutPrefix;
|
|
7
|
+
constructor();
|
|
5
8
|
patternLeftBoundary(): string;
|
|
6
9
|
innerPattern(context: ParsingContext): RegExp;
|
|
7
10
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
@@ -2,14 +2,17 @@ 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 RUTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.patternWithPrefix = new RegExp(`(?:в течение|в течении)\\s*${PATTERN}`, REGEX_PARTS.flags);
|
|
9
|
+
this.patternWithoutPrefix = new RegExp(PATTERN, REGEX_PARTS.flags);
|
|
10
|
+
}
|
|
8
11
|
patternLeftBoundary() {
|
|
9
12
|
return REGEX_PARTS.leftBoundary;
|
|
10
13
|
}
|
|
11
14
|
innerPattern(context) {
|
|
12
|
-
return context.option.forwardDate ?
|
|
15
|
+
return context.option.forwardDate ? this.patternWithoutPrefix : this.patternWithPrefix;
|
|
13
16
|
}
|
|
14
17
|
innerExtract(context, match) {
|
|
15
18
|
const timeUnits = parseTimeUnits(match[1]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUTimeUnitWithinFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitWithinFormatParser.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,yCAAyC,kBAAkB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RUTimeUnitWithinFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUTimeUnitWithinFormatParser.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,yCAAyC,kBAAkB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;AAE3G,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,sCAAsC;IAI5F;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,iBAAiB,GAAG,IAAI,MAAM,CAAC,8BAA8B,OAAO,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAChG,IAAI,CAAC,oBAAoB,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,mBAAmB;QACf,OAAO,WAAW,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,OAAuB;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3F,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 RUWeekdayParser extends
|
|
5
|
-
|
|
6
|
-
patternLeftBoundary(): string;
|
|
3
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
4
|
+
export default class RUWeekdayParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
5
|
+
innerPatternString(context: ParsingContext): string;
|
|
7
6
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
|
|
8
7
|
}
|
|
@@ -1,23 +1,18 @@
|
|
|
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
|
-
`(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
|
|
9
|
-
`(?:\\s*(?:,|\\)|)))?` +
|
|
10
|
-
`(?:\\s*на\\s*(этой|прошлой|следующей)\\s*неделе)?` +
|
|
11
|
-
`${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
4
|
+
import { AbstractParserWithLeftRightBoundaryChecking } from "./AbstractParserWithWordBoundaryChecking.js";
|
|
12
5
|
const PREFIX_GROUP = 1;
|
|
13
6
|
const WEEKDAY_GROUP = 2;
|
|
14
7
|
const POSTFIX_GROUP = 3;
|
|
15
|
-
export default class RUWeekdayParser extends
|
|
16
|
-
|
|
17
|
-
return
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
export default class RUWeekdayParser extends AbstractParserWithLeftRightBoundaryChecking {
|
|
9
|
+
innerPatternString(context) {
|
|
10
|
+
return (`(?:(?:,|\\(|()\\s*)?` +
|
|
11
|
+
`(?:в\\s*?)?` +
|
|
12
|
+
`(?:(эту|этот|прошлый|прошлую|следующий|следующую|следующего)\\s*)?` +
|
|
13
|
+
`(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
|
|
14
|
+
`(?:\\s*(?:,|\\)|)))?` +
|
|
15
|
+
`(?:\\s*на\\s*(этой|прошлой|следующей)\\s*неделе)?`);
|
|
21
16
|
}
|
|
22
17
|
innerExtract(context, match) {
|
|
23
18
|
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RUWeekdayParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUWeekdayParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"RUWeekdayParser.js","sourceRoot":"","sources":["../../../../../src/locales/ru/parsers/RUWeekdayParser.ts"],"names":[],"mappings":"AAEA,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,oEAAoE;YACpE,IAAI,eAAe,CAAC,kBAAkB,CAAC,GAAG;YAC1C,sBAAsB;YACtB,mDAAmD,CACtD,CAAC;IACN,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,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,WAAW,EAAE,CAAC;QAE1C,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,EAAE;YACrF,QAAQ,GAAG,MAAM,CAAC;SACrB;aAAM,IACH,YAAY,IAAI,WAAW;YAC3B,YAAY,IAAI,WAAW;YAC3B,YAAY,IAAI,WAAW;YAC3B,YAAY,IAAI,YAAY,EAC9B;YACE,QAAQ,GAAG,MAAM,CAAC;SACrB;aAAM,IAAI,YAAY,IAAI,MAAM,IAAI,YAAY,IAAI,KAAK,IAAI,YAAY,IAAI,MAAM,EAAE;YAClF,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
|
@@ -3,7 +3,7 @@ import { ParsingComponents, ParsingResult } from "../../results";
|
|
|
3
3
|
import { Component } from "../../types";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* A parser that checks for word boundary and applying the inner pattern and extraction.
|
|
7
7
|
*/
|
|
8
8
|
export abstract class AbstractParserWithWordBoundaryChecking implements Parser {
|
|
9
9
|
abstract innerPattern(context: ParsingContext): RegExp;
|
|
@@ -12,21 +12,29 @@ export abstract class AbstractParserWithWordBoundaryChecking implements Parser {
|
|
|
12
12
|
match: RegExpMatchArray
|
|
13
13
|
): ParsingComponents | ParsingResult | { [c in Component]?: number } | null;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// Overrides this method if there is more efficient way to check for inner pattern change.
|
|
16
|
+
innerPatternHasChange(context: ParsingContext, currentInnerPattern: RegExp): boolean {
|
|
17
|
+
return this.innerPattern(context) !== currentInnerPattern;
|
|
18
|
+
}
|
|
17
19
|
|
|
18
20
|
patternLeftBoundary(): string {
|
|
19
21
|
return `(\\W|^)`;
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
private cachedInnerPattern?: RegExp = null;
|
|
25
|
+
private cachedPattern?: RegExp = null;
|
|
26
|
+
|
|
22
27
|
pattern(context: ParsingContext): RegExp {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
if (this.cachedInnerPattern) {
|
|
29
|
+
if (!this.innerPatternHasChange(context, this.cachedInnerPattern)) {
|
|
30
|
+
return this.cachedPattern;
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
|
-
|
|
28
|
-
this.cachedPattern = new RegExp(
|
|
29
|
-
|
|
33
|
+
this.cachedInnerPattern = this.innerPattern(context);
|
|
34
|
+
this.cachedPattern = new RegExp(
|
|
35
|
+
`${this.patternLeftBoundary()}${this.cachedInnerPattern.source}`,
|
|
36
|
+
this.cachedInnerPattern.flags
|
|
37
|
+
);
|
|
30
38
|
return this.cachedPattern;
|
|
31
39
|
}
|
|
32
40
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
2
|
+
import { REGEX_PARTS } from "../constants";
|
|
3
|
+
import { ParsingContext } from "../../../chrono";
|
|
4
|
+
|
|
5
|
+
export abstract class AbstractParserWithLeftBoundaryChecking extends AbstractParserWithWordBoundaryChecking {
|
|
6
|
+
abstract innerPatternString(context: ParsingContext): string;
|
|
7
|
+
|
|
8
|
+
patternLeftBoundary(): string {
|
|
9
|
+
return REGEX_PARTS.leftBoundary;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
innerPattern(context: ParsingContext): RegExp {
|
|
13
|
+
return new RegExp(this.innerPatternString(context), REGEX_PARTS.flags);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
innerPatternHasChange(context: ParsingContext, currentInnerPattern: RegExp): boolean {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export abstract class AbstractParserWithLeftRightBoundaryChecking extends AbstractParserWithLeftBoundaryChecking {
|
|
22
|
+
innerPattern(context: ParsingContext): RegExp {
|
|
23
|
+
return new RegExp(`${this.innerPatternString(context)}${REGEX_PARTS.rightBoundary}`, REGEX_PARTS.flags);
|
|
24
|
+
}
|
|
25
|
+
}
|