1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const constants_1 = require("../constants");
|
4 | const pattern_1 = require("../../../utils/pattern");
|
5 | const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
|
6 | const weeks_1 = require("../../../calculation/weeks");
|
7 | const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" +
|
8 | "(?:a[mn]\\s*?)?" +
|
9 | "(?:(diese[mn]|letzte[mn]|n(?:ä|ae)chste[mn])\\s*)?" +
|
10 | `(${pattern_1.matchAnyPattern(constants_1.WEEKDAY_DICTIONARY)})` +
|
11 | "(?:\\s*(?:\\,|\\)|\\)))?" +
|
12 | "(?:\\s*(diese|letzte|n(?:ä|ae)chste)\\s*woche)?" +
|
13 | "(?=\\W|$)", "i");
|
14 | const PREFIX_GROUP = 1;
|
15 | const SUFFIX_GROUP = 3;
|
16 | const WEEKDAY_GROUP = 2;
|
17 | class DEWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
|
18 | innerPattern() {
|
19 | return PATTERN;
|
20 | }
|
21 | innerExtract(context, match) {
|
22 | const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
|
23 | const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek];
|
24 | const prefix = match[PREFIX_GROUP];
|
25 | const postfix = match[SUFFIX_GROUP];
|
26 | let modifierWord = prefix || postfix;
|
27 | modifierWord = modifierWord || "";
|
28 | modifierWord = modifierWord.toLowerCase();
|
29 | let modifier = null;
|
30 | if (modifierWord.match(/letzte/)) {
|
31 | modifier = "last";
|
32 | }
|
33 | else if (modifierWord.match(/chste/)) {
|
34 | modifier = "next";
|
35 | }
|
36 | else if (modifierWord.match(/diese/)) {
|
37 | modifier = "this";
|
38 | }
|
39 | const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier);
|
40 | return context
|
41 | .createParsingComponents()
|
42 | .assign("weekday", offset)
|
43 | .imply("day", date.date())
|
44 | .imply("month", date.month() + 1)
|
45 | .imply("year", date.year());
|
46 | }
|
47 | }
|
48 | exports.default = DEWeekdayParser;
|