119 lines
2.8 KiB
JavaScript
119 lines
2.8 KiB
JavaScript
import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.mjs";
|
||
import { buildMatchFn } from "../../_lib/buildMatchFn.mjs";
|
||
|
||
const matchOrdinalNumberPattern = /^第?\d+(年|四半期|月|週|日|時|分|秒)?/i;
|
||
const parseOrdinalNumberPattern = /\d+/i;
|
||
|
||
const matchEraPatterns = {
|
||
narrow: /^(B\.?C\.?|A\.?D\.?)/i,
|
||
abbreviated: /^(紀元[前後]|西暦)/i,
|
||
wide: /^(紀元[前後]|西暦)/i,
|
||
};
|
||
const parseEraPatterns = {
|
||
narrow: [/^B/i, /^A/i],
|
||
any: [/^(紀元前)/i, /^(西暦|紀元後)/i],
|
||
};
|
||
|
||
const matchQuarterPatterns = {
|
||
narrow: /^[1234]/i,
|
||
abbreviated: /^Q[1234]/i,
|
||
wide: /^第[1234一二三四1234]四半期/i,
|
||
};
|
||
const parseQuarterPatterns = {
|
||
any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],
|
||
};
|
||
|
||
const matchMonthPatterns = {
|
||
narrow: /^([123456789]|1[012])/,
|
||
abbreviated: /^([123456789]|1[012])月/i,
|
||
wide: /^([123456789]|1[012])月/i,
|
||
};
|
||
const parseMonthPatterns = {
|
||
any: [
|
||
/^1\D/,
|
||
/^2/,
|
||
/^3/,
|
||
/^4/,
|
||
/^5/,
|
||
/^6/,
|
||
/^7/,
|
||
/^8/,
|
||
/^9/,
|
||
/^10/,
|
||
/^11/,
|
||
/^12/,
|
||
],
|
||
};
|
||
|
||
const matchDayPatterns = {
|
||
narrow: /^[日月火水木金土]/,
|
||
short: /^[日月火水木金土]/,
|
||
abbreviated: /^[日月火水木金土]/,
|
||
wide: /^[日月火水木金土]曜日/,
|
||
};
|
||
const parseDayPatterns = {
|
||
any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/],
|
||
};
|
||
|
||
const matchDayPeriodPatterns = {
|
||
any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i,
|
||
};
|
||
const parseDayPeriodPatterns = {
|
||
any: {
|
||
am: /^(A|午前)/i,
|
||
pm: /^(P|午後)/i,
|
||
midnight: /^深夜|真夜中/i,
|
||
noon: /^正午/i,
|
||
morning: /^朝/i,
|
||
afternoon: /^午後/i,
|
||
evening: /^夜/i,
|
||
night: /^深夜/i,
|
||
},
|
||
};
|
||
|
||
export const match = {
|
||
ordinalNumber: buildMatchPatternFn({
|
||
matchPattern: matchOrdinalNumberPattern,
|
||
parsePattern: parseOrdinalNumberPattern,
|
||
valueCallback: function (value) {
|
||
return parseInt(value, 10);
|
||
},
|
||
}),
|
||
|
||
era: buildMatchFn({
|
||
matchPatterns: matchEraPatterns,
|
||
defaultMatchWidth: "wide",
|
||
parsePatterns: parseEraPatterns,
|
||
defaultParseWidth: "any",
|
||
}),
|
||
|
||
quarter: buildMatchFn({
|
||
matchPatterns: matchQuarterPatterns,
|
||
defaultMatchWidth: "wide",
|
||
parsePatterns: parseQuarterPatterns,
|
||
defaultParseWidth: "any",
|
||
valueCallback: (index) => index + 1,
|
||
}),
|
||
|
||
month: buildMatchFn({
|
||
matchPatterns: matchMonthPatterns,
|
||
defaultMatchWidth: "wide",
|
||
parsePatterns: parseMonthPatterns,
|
||
defaultParseWidth: "any",
|
||
}),
|
||
|
||
day: buildMatchFn({
|
||
matchPatterns: matchDayPatterns,
|
||
defaultMatchWidth: "wide",
|
||
parsePatterns: parseDayPatterns,
|
||
defaultParseWidth: "any",
|
||
}),
|
||
|
||
dayPeriod: buildMatchFn({
|
||
matchPatterns: matchDayPeriodPatterns,
|
||
defaultMatchWidth: "any",
|
||
parsePatterns: parseDayPeriodPatterns,
|
||
defaultParseWidth: "any",
|
||
}),
|
||
};
|