match.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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: /^(p\.?\s*n\.?\s*e\.?\s*|n\.?\s*e\.?\s*)/i,
  7. abbreviated: /^(p\.?\s*n\.?\s*e\.?\s*|n\.?\s*e\.?\s*)/i,
  8. wide: /^(przed\s*nasz(ą|a)\s*er(ą|a)|naszej\s*ery)/i,
  9. };
  10. const parseEraPatterns = {
  11. any: [/^p/i, /^n/i],
  12. };
  13. const matchQuarterPatterns = {
  14. narrow: /^[1234]/i,
  15. abbreviated: /^(I|II|III|IV)\s*kw\.?/i,
  16. wide: /^(I|II|III|IV)\s*kwarta(ł|l)/i,
  17. };
  18. const parseQuarterPatterns = {
  19. narrow: [/1/i, /2/i, /3/i, /4/i],
  20. any: [/^I kw/i, /^II kw/i, /^III kw/i, /^IV kw/i],
  21. };
  22. const matchMonthPatterns = {
  23. narrow: /^[slmkcwpg]/i,
  24. abbreviated: /^(sty|lut|mar|kwi|maj|cze|lip|sie|wrz|pa(ź|z)|lis|gru)/i,
  25. wide: /^(stycznia|stycze(ń|n)|lutego|luty|marca|marzec|kwietnia|kwiecie(ń|n)|maja|maj|czerwca|czerwiec|lipca|lipiec|sierpnia|sierpie(ń|n)|wrze(ś|s)nia|wrzesie(ń|n)|pa(ź|z)dziernika|pa(ź|z)dziernik|listopada|listopad|grudnia|grudzie(ń|n))/i,
  26. };
  27. const parseMonthPatterns = {
  28. narrow: [
  29. /^s/i,
  30. /^l/i,
  31. /^m/i,
  32. /^k/i,
  33. /^m/i,
  34. /^c/i,
  35. /^l/i,
  36. /^s/i,
  37. /^w/i,
  38. /^p/i,
  39. /^l/i,
  40. /^g/i,
  41. ],
  42. any: [
  43. /^st/i,
  44. /^lu/i,
  45. /^mar/i,
  46. /^k/i,
  47. /^maj/i,
  48. /^c/i,
  49. /^lip/i,
  50. /^si/i,
  51. /^w/i,
  52. /^p/i,
  53. /^lis/i,
  54. /^g/i,
  55. ],
  56. };
  57. const matchDayPatterns = {
  58. narrow: /^[npwścs]/i,
  59. short: /^(nie|pon|wto|(ś|s)ro|czw|pi(ą|a)|sob)/i,
  60. abbreviated: /^(niedz|pon|wt|(ś|s)r|czw|pt|sob)\.?/i,
  61. wide: /^(niedziela|poniedzia(ł|l)ek|wtorek|(ś|s)roda|czwartek|pi(ą|a)tek|sobota)/i,
  62. };
  63. const parseDayPatterns = {
  64. narrow: [/^n/i, /^p/i, /^w/i, /^ś/i, /^c/i, /^p/i, /^s/i],
  65. abbreviated: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pt/i, /^so/i],
  66. any: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pi/i, /^so/i],
  67. };
  68. const matchDayPeriodPatterns = {
  69. narrow:
  70. /^(^a$|^p$|pó(ł|l)n\.?|o\s*pó(ł|l)n\.?|po(ł|l)\.?|w\s*po(ł|l)\.?|po\s*po(ł|l)\.?|rano|wiecz\.?|noc|w\s*nocy)/i,
  71. any: /^(am|pm|pó(ł|l)noc|o\s*pó(ł|l)nocy|po(ł|l)udnie|w\s*po(ł|l)udnie|popo(ł|l)udnie|po\s*po(ł|l)udniu|rano|wieczór|wieczorem|noc|w\s*nocy)/i,
  72. };
  73. const parseDayPeriodPatterns = {
  74. narrow: {
  75. am: /^a$/i,
  76. pm: /^p$/i,
  77. midnight: /pó(ł|l)n/i,
  78. noon: /po(ł|l)/i,
  79. morning: /rano/i,
  80. afternoon: /po\s*po(ł|l)/i,
  81. evening: /wiecz/i,
  82. night: /noc/i,
  83. },
  84. any: {
  85. am: /^am/i,
  86. pm: /^pm/i,
  87. midnight: /pó(ł|l)n/i,
  88. noon: /po(ł|l)/i,
  89. morning: /rano/i,
  90. afternoon: /po\s*po(ł|l)/i,
  91. evening: /wiecz/i,
  92. night: /noc/i,
  93. },
  94. };
  95. export const match = {
  96. ordinalNumber: buildMatchPatternFn({
  97. matchPattern: matchOrdinalNumberPattern,
  98. parsePattern: parseOrdinalNumberPattern,
  99. valueCallback: (value) => parseInt(value, 10),
  100. }),
  101. era: buildMatchFn({
  102. matchPatterns: matchEraPatterns,
  103. defaultMatchWidth: "wide",
  104. parsePatterns: parseEraPatterns,
  105. defaultParseWidth: "any",
  106. }),
  107. quarter: buildMatchFn({
  108. matchPatterns: matchQuarterPatterns,
  109. defaultMatchWidth: "wide",
  110. parsePatterns: parseQuarterPatterns,
  111. defaultParseWidth: "any",
  112. valueCallback: (index) => index + 1,
  113. }),
  114. month: buildMatchFn({
  115. matchPatterns: matchMonthPatterns,
  116. defaultMatchWidth: "wide",
  117. parsePatterns: parseMonthPatterns,
  118. defaultParseWidth: "any",
  119. }),
  120. day: buildMatchFn({
  121. matchPatterns: matchDayPatterns,
  122. defaultMatchWidth: "wide",
  123. parsePatterns: parseDayPatterns,
  124. defaultParseWidth: "any",
  125. }),
  126. dayPeriod: buildMatchFn({
  127. matchPatterns: matchDayPeriodPatterns,
  128. defaultMatchWidth: "any",
  129. parsePatterns: parseDayPeriodPatterns,
  130. defaultParseWidth: "any",
  131. }),
  132. };