chrono-node 2.3.5 → 2.3.8
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/README.md +1 -1
- package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +6 -1
- package/dist/locales/de/constants.d.ts +3 -3
- package/dist/locales/de/constants.js +38 -20
- package/dist/locales/de/index.js +4 -0
- package/dist/locales/de/parsers/DESpecificTimeExpressionParser.d.ts +7 -0
- package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js +114 -0
- package/dist/locales/de/parsers/DETimeExpressionParser.d.ts +0 -1
- package/dist/locales/de/parsers/DETimeExpressionParser.js +3 -21
- package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.d.ts +8 -0
- package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js +34 -0
- package/dist/locales/en/constants.d.ts +2 -2
- package/dist/locales/en/constants.js +3 -0
- package/dist/locales/en/index.js +2 -1
- package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +2 -2
- package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
- package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.d.ts +7 -0
- package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +35 -0
- package/dist/locales/zh/hans/constants.d.ts +27 -0
- package/dist/locales/zh/hans/constants.js +51 -0
- package/dist/locales/zh/hans/index.d.ts +9 -0
- package/dist/locales/zh/hans/index.js +49 -0
- package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.d.ts +7 -0
- package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +138 -0
- package/dist/locales/zh/hans/parsers/ZHHansDateParser.d.ts +6 -0
- package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +72 -0
- package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.d.ts +6 -0
- package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +78 -0
- package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.d.ts +7 -0
- package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +70 -0
- package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +6 -0
- package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +438 -0
- package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.d.ts +7 -0
- package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +46 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.d.ts +4 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +12 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.d.ts +4 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +12 -0
- package/dist/locales/zh/hant/index.d.ts +9 -0
- package/dist/locales/zh/hant/index.js +49 -0
- package/dist/locales/zh/index.d.ts +2 -9
- package/dist/locales/zh/index.js +13 -46
- package/dist/results.d.ts +1 -1
- package/dist/results.js +1 -2
- package/dist/timezone.d.ts +1 -1
- package/dist/timezone.js +3 -3
- package/package.json +1 -1
- package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +11 -1
- package/src/locales/de/constants.ts +42 -22
- package/src/locales/de/index.ts +4 -0
- package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +150 -0
- package/src/locales/de/parsers/DETimeExpressionParser.ts +4 -23
- package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +42 -0
- package/src/locales/en/constants.ts +5 -2
- package/src/locales/en/index.ts +2 -1
- package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +0 -2
- package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +2 -2
- package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
- package/src/locales/en/refiners/ENMergeRelativeDateRefiner.ts +58 -0
- package/src/locales/zh/hans/constants.ts +52 -0
- package/src/locales/zh/hans/index.ts +62 -0
- package/src/locales/zh/hans/parsers/ZHHansCasualDateParser.ts +128 -0
- package/src/locales/zh/hans/parsers/ZHHansDateParser.ts +75 -0
- package/src/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.ts +81 -0
- package/src/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.ts +69 -0
- package/src/locales/zh/hans/parsers/ZHHansTimeExpressionParser.ts +424 -0
- package/src/locales/zh/hans/parsers/ZHHansWeekdayParser.ts +46 -0
- package/src/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.ts +7 -0
- package/src/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.ts +7 -0
- package/src/locales/zh/hant/index.ts +63 -0
- package/src/locales/zh/index.ts +2 -63
- package/src/results.ts +2 -3
- package/src/timezone.ts +4 -4
- package/test/de/de_month_name_little_endian.test.ts +12 -0
- package/test/de/de_time_exp.test.ts +59 -0
- package/test/de/de_time_units_casual_relative.test.ts +108 -0
- package/test/de/de_year.test.ts +147 -0
- package/test/en/en_merging_relative_dates.test.ts +51 -0
- package/test/en/en_month.test.ts +13 -0
- package/test/en/en_relative.test.ts +61 -2
- package/test/en/en_time_units_ago.test.ts +3 -3
- package/test/en/en_time_units_casual_relative.test.ts +16 -0
- package/test/en/en_time_units_within.test.ts +2 -2
- package/test/en/en_timezone_exp.test.ts +3 -3
- package/test/fr/fr_time_units_ago.test.ts +3 -3
- package/test/fr/fr_time_units_within.test.ts +2 -2
- package/test/nl/nl_relative.test.ts +2 -2
- package/test/nl/nl_time_units_ago.test.ts +3 -3
- package/test/system_timezone.test.ts +22 -0
- package/test/zh/zh_hans_casual.test.ts +228 -0
- package/test/zh/zh_hans_date.test.ts +102 -0
- package/test/zh/zh_hans_deadline.test.ts +136 -0
- package/test/zh/zh_hans_time_exp.test.ts +182 -0
- package/test/zh/zh_hans_weekday.test.ts +132 -0
- package/test/zh/zh_hant_date.test.ts +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../../chrono";
|
|
2
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
|
+
import { ParsingComponents, ParsingResult } from "../../../../results";
|
|
4
|
+
export default class ZHHansCasualDateParser extends AbstractParserWithWordBoundaryChecking {
|
|
5
|
+
innerPattern(context: ParsingContext): RegExp;
|
|
6
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult;
|
|
7
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
7
|
+
const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary");
|
|
8
|
+
const NOW_GROUP = 1;
|
|
9
|
+
const DAY_GROUP_1 = 2;
|
|
10
|
+
const TIME_GROUP_1 = 3;
|
|
11
|
+
const TIME_GROUP_2 = 4;
|
|
12
|
+
const DAY_GROUP_3 = 5;
|
|
13
|
+
const TIME_GROUP_3 = 6;
|
|
14
|
+
class ZHHansCasualDateParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
|
|
15
|
+
innerPattern(context) {
|
|
16
|
+
return new RegExp("(现在|立(?:刻|即)|即刻)|" +
|
|
17
|
+
"(今|明|前|大前|后|大后|昨)(早|晚)|" +
|
|
18
|
+
"(上(?:午)|早(?:上)|下(?:午)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|" +
|
|
19
|
+
"(今|明|前|大前|后|大后|昨)(?:日|天)" +
|
|
20
|
+
"(?:[\\s|,|,]*)" +
|
|
21
|
+
"(?:(上(?:午)|早(?:上)|下(?:午)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?", "i");
|
|
22
|
+
}
|
|
23
|
+
innerExtract(context, match) {
|
|
24
|
+
const index = match.index;
|
|
25
|
+
const result = context.createParsingResult(index, match[0]);
|
|
26
|
+
const refMoment = dayjs_1.default(context.refDate);
|
|
27
|
+
let startMoment = refMoment;
|
|
28
|
+
if (match[NOW_GROUP]) {
|
|
29
|
+
result.start.imply("hour", refMoment.hour());
|
|
30
|
+
result.start.imply("minute", refMoment.minute());
|
|
31
|
+
result.start.imply("second", refMoment.second());
|
|
32
|
+
result.start.imply("millisecond", refMoment.millisecond());
|
|
33
|
+
}
|
|
34
|
+
else if (match[DAY_GROUP_1]) {
|
|
35
|
+
const day1 = match[DAY_GROUP_1];
|
|
36
|
+
const time1 = match[TIME_GROUP_1];
|
|
37
|
+
if (day1 == "明") {
|
|
38
|
+
if (refMoment.hour() > 1) {
|
|
39
|
+
startMoment = startMoment.add(1, "day");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (day1 == "昨") {
|
|
43
|
+
startMoment = startMoment.add(-1, "day");
|
|
44
|
+
}
|
|
45
|
+
else if (day1 == "前") {
|
|
46
|
+
startMoment = startMoment.add(-2, "day");
|
|
47
|
+
}
|
|
48
|
+
else if (day1 == "大前") {
|
|
49
|
+
startMoment = startMoment.add(-3, "day");
|
|
50
|
+
}
|
|
51
|
+
else if (day1 == "后") {
|
|
52
|
+
startMoment = startMoment.add(2, "day");
|
|
53
|
+
}
|
|
54
|
+
else if (day1 == "大后") {
|
|
55
|
+
startMoment = startMoment.add(3, "day");
|
|
56
|
+
}
|
|
57
|
+
if (time1 == "早") {
|
|
58
|
+
result.start.imply("hour", 6);
|
|
59
|
+
}
|
|
60
|
+
else if (time1 == "晚") {
|
|
61
|
+
result.start.imply("hour", 22);
|
|
62
|
+
result.start.imply("meridiem", 1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (match[TIME_GROUP_2]) {
|
|
66
|
+
const timeString2 = match[TIME_GROUP_2];
|
|
67
|
+
const time2 = timeString2[0];
|
|
68
|
+
if (time2 == "早" || time2 == "上") {
|
|
69
|
+
result.start.imply("hour", 6);
|
|
70
|
+
}
|
|
71
|
+
else if (time2 == "下") {
|
|
72
|
+
result.start.imply("hour", 15);
|
|
73
|
+
result.start.imply("meridiem", 1);
|
|
74
|
+
}
|
|
75
|
+
else if (time2 == "中") {
|
|
76
|
+
result.start.imply("hour", 12);
|
|
77
|
+
result.start.imply("meridiem", 1);
|
|
78
|
+
}
|
|
79
|
+
else if (time2 == "夜" || time2 == "晚") {
|
|
80
|
+
result.start.imply("hour", 22);
|
|
81
|
+
result.start.imply("meridiem", 1);
|
|
82
|
+
}
|
|
83
|
+
else if (time2 == "凌") {
|
|
84
|
+
result.start.imply("hour", 0);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (match[DAY_GROUP_3]) {
|
|
88
|
+
const day3 = match[DAY_GROUP_3];
|
|
89
|
+
if (day3 == "明") {
|
|
90
|
+
if (refMoment.hour() > 1) {
|
|
91
|
+
startMoment = startMoment.add(1, "day");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (day3 == "昨") {
|
|
95
|
+
startMoment = startMoment.add(-1, "day");
|
|
96
|
+
}
|
|
97
|
+
else if (day3 == "前") {
|
|
98
|
+
startMoment = startMoment.add(-2, "day");
|
|
99
|
+
}
|
|
100
|
+
else if (day3 == "大前") {
|
|
101
|
+
startMoment = startMoment.add(-3, "day");
|
|
102
|
+
}
|
|
103
|
+
else if (day3 == "后") {
|
|
104
|
+
startMoment = startMoment.add(2, "day");
|
|
105
|
+
}
|
|
106
|
+
else if (day3 == "大后") {
|
|
107
|
+
startMoment = startMoment.add(3, "day");
|
|
108
|
+
}
|
|
109
|
+
const timeString3 = match[TIME_GROUP_3];
|
|
110
|
+
if (timeString3) {
|
|
111
|
+
const time3 = timeString3[0];
|
|
112
|
+
if (time3 == "早" || time3 == "上") {
|
|
113
|
+
result.start.imply("hour", 6);
|
|
114
|
+
}
|
|
115
|
+
else if (time3 == "下") {
|
|
116
|
+
result.start.imply("hour", 15);
|
|
117
|
+
result.start.imply("meridiem", 1);
|
|
118
|
+
}
|
|
119
|
+
else if (time3 == "中") {
|
|
120
|
+
result.start.imply("hour", 12);
|
|
121
|
+
result.start.imply("meridiem", 1);
|
|
122
|
+
}
|
|
123
|
+
else if (time3 == "夜" || time3 == "晚") {
|
|
124
|
+
result.start.imply("hour", 22);
|
|
125
|
+
result.start.imply("meridiem", 1);
|
|
126
|
+
}
|
|
127
|
+
else if (time3 == "凌") {
|
|
128
|
+
result.start.imply("hour", 0);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
result.start.assign("day", startMoment.date());
|
|
133
|
+
result.start.assign("month", startMoment.month() + 1);
|
|
134
|
+
result.start.assign("year", startMoment.year());
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.default = ZHHansCasualDateParser;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../../chrono";
|
|
2
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
|
+
export default class ZHHansDateParser extends AbstractParserWithWordBoundaryChecking {
|
|
4
|
+
innerPattern(): RegExp;
|
|
5
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../../results").ParsingResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
7
|
+
const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const YEAR_GROUP = 1;
|
|
10
|
+
const MONTH_GROUP = 2;
|
|
11
|
+
const DAY_GROUP = 3;
|
|
12
|
+
class ZHHansDateParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
|
|
13
|
+
innerPattern() {
|
|
14
|
+
return new RegExp("(" +
|
|
15
|
+
"\\d{2,4}|" +
|
|
16
|
+
"[" +
|
|
17
|
+
Object.keys(constants_1.NUMBER).join("") +
|
|
18
|
+
"]{4}|" +
|
|
19
|
+
"[" +
|
|
20
|
+
Object.keys(constants_1.NUMBER).join("") +
|
|
21
|
+
"]{2}" +
|
|
22
|
+
")?" +
|
|
23
|
+
"(?:\\s*)" +
|
|
24
|
+
"(?:年)?" +
|
|
25
|
+
"(?:[\\s|,|,]*)" +
|
|
26
|
+
"(" +
|
|
27
|
+
"\\d{1,2}|" +
|
|
28
|
+
"[" +
|
|
29
|
+
Object.keys(constants_1.NUMBER).join("") +
|
|
30
|
+
"]{1,3}" +
|
|
31
|
+
")" +
|
|
32
|
+
"(?:\\s*)" +
|
|
33
|
+
"(?:月)" +
|
|
34
|
+
"(?:\\s*)" +
|
|
35
|
+
"(" +
|
|
36
|
+
"\\d{1,2}|" +
|
|
37
|
+
"[" +
|
|
38
|
+
Object.keys(constants_1.NUMBER).join("") +
|
|
39
|
+
"]{1,3}" +
|
|
40
|
+
")?" +
|
|
41
|
+
"(?:\\s*)" +
|
|
42
|
+
"(?:日|号)?");
|
|
43
|
+
}
|
|
44
|
+
innerExtract(context, match) {
|
|
45
|
+
const startMoment = dayjs_1.default(context.refDate);
|
|
46
|
+
const result = context.createParsingResult(match.index, match[0]);
|
|
47
|
+
let month = parseInt(match[MONTH_GROUP]);
|
|
48
|
+
if (isNaN(month))
|
|
49
|
+
month = constants_1.zhStringToNumber(match[MONTH_GROUP]);
|
|
50
|
+
result.start.assign("month", month);
|
|
51
|
+
if (match[DAY_GROUP]) {
|
|
52
|
+
let day = parseInt(match[DAY_GROUP]);
|
|
53
|
+
if (isNaN(day))
|
|
54
|
+
day = constants_1.zhStringToNumber(match[DAY_GROUP]);
|
|
55
|
+
result.start.assign("day", day);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
result.start.imply("day", startMoment.date());
|
|
59
|
+
}
|
|
60
|
+
if (match[YEAR_GROUP]) {
|
|
61
|
+
let year = parseInt(match[YEAR_GROUP]);
|
|
62
|
+
if (isNaN(year))
|
|
63
|
+
year = constants_1.zhStringToYear(match[YEAR_GROUP]);
|
|
64
|
+
result.start.assign("year", year);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result.start.imply("year", startMoment.year());
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.default = ZHHansDateParser;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../../chrono";
|
|
2
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
|
+
export default class ZHHansDeadlineFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
4
|
+
innerPattern(): RegExp;
|
|
5
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../../results").ParsingResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
7
|
+
const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const PATTERN = new RegExp("(\\d+|[" +
|
|
10
|
+
Object.keys(constants_1.NUMBER).join("") +
|
|
11
|
+
"]+|半|几)(?:\\s*)" +
|
|
12
|
+
"(?:个)?" +
|
|
13
|
+
"(秒(?:钟)?|分钟|小时|钟|日|天|星期|礼拜|月|年)" +
|
|
14
|
+
"(?:(?:之|过)?后|(?:之)?内)", "i");
|
|
15
|
+
const NUMBER_GROUP = 1;
|
|
16
|
+
const UNIT_GROUP = 2;
|
|
17
|
+
class ZHHansDeadlineFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
|
|
18
|
+
innerPattern() {
|
|
19
|
+
return PATTERN;
|
|
20
|
+
}
|
|
21
|
+
innerExtract(context, match) {
|
|
22
|
+
const result = context.createParsingResult(match.index, match[0]);
|
|
23
|
+
let number = parseInt(match[NUMBER_GROUP]);
|
|
24
|
+
if (isNaN(number)) {
|
|
25
|
+
number = constants_1.zhStringToNumber(match[NUMBER_GROUP]);
|
|
26
|
+
}
|
|
27
|
+
if (isNaN(number)) {
|
|
28
|
+
const string = match[NUMBER_GROUP];
|
|
29
|
+
if (string === "几") {
|
|
30
|
+
number = 3;
|
|
31
|
+
}
|
|
32
|
+
else if (string === "半") {
|
|
33
|
+
number = 0.5;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let date = dayjs_1.default(context.refDate);
|
|
40
|
+
const unit = match[UNIT_GROUP];
|
|
41
|
+
const unitAbbr = unit[0];
|
|
42
|
+
if (unitAbbr.match(/[日天星礼月年]/)) {
|
|
43
|
+
if (unitAbbr == "日" || unitAbbr == "天") {
|
|
44
|
+
date = date.add(number, "d");
|
|
45
|
+
}
|
|
46
|
+
else if (unitAbbr == "星" || unitAbbr == "礼") {
|
|
47
|
+
date = date.add(number * 7, "d");
|
|
48
|
+
}
|
|
49
|
+
else if (unitAbbr == "月") {
|
|
50
|
+
date = date.add(number, "month");
|
|
51
|
+
}
|
|
52
|
+
else if (unitAbbr == "年") {
|
|
53
|
+
date = date.add(number, "year");
|
|
54
|
+
}
|
|
55
|
+
result.start.assign("year", date.year());
|
|
56
|
+
result.start.assign("month", date.month() + 1);
|
|
57
|
+
result.start.assign("day", date.date());
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
if (unitAbbr == "秒") {
|
|
61
|
+
date = date.add(number, "second");
|
|
62
|
+
}
|
|
63
|
+
else if (unitAbbr == "分") {
|
|
64
|
+
date = date.add(number, "minute");
|
|
65
|
+
}
|
|
66
|
+
else if (unitAbbr == "小" || unitAbbr == "钟") {
|
|
67
|
+
date = date.add(number, "hour");
|
|
68
|
+
}
|
|
69
|
+
result.start.imply("year", date.year());
|
|
70
|
+
result.start.imply("month", date.month() + 1);
|
|
71
|
+
result.start.imply("day", date.date());
|
|
72
|
+
result.start.assign("hour", date.hour());
|
|
73
|
+
result.start.assign("minute", date.minute());
|
|
74
|
+
result.start.assign("second", date.second());
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.default = ZHHansDeadlineFormatParser;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../../chrono";
|
|
2
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
|
+
import { ParsingResult } from "../../../../results";
|
|
4
|
+
export default class ZHHansRelationWeekdayParser extends AbstractParserWithWordBoundaryChecking {
|
|
5
|
+
innerPattern(): RegExp;
|
|
6
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult;
|
|
7
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
7
|
+
const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const PATTERN = new RegExp("(?<prefix>上|下|这)(?:个)?(?:星期|礼拜|周)(?<weekday>" + Object.keys(constants_1.WEEKDAY_OFFSET).join("|") + ")");
|
|
10
|
+
class ZHHansRelationWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
|
|
11
|
+
innerPattern() {
|
|
12
|
+
return PATTERN;
|
|
13
|
+
}
|
|
14
|
+
innerExtract(context, match) {
|
|
15
|
+
const result = context.createParsingResult(match.index, match[0]);
|
|
16
|
+
const dayOfWeek = match.groups.weekday;
|
|
17
|
+
const offset = constants_1.WEEKDAY_OFFSET[dayOfWeek];
|
|
18
|
+
if (offset === undefined)
|
|
19
|
+
return null;
|
|
20
|
+
let modifier = null;
|
|
21
|
+
const prefix = match.groups.prefix;
|
|
22
|
+
if (prefix == "上") {
|
|
23
|
+
modifier = "last";
|
|
24
|
+
}
|
|
25
|
+
else if (prefix == "下") {
|
|
26
|
+
modifier = "next";
|
|
27
|
+
}
|
|
28
|
+
else if (prefix == "这") {
|
|
29
|
+
modifier = "this";
|
|
30
|
+
}
|
|
31
|
+
let startMoment = dayjs_1.default(context.refDate);
|
|
32
|
+
let startMomentFixed = false;
|
|
33
|
+
const refOffset = startMoment.day();
|
|
34
|
+
if (modifier == "last" || modifier == "past") {
|
|
35
|
+
startMoment = startMoment.day(offset - 7);
|
|
36
|
+
startMomentFixed = true;
|
|
37
|
+
}
|
|
38
|
+
else if (modifier == "next") {
|
|
39
|
+
startMoment = startMoment.day(offset + 7);
|
|
40
|
+
startMomentFixed = true;
|
|
41
|
+
}
|
|
42
|
+
else if (modifier == "this") {
|
|
43
|
+
startMoment = startMoment.day(offset);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
|
|
47
|
+
startMoment = startMoment.day(offset - 7);
|
|
48
|
+
}
|
|
49
|
+
else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
|
|
50
|
+
startMoment = startMoment.day(offset + 7);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
startMoment = startMoment.day(offset);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
result.start.assign("weekday", offset);
|
|
57
|
+
if (startMomentFixed) {
|
|
58
|
+
result.start.assign("day", startMoment.date());
|
|
59
|
+
result.start.assign("month", startMoment.month() + 1);
|
|
60
|
+
result.start.assign("year", startMoment.year());
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
result.start.imply("day", startMoment.date());
|
|
64
|
+
result.start.imply("month", startMoment.month() + 1);
|
|
65
|
+
result.start.imply("year", startMoment.year());
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.default = ZHHansRelationWeekdayParser;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../../chrono";
|
|
2
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../../common/parsers/AbstractParserWithWordBoundary";
|
|
3
|
+
export default class ZHHansTimeExpressionParser extends AbstractParserWithWordBoundaryChecking {
|
|
4
|
+
innerPattern(): RegExp;
|
|
5
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../../results").ParsingResult;
|
|
6
|
+
}
|