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",
|
|||
|
}),
|
|||
|
};
|