match.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { buildMatchFn } from "../../_lib/buildMatchFn.js";
  2. import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.js";
  3. const matchOrdinalNumberPattern = /^(\d+)(.)?/i;
  4. const parseOrdinalNumberPattern = /\d+/i;
  5. const matchEraPatterns = {
  6. narrow: /^(k.a.|k.o.)/i,
  7. abbreviated: /^(k.a.|k.o.)/i,
  8. wide: /^(kristo aurretik|kristo ondoren)/i,
  9. };
  10. const parseEraPatterns = {
  11. narrow: [/^k.a./i, /^k.o./i],
  12. abbreviated: [/^(k.a.)/i, /^(k.o.)/i],
  13. wide: [/^(kristo aurretik)/i, /^(kristo ondoren)/i],
  14. };
  15. const matchQuarterPatterns = {
  16. narrow: /^[1234]/i,
  17. abbreviated: /^[1234]H/i,
  18. wide: /^[1234](.)? hiruhilekoa/i,
  19. };
  20. const parseQuarterPatterns = {
  21. any: [/1/i, /2/i, /3/i, /4/i],
  22. };
  23. const matchMonthPatterns = {
  24. narrow: /^[uomaei]/i,
  25. abbreviated: /^(urt|ots|mar|api|mai|eka|uzt|abu|ira|urr|aza|abe)/i,
  26. wide: /^(urtarrila|otsaila|martxoa|apirila|maiatza|ekaina|uztaila|abuztua|iraila|urria|azaroa|abendua)/i,
  27. };
  28. const parseMonthPatterns = {
  29. narrow: [
  30. /^u/i,
  31. /^o/i,
  32. /^m/i,
  33. /^a/i,
  34. /^m/i,
  35. /^e/i,
  36. /^u/i,
  37. /^a/i,
  38. /^i/i,
  39. /^u/i,
  40. /^a/i,
  41. /^a/i,
  42. ],
  43. any: [
  44. /^urt/i,
  45. /^ots/i,
  46. /^mar/i,
  47. /^api/i,
  48. /^mai/i,
  49. /^eka/i,
  50. /^uzt/i,
  51. /^abu/i,
  52. /^ira/i,
  53. /^urr/i,
  54. /^aza/i,
  55. /^abe/i,
  56. ],
  57. };
  58. const matchDayPatterns = {
  59. narrow: /^[iaol]/i,
  60. short: /^(ig|al|as|az|og|or|lr)/i,
  61. abbreviated: /^(iga|ast|ast|ast|ost|ost|lar)/i,
  62. wide: /^(igandea|astelehena|asteartea|asteazkena|osteguna|ostirala|larunbata)/i,
  63. };
  64. const parseDayPatterns = {
  65. narrow: [/^i/i, /^a/i, /^a/i, /^a/i, /^o/i, /^o/i, /^l/i],
  66. short: [/^ig/i, /^al/i, /^as/i, /^az/i, /^og/i, /^or/i, /^lr/i],
  67. abbreviated: [/^iga/i, /^ast/i, /^ast/i, /^ast/i, /^ost/i, /^ost/i, /^lar/i],
  68. wide: [
  69. /^igandea/i,
  70. /^astelehena/i,
  71. /^asteartea/i,
  72. /^asteazkena/i,
  73. /^osteguna/i,
  74. /^ostirala/i,
  75. /^larunbata/i,
  76. ],
  77. };
  78. const matchDayPeriodPatterns = {
  79. narrow: /^(a|p|ge|eg|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i,
  80. any: /^([ap]\.?\s?m\.?|gauerdia|eguerdia|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i,
  81. };
  82. const parseDayPeriodPatterns = {
  83. narrow: {
  84. am: /^a/i,
  85. pm: /^p/i,
  86. midnight: /^ge/i,
  87. noon: /^eg/i,
  88. morning: /goiz/i,
  89. afternoon: /arratsaldea/i,
  90. evening: /arratsaldea/i,
  91. night: /gau/i,
  92. },
  93. any: {
  94. am: /^a/i,
  95. pm: /^p/i,
  96. midnight: /^gauerdia/i,
  97. noon: /^eguerdia/i,
  98. morning: /goiz/i,
  99. afternoon: /arratsaldea/i,
  100. evening: /arratsaldea/i,
  101. night: /gau/i,
  102. },
  103. };
  104. export const match = {
  105. ordinalNumber: buildMatchPatternFn({
  106. matchPattern: matchOrdinalNumberPattern,
  107. parsePattern: parseOrdinalNumberPattern,
  108. valueCallback: (value) => parseInt(value, 10),
  109. }),
  110. era: buildMatchFn({
  111. matchPatterns: matchEraPatterns,
  112. defaultMatchWidth: "wide",
  113. parsePatterns: parseEraPatterns,
  114. defaultParseWidth: "wide",
  115. }),
  116. quarter: buildMatchFn({
  117. matchPatterns: matchQuarterPatterns,
  118. defaultMatchWidth: "wide",
  119. parsePatterns: parseQuarterPatterns,
  120. defaultParseWidth: "any",
  121. valueCallback: (index) => index + 1,
  122. }),
  123. month: buildMatchFn({
  124. matchPatterns: matchMonthPatterns,
  125. defaultMatchWidth: "wide",
  126. parsePatterns: parseMonthPatterns,
  127. defaultParseWidth: "any",
  128. }),
  129. day: buildMatchFn({
  130. matchPatterns: matchDayPatterns,
  131. defaultMatchWidth: "wide",
  132. parsePatterns: parseDayPatterns,
  133. defaultParseWidth: "wide",
  134. }),
  135. dayPeriod: buildMatchFn({
  136. matchPatterns: matchDayPeriodPatterns,
  137. defaultMatchWidth: "any",
  138. parsePatterns: parseDayPeriodPatterns,
  139. defaultParseWidth: "any",
  140. }),
  141. };