120 lines
3.0 KiB
JavaScript
120 lines
3.0 KiB
JavaScript
import { buildMatchFn } from "../../_lib/buildMatchFn.mjs";
|
||
import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.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",
|
||
}),
|
||
};
|