chrono-node
Version:
A natural language date parser in Javascript
54 lines • 2.2 kB
JavaScript
import { Meridiem } from "../../../types.js";
import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser.js";
import { REGEX_PARTS } from "../constants.js";
export default class UKTimeExpressionParser extends AbstractTimeExpressionParser {
constructor(strictMode) {
super(strictMode);
}
patternFlags() {
return REGEX_PARTS.flags;
}
primaryPatternLeftBoundary() {
return `(^|\\s|T|(?:[^\\p{L}\\p{N}_]))`;
}
followingPhase() {
return `\\s*(?:\\-|\\–|\\~|\\〜|до|і|по|\\?)\\s*`;
}
primaryPrefix() {
return `(?:(?:в|у|о|об|з|із|від)\\s*)??`;
}
primarySuffix() {
return `(?:\\s*(?:ранку|вечора|по обіді|після обіду))?(?!\\/)${REGEX_PARTS.rightBoundary}`;
}
extractPrimaryTimeComponents(context, match) {
const components = super.extractPrimaryTimeComponents(context, match);
if (components) {
if (match[0].endsWith("вечора")) {
const hour = components.get("hour");
if (hour >= 6 && hour < 12) {
components.assign("hour", components.get("hour") + 12);
components.assign("meridiem", Meridiem.PM);
}
else if (hour < 6) {
components.assign("meridiem", Meridiem.AM);
}
}
if (match[0].endsWith("по обіді") || match[0].endsWith("після обіду")) {
components.assign("meridiem", Meridiem.PM);
const hour = components.get("hour");
if (hour >= 0 && hour <= 6) {
components.assign("hour", components.get("hour") + 12);
}
}
if (match[0].endsWith("ранку")) {
components.assign("meridiem", Meridiem.AM);
const hour = components.get("hour");
if (hour < 12) {
components.assign("hour", components.get("hour"));
}
}
}
return components;
}
}
//# sourceMappingURL=UKTimeExpressionParser.js.map