diff --git a/src/common/parsers/SlashDateFormatParser.ts b/src/common/parsers/SlashDateFormatParser.ts index bee072ff..5ea81a44 100644 --- a/src/common/parsers/SlashDateFormatParser.ts +++ b/src/common/parsers/SlashDateFormatParser.ts @@ -98,6 +98,6 @@ export default class SlashDateFormatParser implements Parser { result.start.imply("year", year); } - return result; + return result.addTag("parser/SlashDateFormatParser"); } } diff --git a/src/locales/en/parsers/ENTimeExpressionParser.ts b/src/locales/en/parsers/ENTimeExpressionParser.ts index 56f9c0f0..b6334a95 100644 --- a/src/locales/en/parsers/ENTimeExpressionParser.ts +++ b/src/locales/en/parsers/ENTimeExpressionParser.ts @@ -1,5 +1,5 @@ import { ParsingContext } from "../../../chrono"; -import { ParsingComponents } from "../../../results"; +import { ParsingComponents, ParsingResult } from "../../../results"; import { Meridiem } from "../../../types"; import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser"; @@ -54,4 +54,16 @@ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser return components.addTag("parser/ENTimeExpressionParser"); } + + extractFollowingTimeComponents( + context: ParsingContext, + match: RegExpMatchArray, + result: ParsingResult + ): ParsingComponents | null { + const followingComponents = super.extractFollowingTimeComponents(context, match, result); + if (followingComponents) { + followingComponents.addTag("parser/ENTimeExpressionParser"); + } + return followingComponents; + } } diff --git a/src/results.ts b/src/results.ts index a2aa31fd..5160c6a9 100644 --- a/src/results.ts +++ b/src/results.ts @@ -293,6 +293,22 @@ export class ParsingResult implements ParsedResult { return this.start.date(); } + addTag(tag: string): ParsingResult { + this.start.addTag(tag); + if (this.end) { + this.end.addTag(tag); + } + return this; + } + + addTags(tags: string[] | Set): ParsingResult { + this.start.addTags(tags); + if (this.end) { + this.end.addTags(tags); + } + return this; + } + tags(): Set { const combinedTags: Set = new Set(this.start.tags()); if (this.end) { diff --git a/test/en/en_slash.test.ts b/test/en/en_slash.test.ts index b7d14d20..d4ac5d6e 100644 --- a/test/en/en_slash.test.ts +++ b/test/en/en_slash.test.ts @@ -17,6 +17,7 @@ test("Test - Single Expression (MM/dd/yyyy)", function () { expect(result.index).toBe(0); expect(result.text).toBe("8/10/2012"); + expect(result.tags()).toContain("parser/SlashDateFormatParser"); expect(result.start.isCertain("day")).toBe(true); expect(result.start.isCertain("month")).toBe(true); @@ -161,11 +162,13 @@ test("Test - Range Expression", function () { testSingleCase(chrono.en, "8/10/2012 - 8/15/2012", new Date(2012, 7, 10), (result) => { expect(result.index).toBe(0); expect(result.text).toBe("8/10/2012 - 8/15/2012"); + expect(result.tags()).toContain("parser/SlashDateFormatParser"); expect(result.start).not.toBeNull(); expect(result.start.get("year")).toBe(2012); expect(result.start.get("month")).toBe(8); expect(result.start.get("day")).toBe(10); + expect(result.start.tags()).toContain("parser/SlashDateFormatParser"); expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12)); @@ -173,6 +176,7 @@ test("Test - Range Expression", function () { expect(result.end.get("year")).toBe(2012); expect(result.end.get("month")).toBe(8); expect(result.end.get("day")).toBe(15); + expect(result.end.tags()).toContain("parser/SlashDateFormatParser"); expect(result.end).toBeDate(new Date(2012, 8 - 1, 15, 12)); }); diff --git a/test/en/en_time_exp.test.ts b/test/en/en_time_exp.test.ts index 8b0b7110..75298c35 100644 --- a/test/en/en_time_exp.test.ts +++ b/test/en/en_time_exp.test.ts @@ -21,6 +21,9 @@ test("Test - Time expression", function () { expect(result.start.get("minute")).toBe(32); expect(result.start.get("second")).toBe(13); expect(result.start.get("meridiem")).toBe(Meridiem.PM); + + expect(result.tags()).toContain("parser/ENTimeExpressionParser"); + expect(result.start.tags()).toContain("parser/ENTimeExpressionParser"); }); }); @@ -35,6 +38,9 @@ test("Test - Time expression after date", function () { expect(result.start.get("hour")).toBe(14); expect(result.start.get("minute")).toBe(15); expect(result.start.get("meridiem")).toBe(Meridiem.PM); + + expect(result.tags()).toContain("parser/ENTimeExpressionParser"); + expect(result.start.tags()).toContain("parser/ENTimeExpressionParser"); }); testSingleCase(chrono, "05/31/2024.14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => { @@ -115,16 +121,19 @@ test("Test - Time expression before date", () => { test("Test - Time range expression", function () { testSingleCase(chrono, "10:00:00 - 21:45:00", new Date(2016, 10 - 1, 1, 8), (result, text) => { expect(result.text).toBe(text); + expect(result.tags()).toContain("parser/ENTimeExpressionParser"); expect(result.start.get("hour")).toBe(10); expect(result.start.get("minute")).toBe(0); expect(result.start.get("second")).toBe(0); expect(result.start.get("meridiem")).toBe(Meridiem.AM); + expect(result.start.tags()).toContain("parser/ENTimeExpressionParser"); expect(result.end.get("hour")).toBe(21); expect(result.end.get("minute")).toBe(45); expect(result.end.get("second")).toBe(0); expect(result.end.get("meridiem")).toBe(Meridiem.PM); + expect(result.end.tags()).toContain("parser/ENTimeExpressionParser"); }); testSingleCase(chrono, "10:00:00 until 21:45:00", new Date(2016, 10 - 1, 1, 11), (result, text) => {