match.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { buildMatchFn } from "../../_lib/buildMatchFn.js";
  2. import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.js";
  3. const matchOrdinalNumberPattern = /^(\d+)/;
  4. const parseOrdinalNumberPattern = /\d+/i;
  5. const matchEraPatterns = {
  6. narrow: /^(ق|ب)/g,
  7. abbreviated: /^(ق.م|ب.م)/g,
  8. wide: /^(قبل الميلاد|بعد الميلاد)/g,
  9. };
  10. const parseEraPatterns = {
  11. any: [/^ق/g, /^ب/g],
  12. };
  13. const matchQuarterPatterns = {
  14. narrow: /^[1234]/,
  15. abbreviated: /^ر[1234]/,
  16. wide: /^الربع (الأول|الثاني|الثالث|الرابع)/,
  17. };
  18. const parseQuarterPatterns = {
  19. wide: [/الربع الأول/, /الربع الثاني/, /الربع الثالث/, /الربع الرابع/],
  20. any: [/1/, /2/, /3/, /4/],
  21. };
  22. const matchMonthPatterns = {
  23. narrow: /^(ي|ف|م|أ|س|ن|د)/,
  24. abbreviated: /^(ينا|فبر|مارس|أبريل|مايو|يونـ|يولـ|أغسـ|سبتـ|أكتـ|نوفـ|ديسـ)/,
  25. wide: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,
  26. };
  27. const parseMonthPatterns = {
  28. narrow: [
  29. /^ي/,
  30. /^ف/,
  31. /^م/,
  32. /^أ/,
  33. /^م/,
  34. /^ي/,
  35. /^ي/,
  36. /^أ/,
  37. /^س/,
  38. /^أ/,
  39. /^ن/,
  40. /^د/,
  41. ],
  42. any: [
  43. /^ينا/,
  44. /^فبر/,
  45. /^مارس/,
  46. /^أبريل/,
  47. /^مايو/,
  48. /^يون/,
  49. /^يول/,
  50. /^أغس/,
  51. /^سبت/,
  52. /^أكت/,
  53. /^نوف/,
  54. /^ديس/,
  55. ],
  56. };
  57. const matchDayPatterns = {
  58. narrow: /^(ح|ن|ث|ر|خ|ج|س)/,
  59. short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,
  60. abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,
  61. wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/,
  62. };
  63. const parseDayPatterns = {
  64. narrow: [/^ح/, /^ن/, /^ث/, /^ر/, /^خ/, /^ج/, /^س/],
  65. any: [/أحد/, /اثنين/, /ثلاثاء/, /أربعاء/, /خميس/, /جمعة/, /سبت/],
  66. };
  67. const matchDayPeriodPatterns = {
  68. narrow: /^(ص|م|ن|ظ|في الصباح|بعد الظهر|في المساء|في الليل)/,
  69. abbreviated: /^(ص|م|نصف الليل|ظهراً|في الصباح|بعد الظهر|في المساء|في الليل)/,
  70. wide: /^(ص|م|نصف الليل|في الصباح|ظهراً|بعد الظهر|في المساء|في الليل)/,
  71. any: /^(ص|م|صباح|ظهر|مساء|ليل)/,
  72. };
  73. const parseDayPeriodPatterns = {
  74. any: {
  75. am: /^ص/,
  76. pm: /^م/,
  77. midnight: /^ن/,
  78. noon: /^ظ/,
  79. morning: /^ص/,
  80. afternoon: /^بعد/,
  81. evening: /^م/,
  82. night: /^ل/,
  83. },
  84. };
  85. export const match = {
  86. ordinalNumber: buildMatchPatternFn({
  87. matchPattern: matchOrdinalNumberPattern,
  88. parsePattern: parseOrdinalNumberPattern,
  89. valueCallback: function (value) {
  90. return parseInt(value, 10);
  91. },
  92. }),
  93. era: buildMatchFn({
  94. matchPatterns: matchEraPatterns,
  95. defaultMatchWidth: "wide",
  96. parsePatterns: parseEraPatterns,
  97. defaultParseWidth: "any",
  98. }),
  99. quarter: buildMatchFn({
  100. matchPatterns: matchQuarterPatterns,
  101. defaultMatchWidth: "wide",
  102. parsePatterns: parseQuarterPatterns,
  103. defaultParseWidth: "any",
  104. valueCallback: (index) => index + 1,
  105. }),
  106. month: buildMatchFn({
  107. matchPatterns: matchMonthPatterns,
  108. defaultMatchWidth: "wide",
  109. parsePatterns: parseMonthPatterns,
  110. defaultParseWidth: "any",
  111. }),
  112. day: buildMatchFn({
  113. matchPatterns: matchDayPatterns,
  114. defaultMatchWidth: "wide",
  115. parsePatterns: parseDayPatterns,
  116. defaultParseWidth: "any",
  117. }),
  118. dayPeriod: buildMatchFn({
  119. matchPatterns: matchDayPeriodPatterns,
  120. defaultMatchWidth: "any",
  121. parsePatterns: parseDayPeriodPatterns,
  122. defaultParseWidth: "any",
  123. }),
  124. };