chrono-node 1.3.5 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/.travis.yml +2 -0
  2. package/README.md +100 -86
  3. package/dist/chrono.js +7865 -0
  4. package/dist/chrono.js.map +1 -0
  5. package/dist/chrono.min.js +3 -0
  6. package/dist/chrono.min.js.LICENSE.txt +19 -0
  7. package/dist/chrono.min.js.map +1 -0
  8. package/package.json +20 -22
  9. package/src/chrono.js +5 -3
  10. package/src/options.js +33 -3
  11. package/src/parsers/{DE → de}/DECasualDateParser.js +18 -21
  12. package/src/parsers/{DE → de}/DEDeadlineFormatParser.js +9 -9
  13. package/src/parsers/{DE → de}/DEMonthNameLittleEndianParser.js +15 -36
  14. package/src/parsers/{DE → de}/DEMonthNameParser.js +12 -27
  15. package/src/parsers/{DE → de}/DESlashDateFormatParser.js +2 -3
  16. package/src/parsers/{DE → de}/DETimeAgoFormatParser.js +9 -14
  17. package/src/parsers/{DE → de}/DETimeExpressionParser.js +2 -2
  18. package/src/parsers/{DE → de}/DEWeekdayParser.js +14 -14
  19. package/src/parsers/{EN → en}/ENCasualDateParser.js +6 -11
  20. package/src/parsers/en/ENCasualTimeParser.js +54 -0
  21. package/src/parsers/{EN → en}/ENDeadlineFormatParser.js +15 -20
  22. package/src/parsers/{EN → en}/ENISOFormatParser.js +3 -3
  23. package/src/parsers/{EN → en}/ENMonthNameLittleEndianParser.js +25 -49
  24. package/src/parsers/{EN → en}/ENMonthNameMiddleEndianParser.js +6 -23
  25. package/src/parsers/{EN → en}/ENMonthNameParser.js +5 -22
  26. package/src/parsers/{EN → en}/ENRelativeDateFormatParser.js +48 -15
  27. package/src/parsers/{EN → en}/ENSlashDateFormatParser.js +7 -3
  28. package/src/parsers/{EN → en}/ENSlashDateFormatStartWithYearParser.js +12 -5
  29. package/src/parsers/{EN → en}/ENSlashMonthFormatParser.js +2 -5
  30. package/src/parsers/en/ENTimeAgoFormatParser.js +69 -0
  31. package/src/parsers/{EN → en}/ENTimeExpressionParser.js +26 -17
  32. package/src/parsers/en/ENTimeLaterFormatParser.js +75 -0
  33. package/src/parsers/{EN → en}/ENWeekdayParser.js +8 -12
  34. package/src/parsers/{ES → es}/ESCasualDateParser.js +8 -13
  35. package/src/parsers/{ES → es}/ESDeadlineFormatParser.js +5 -11
  36. package/src/parsers/{ES → es}/ESMonthNameLittleEndianParser.js +6 -28
  37. package/src/parsers/{ES → es}/ESSlashDateFormatParser.js +2 -2
  38. package/src/parsers/{ES → es}/ESTimeAgoFormatParser.js +8 -13
  39. package/src/parsers/{ES → es}/ESTimeExpressionParser.js +2 -7
  40. package/src/parsers/{ES → es}/ESWeekdayParser.js +1 -6
  41. package/src/parsers/{FR → fr}/FRCasualDateParser.js +6 -11
  42. package/src/parsers/{FR → fr}/FRDeadlineFormatParser.js +9 -14
  43. package/src/parsers/{FR → fr}/FRMonthNameLittleEndianParser.js +4 -26
  44. package/src/parsers/{FR → fr}/FRRelativeDateFormatParser.js +29 -34
  45. package/src/parsers/{FR → fr}/FRSlashDateFormatParser.js +22 -15
  46. package/src/parsers/{FR → fr}/FRTimeAgoFormatParser.js +8 -14
  47. package/src/parsers/{FR → fr}/FRTimeExpressionParser.js +2 -7
  48. package/src/parsers/{FR → fr}/FRWeekdayParser.js +1 -6
  49. package/src/parsers/{JP → ja}/JPCasualDateParser.js +5 -10
  50. package/src/parsers/ja/JPStandardParser.js +71 -0
  51. package/src/parsers/parser.js +80 -53
  52. package/src/parsers/pt/PTCasualDateParser.js +123 -0
  53. package/src/parsers/pt/PTDeadlineFormatParser.js +61 -0
  54. package/src/parsers/pt/PTMonthNameLittleEndianParser.js +86 -0
  55. package/src/parsers/pt/PTSlashDateFormatParser.js +114 -0
  56. package/src/parsers/pt/PTTimeAgoFormatParser.js +87 -0
  57. package/src/parsers/pt/PTTimeExpressionParser.js +234 -0
  58. package/src/parsers/pt/PTWeekdayParser.js +60 -0
  59. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantCasualDateParser.js +30 -19
  60. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDateParser.js +2 -7
  61. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDeadlineFormatParser.js +14 -19
  62. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantTimeExpressionParser.js +38 -11
  63. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantWeekdayParser.js +1 -7
  64. package/src/refiners/ExtractTimezoneAbbrRefiner.js +19 -10
  65. package/src/refiners/ForwardDateRefiner.js +10 -15
  66. package/src/refiners/{DE → de}/DEMergeDateRangeRefiner.js +1 -1
  67. package/src/refiners/{DE → de}/DEMergeDateTimeRefiner.js +3 -3
  68. package/src/refiners/{EN → en}/ENMergeDateRangeRefiner.js +5 -9
  69. package/src/refiners/{EN → en}/ENMergeDateTimeRefiner.js +15 -2
  70. package/src/refiners/{EN → en}/ENMergeWeekdayRefiner.js +0 -0
  71. package/src/refiners/{EN → en}/ENPrioritizeSpecificDateRefiner.js +0 -0
  72. package/src/refiners/{FR → fr}/FRMergeDateRangeRefiner.js +0 -0
  73. package/src/refiners/{FR → fr}/FRMergeDateTimeRefiner.js +1 -1
  74. package/src/refiners/{JP → ja}/JPMergeDateRangeRefiner.js +1 -1
  75. package/src/refiners/refiner.js +12 -12
  76. package/src/result.js +47 -19
  77. package/src/timezone.js +2 -0
  78. package/src/utils/EN.js +68 -2
  79. package/src/utils/PT.js +62 -0
  80. package/test/de/de.test.js +51 -0
  81. package/test/de/de_casual.test.js +432 -0
  82. package/test/de/de_dash.test.js +6 -0
  83. package/test/de/de_deadline.test.js +244 -0
  84. package/test/de/de_little_endian.test.js +459 -0
  85. package/test/de/de_time_ago.test.js +313 -0
  86. package/test/de/de_time_exp.test.js +166 -0
  87. package/test/de/de_weekday.test.js +235 -0
  88. package/test/en/en.test.js +250 -0
  89. package/test/en/en_casual.test.js +461 -0
  90. package/test/en/en_dash.test.js +31 -0
  91. package/test/en/en_deadline.test.js +366 -0
  92. package/test/{test_example.js → en/en_example.test.js} +7 -18
  93. package/test/en/en_inter_std.test.js +269 -0
  94. package/test/en/en_little_endian.test.js +566 -0
  95. package/test/en/en_middle_endian.test.js +552 -0
  96. package/test/en/en_month.test.js +156 -0
  97. package/test/en/en_option_forward.test.js +156 -0
  98. package/test/en/en_relative.test.js +228 -0
  99. package/test/en/en_slash.test.js +450 -0
  100. package/test/en/en_time_ago.test.js +374 -0
  101. package/test/en/en_time_exp.test.js +722 -0
  102. package/test/en/en_time_from_now.test.js +371 -0
  103. package/test/en/en_time_later.test.js +95 -0
  104. package/test/en/en_weekday.test.js +301 -0
  105. package/test/es/es_casual.test.js +258 -0
  106. package/test/es/es_dash.test.js +13 -0
  107. package/test/es/es_deadline.test.js +85 -0
  108. package/test/es/es_little_endian.test.js +350 -0
  109. package/test/es/es_slash.test.js +24 -0
  110. package/test/es/es_time_ago.test.js +137 -0
  111. package/test/es/es_time_exp.test.js +240 -0
  112. package/test/fr/fr_casual.test.js +454 -0
  113. package/test/fr/fr_dash.test.js +26 -0
  114. package/test/fr/fr_deadline.test.js +244 -0
  115. package/test/fr/fr_little_endian.test.js +576 -0
  116. package/test/fr/fr_relative.test.js +198 -0
  117. package/test/fr/fr_slash.test.js +81 -0
  118. package/test/fr/fr_time_ago.test.js +194 -0
  119. package/test/fr/fr_time_exp.test.js +960 -0
  120. package/test/fr/fr_weekday.test.js +200 -0
  121. package/test/ja/ja_casual.test.js +51 -0
  122. package/test/ja/ja_standard.test.js +344 -0
  123. package/test/pt/pt_casual.test.js +258 -0
  124. package/test/pt/pt_dash.test.js +13 -0
  125. package/test/pt/pt_deadline.test.js +85 -0
  126. package/test/pt/pt_little_endian.test.js +350 -0
  127. package/test/pt/pt_slash.test.js +44 -0
  128. package/test/pt/pt_time_ago.test.js +137 -0
  129. package/test/pt/pt_time_exp.test.js +240 -0
  130. package/test/system.test.js +207 -0
  131. package/test/zh/zh_hant_casual.test.js +340 -0
  132. package/test/zh/zh_hant_date.test.js +118 -0
  133. package/test/zh/zh_hant_deadline.test.js +213 -0
  134. package/test/zh/zh_hant_time_exp.test.js +226 -0
  135. package/test/zh/zh_hant_weekday.test.js +160 -0
  136. package/webpack.config.js +39 -0
  137. package/.npmignore +0 -11
  138. package/bower.json +0 -24
  139. package/chrono.js +0 -11892
  140. package/chrono.map.json +0 -1
  141. package/chrono.min.js +0 -148
  142. package/chrono.min.json +0 -1
  143. package/karma.conf.js +0 -68
  144. package/src/parsers/EN/ENCasualTimeParser.js +0 -53
  145. package/src/parsers/EN/ENTimeAgoFormatParser.js +0 -130
  146. package/src/parsers/EN/ENTimeFromNowFormatParser.js +0 -119
  147. package/src/parsers/JP/JPStandardParser.js +0 -88
  148. package/test/test_de.js +0 -62
  149. package/test/test_de_casual.js +0 -443
  150. package/test/test_de_dash.js +0 -17
  151. package/test/test_de_deadline.js +0 -255
  152. package/test/test_de_little_endian.js +0 -470
  153. package/test/test_de_time_ago.js +0 -324
  154. package/test/test_de_time_exp.js +0 -177
  155. package/test/test_de_weekday.js +0 -246
  156. package/test/test_en.js +0 -249
  157. package/test/test_en_casual.js +0 -448
  158. package/test/test_en_dash.js +0 -42
  159. package/test/test_en_deadline.js +0 -311
  160. package/test/test_en_inter_std.js +0 -272
  161. package/test/test_en_little_endian.js +0 -529
  162. package/test/test_en_middle_endian.js +0 -563
  163. package/test/test_en_month.js +0 -124
  164. package/test/test_en_option_forward.js +0 -167
  165. package/test/test_en_relative.js +0 -206
  166. package/test/test_en_slash.js +0 -370
  167. package/test/test_en_time_ago.js +0 -385
  168. package/test/test_en_time_exp.js +0 -663
  169. package/test/test_en_time_from_now.js +0 -345
  170. package/test/test_en_weekday.js +0 -312
  171. package/test/test_es_casual.js +0 -269
  172. package/test/test_es_dash.js +0 -24
  173. package/test/test_es_deadline.js +0 -96
  174. package/test/test_es_little_endian.js +0 -361
  175. package/test/test_es_slash.js +0 -35
  176. package/test/test_es_time_ago.js +0 -148
  177. package/test/test_es_time_exp.js +0 -251
  178. package/test/test_fr_casual.js +0 -465
  179. package/test/test_fr_dash.js +0 -37
  180. package/test/test_fr_deadline.js +0 -255
  181. package/test/test_fr_little_endian.js +0 -568
  182. package/test/test_fr_relative.js +0 -209
  183. package/test/test_fr_slash.js +0 -54
  184. package/test/test_fr_time_ago.js +0 -205
  185. package/test/test_fr_time_exp.js +0 -971
  186. package/test/test_fr_weekday.js +0 -211
  187. package/test/test_jp_casual.js +0 -62
  188. package/test/test_jp_standard.js +0 -181
  189. package/test/test_system.js +0 -178
  190. package/test/test_zh_hant_casual.js +0 -329
  191. package/test/test_zh_hant_date.js +0 -129
  192. package/test/test_zh_hant_deadline.js +0 -224
  193. package/test/test_zh_hant_time_exp.js +0 -210
  194. package/test/test_zh_hant_weekday.js +0 -171
  195. package/timezone.js +0 -9
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://chrono/webpack/universalModuleDefinition","webpack://chrono/webpack/bootstrap","webpack://chrono/./src/result.js","webpack://chrono/./src/parsers/parser.js","webpack://chrono/./node_modules/dayjs/dayjs.min.js","webpack://chrono/./src/refiners/refiner.js","webpack://chrono/./src/utils/EN.js","webpack://chrono/./src/parsers/en/ENWeekdayParser.js","webpack://chrono/./src/refiners/en/ENMergeDateTimeRefiner.js","webpack://chrono/./src/utils/ZH-Hant.js","webpack://chrono/./src/utils/DE.js","webpack://chrono/./src/utils/FR.js","webpack://chrono/./src/refiners/en/ENMergeDateRangeRefiner.js","webpack://chrono/./src/chrono.js","webpack://chrono/./src/options.js","webpack://chrono/./src/parsers/en/ENISOFormatParser.js","webpack://chrono/./src/parsers/en/ENDeadlineFormatParser.js","webpack://chrono/./src/parsers/en/ENRelativeDateFormatParser.js","webpack://chrono/./src/parsers/en/ENMonthNameLittleEndianParser.js","webpack://chrono/./src/parsers/en/ENMonthNameMiddleEndianParser.js","webpack://chrono/./src/parsers/en/ENMonthNameParser.js","webpack://chrono/./src/parsers/en/ENSlashDateFormatParser.js","webpack://chrono/./src/parsers/en/ENSlashDateFormatStartWithYearParser.js","webpack://chrono/./src/parsers/en/ENSlashMonthFormatParser.js","webpack://chrono/./src/parsers/en/ENTimeAgoFormatParser.js","webpack://chrono/./src/parsers/en/ENTimeExpressionParser.js","webpack://chrono/./src/parsers/en/ENTimeLaterFormatParser.js","webpack://chrono/./src/parsers/en/ENCasualDateParser.js","webpack://chrono/./src/parsers/en/ENCasualTimeParser.js","webpack://chrono/./src/parsers/ja/JPStandardParser.js","webpack://chrono/./src/utils/JP.js","webpack://chrono/./src/parsers/ja/JPCasualDateParser.js","webpack://chrono/./src/parsers/pt/PTCasualDateParser.js","webpack://chrono/./src/parsers/pt/PTDeadlineFormatParser.js","webpack://chrono/./src/parsers/pt/PTMonthNameLittleEndianParser.js","webpack://chrono/./src/utils/PT.js","webpack://chrono/./src/parsers/pt/PTSlashDateFormatParser.js","webpack://chrono/./src/parsers/pt/PTTimeAgoFormatParser.js","webpack://chrono/./src/parsers/pt/PTTimeExpressionParser.js","webpack://chrono/./src/parsers/pt/PTWeekdayParser.js","webpack://chrono/./src/parsers/es/ESCasualDateParser.js","webpack://chrono/./src/parsers/es/ESDeadlineFormatParser.js","webpack://chrono/./src/parsers/es/ESTimeAgoFormatParser.js","webpack://chrono/./src/parsers/es/ESTimeExpressionParser.js","webpack://chrono/./src/parsers/es/ESWeekdayParser.js","webpack://chrono/./src/parsers/es/ESMonthNameLittleEndianParser.js","webpack://chrono/./src/utils/ES.js","webpack://chrono/./src/parsers/es/ESSlashDateFormatParser.js","webpack://chrono/./src/parsers/fr/FRCasualDateParser.js","webpack://chrono/./src/parsers/fr/FRDeadlineFormatParser.js","webpack://chrono/./src/parsers/fr/FRMonthNameLittleEndianParser.js","webpack://chrono/./src/parsers/fr/FRSlashDateFormatParser.js","webpack://chrono/./src/parsers/fr/FRTimeAgoFormatParser.js","webpack://chrono/./src/parsers/fr/FRTimeExpressionParser.js","webpack://chrono/./src/parsers/fr/FRWeekdayParser.js","webpack://chrono/./src/parsers/fr/FRRelativeDateFormatParser.js","webpack://chrono/./node_modules/dayjs/plugin/quarterOfYear.js","webpack://chrono/./src/parsers/zh-Hant/ZHHantDateParser.js","webpack://chrono/./src/parsers/zh-Hant/ZHHantWeekdayParser.js","webpack://chrono/./src/parsers/zh-Hant/ZHHantTimeExpressionParser.js","webpack://chrono/./src/parsers/zh-Hant/ZHHantCasualDateParser.js","webpack://chrono/./src/parsers/zh-Hant/ZHHantDeadlineFormatParser.js","webpack://chrono/./src/parsers/de/DEDeadlineFormatParser.js","webpack://chrono/./src/parsers/de/DEMonthNameLittleEndianParser.js","webpack://chrono/./src/parsers/de/DEMonthNameParser.js","webpack://chrono/./src/parsers/de/DESlashDateFormatParser.js","webpack://chrono/./src/parsers/de/DETimeAgoFormatParser.js","webpack://chrono/./src/parsers/de/DETimeExpressionParser.js","webpack://chrono/./src/parsers/de/DEWeekdayParser.js","webpack://chrono/./src/parsers/de/DECasualDateParser.js","webpack://chrono/./src/refiners/OverlapRemovalRefiner.js","webpack://chrono/./src/refiners/ExtractTimezoneOffsetRefiner.js","webpack://chrono/./src/refiners/ExtractTimezoneAbbrRefiner.js","webpack://chrono/./src/refiners/ForwardDateRefiner.js","webpack://chrono/./src/refiners/UnlikelyFormatFilter.js","webpack://chrono/./src/refiners/en/ENPrioritizeSpecificDateRefiner.js","webpack://chrono/./src/refiners/ja/JPMergeDateRangeRefiner.js","webpack://chrono/./src/refiners/fr/FRMergeDateRangeRefiner.js","webpack://chrono/./src/refiners/fr/FRMergeDateTimeRefiner.js","webpack://chrono/./src/refiners/de/DEMergeDateRangeRefiner.js","webpack://chrono/./src/refiners/de/DEMergeDateTimeRefiner.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","dayjs","require","ParsedResult","result","ref","index","text","tags","start","ParsedComponents","end","components","knownValues","impliedValues","imply","date","month","year","clone","JSON","parse","stringify","hasPossibleDates","isPossibleDate","isOnlyWeekday","isOnlyWeekdayComponent","isOnlyDayMonth","isOnlyDayMonthComponent","component","assign","isCertain","dateMoment","adjustTimezoneOffset","utcOffset","add","toDate","currentTimezoneOffset","hour","minute","second","millisecond","undefined","moment","Parser","config","strictMode","strict","isStrictMode","pattern","extract","match","opt","execute","results","regex","remainingText","exec","length","substring","push","refiners","forEach","refiner","refine","options","findYearClosestToRef","day","refMoment","nextYear","lastYear","Math","abs","diff","ENISOFormatParser","ENDeadlineFormatParser","ENRelativeDateFormatParser","ENMonthNameLittleEndianParser","ENMonthNameMiddleEndianParser","ENMonthNameParser","ENSlashDateFormatParser","ENSlashDateFormatStartWithYearParser","ENSlashMonthFormatParser","ENTimeAgoFormatParser","ENTimeExpressionParser","ENTimeLaterFormatParser","ENWeekdayParser","ENCasualDateParser","ENCasualTimeParser","JPStandardParser","JPCasualDateParser","PTCasualDateParser","PTDeadlineFormatParser","PTMonthNameLittleEndianParser","PTSlashDateFormatParser","PTTimeAgoFormatParser","PTTimeExpressionParser","PTWeekdayParser","ESCasualDateParser","ESDeadlineFormatParser","ESTimeAgoFormatParser","ESTimeExpressionParser","ESWeekdayParser","ESMonthNameLittleEndianParser","ESSlashDateFormatParser","FRCasualDateParser","FRDeadlineFormatParser","FRMonthNameLittleEndianParser","FRSlashDateFormatParser","FRTimeAgoFormatParser","FRTimeExpressionParser","FRWeekdayParser","FRRelativeDateFormatParser","ZHHantDateParser","ZHHantWeekdayParser","ZHHantTimeExpressionParser","ZHHantCasualDateParser","ZHHantDeadlineFormatParser","DEDeadlineFormatParser","DEMonthNameLittleEndianParser","DEMonthNameParser","DESlashDateFormatParser","DETimeAgoFormatParser","DETimeExpressionParser","DEWeekdayParser","DECasualDateParser","e","u","a","h","f","String","Array","join","z","floor","Number","ceil","M","y","w","ms","Q","toLowerCase","replace","$","weekdays","split","months","v","g","format","pl","D","locale","$L","utc","$u","$offset","$d","Date","NaN","test","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","apply","slice","$locale","weekStart","$set","min","daysInMonth","round","subtract","substr","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","toJSON","toISOString","toUTCString","extend","isDayjs","en","Ls","Refiner","Filter","filteredResult","OverlapRemovalRefiner","ExtractTimezoneOffsetRefiner","ExtractTimezoneAbbrRefiner","ForwardDateRefiner","UnlikelyFormatFilter","ENMergeDateTimeRefiner","ENMergeDateRangeRefiner","ENPrioritizeSpecificDateRefiner","JPMergeDateRangeRefiner","FRMergeDateRangeRefiner","FRMergeDateTimeRefiner","DEMergeDateRangeRefiner","DEMergeDateTimeRefiner","WEEKDAY_OFFSET","MONTH_OFFSET","MONTH_PATTERN","keys","INTEGER_WORDS","INTEGER_WORDS_PATTERN","ORDINAL_WORDS","ORDINAL_WORDS_PATTERN","TIME_UNIT","PATTERN_TIME_UNIT","RegExp","collectDateTimeFragment","fragments","num","parseFloat","TIME_UNIT_PATTERN","TIME_UNIT_STRICT_PATTERN","extractDateTimeUnitFragments","timeunitText","DAYS_OFFSET","PATTERN","updateParsedComponent","offset","modifier","startMoment","startMomentFixed","refOffset","arguments","dayOfWeek","prefix","postfix","norm","isDateOnly","isTimeOnly","isAbleToMerge","prevResult","curResult","mergeDateTimeComponent","dateComponent","timeComponent","dateTimeComponent","mergeResult","dateResult","timeResult","beginDate","beginTime","beginDateTime","endDate","endTime","endDateTime","startIndex","endIndex","max","tag","mergedResult","currResult","NUMBER","zhStringToNumber","number","char","zhStringToYear","string","parseInt","result1","result2","begin","fromResult","toResult","fromMoment","toMoment","tmp","constructor","parser","Chrono","option","casualOption","parsers","refDate","forwardDate","allResults","concat","sort","b","parseDate","strictOption","casual","mergeOptions","commonPostProcessing","en_GB","de","pt","es","fr","ja","addedTypes","mergedOption","strictConfig","zh","unshift","littleEndian","minuteOffset","hourOffset","util","STRICT_PATTERN","trim","weekday","yearBE","MONTH_GROUP","DAY_GROUP","indexOf","tday","argument","FIRST_REG_PATTERN","SECOND_REG_PATTERN","ampm","suffix","preamble","lowerText","TIME_MATCH","toHankaku","fromCharCode","alphaNum","token","charCodeAt","toZenkaku","secondMatch","firstMatch","isNaN","quarterOfYear","multiplier","modifierFactor","total","dateFrom","dateTo","relative","dateTmp","quarter","patternString1","patternString2","ZHTimeExpressionParser","day1","day3","zhAMPM1","zhAMPM2","zhAMPM3","endMoment","time1","time2","timeString3","time3","unitAbbr","filteredResults","TIMEZONE_OFFSET_PATTERN","timezoneOffset","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","timezones","timezoneAbbr","toUpperCase","isMoreSpecific","moreSpecific","textBetween","includesRelativeResult","referToSameDate","specificResult","nonSpecificResult","isWeekdayResult"],"mappings":"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AAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,GAAG,MAAQ,IAAI,MAAQ,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,GAAG,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,OAAS,IAAI,MAAQ,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,EAAE,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,MAAQ,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,EAAE,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,GAAG,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,GAAG,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,K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","file":"chrono.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"chrono\"] = factory();\n\telse\n\t\troot[\"chrono\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","const dayjs = require('dayjs');\n\nfunction ParsedResult(result){\n result = result || {};\n\n this.ref = result.ref;\n this.index = result.index;\n this.text = result.text;\n this.tags = result.tags || {};\n\n this.start = new ParsedComponents(result.start, result.ref)\n if(result.end){\n this.end = new ParsedComponents(result.end, result.ref)\n }\n}\n\nParsedResult.prototype.clone = function() {\n var result = new ParsedResult(this);\n result.tags = JSON.parse(JSON.stringify(this.tags));\n result.start = this.start.clone();\n if (this.end) {\n result.end = this.end.clone();\n }\n\n return result\n}\n\nParsedResult.prototype.date = function() {\n return this.start.date();\n}\n\nParsedResult.prototype.hasPossibleDates = function() {\n return this.start.isPossibleDate() && (!this.end || this.end.isPossibleDate());\n}\n\nParsedResult.prototype.isOnlyWeekday = function() {\n return this.start.isOnlyWeekdayComponent();\n}\n\nParsedResult.prototype.isOnlyDayMonth = function() {\n return this.start.isOnlyDayMonthComponent();\n}\n\nfunction ParsedComponents (components, ref){\n\n this.knownValues = {};\n this.impliedValues = {};\n\n if (components) {\n for (key in components) {\n this.knownValues[key] = components[key];\n }\n }\n\n if (ref) {\n ref = dayjs(ref);\n this.imply('day', ref.date())\n this.imply('month', ref.month() + 1)\n this.imply('year', ref.year())\n }\n \n\n this.imply('hour', 12);\n this.imply('minute', 0);\n this.imply('second', 0);\n this.imply('millisecond', 0);\n}\n\nParsedComponents.prototype.clone = function () {\n var component = new ParsedComponents();\n component.knownValues = JSON.parse(JSON.stringify(this.knownValues));\n component.impliedValues = JSON.parse(JSON.stringify(this.impliedValues));\n return component;\n};\n\nParsedComponents.prototype.get = function(component, value) {\n if (component in this.knownValues) return this.knownValues[component];\n if (component in this.impliedValues) return this.impliedValues[component];\n};\n\nParsedComponents.prototype.assign = function(component, value) {\n this.knownValues[component] = value;\n delete this.impliedValues[component];\n};\n\nParsedComponents.prototype.imply = function(component, value) {\n if (component in this.knownValues) return;\n this.impliedValues[component] = value;\n};\n\nParsedComponents.prototype.isCertain = function(component) {\n return component in this.knownValues;\n};\n\nParsedComponents.prototype.isOnlyWeekdayComponent = function() {\n return this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n};\n\nParsedComponents.prototype.isOnlyDayMonthComponent = function() {\n return this.isCertain('day') && this.isCertain('month') && !this.isCertain('year');\n};\n\nParsedComponents.prototype.isPossibleDate = function() {\n var dateMoment = this.dayjs();\n if (this.isCertain('timezoneOffset')) {\n const adjustTimezoneOffset = this.get('timezoneOffset') - dateMoment.utcOffset();\n dateMoment = dateMoment.add(adjustTimezoneOffset, 'minutes');\n }\n\n if (dateMoment.get('year') != this.get('year')) return false;\n if (dateMoment.get('month') != this.get('month')-1) return false;\n if (dateMoment.get('date') != this.get('day')) return false;\n if (dateMoment.get('hour') != this.get('hour')) return false;\n if (dateMoment.get('minute') != this.get('minute')) return false;\n\n return true;\n};\n\nParsedComponents.prototype.date = function() {\n var result = this.dayjs();\n return result.toDate();\n};\n\n\nParsedComponents.prototype.dayjs = function() {\n var result = dayjs();\n\n result = result.year(this.get('year'));\n result = result.month(this.get('month') - 1);\n result = result.date(this.get('day'));\n result = result.hour(this.get('hour'));\n result = result.minute(this.get('minute'));\n result = result.second(this.get('second'));\n result = result.millisecond(this.get('millisecond'));\n\n // Javascript Date Object return minus timezone offset\n var currentTimezoneOffset = result.utcOffset();\n var targetTimezoneOffset = this.get('timezoneOffset') !== undefined ? \n this.get('timezoneOffset') : currentTimezoneOffset;\n\n var adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset;\n result = result.add(-adjustTimezoneOffset, 'minute');\n\n return result;\n};\n\nParsedComponents.prototype.moment = function() {\n // Keep for compatibility\n return this.dayjs();\n};\n\n\n\nexports.ParsedComponents = ParsedComponents;\nexports.ParsedResult = ParsedResult;\n","const dayjs = require('dayjs');\n\nexports.Parser = function (config) {\n\n config = config || {};\n var strictMode = config.strict;\n\n this.isStrictMode = function() { return (strictMode == true) };\n\n this.pattern = function() { return /./i; }\n\n this.extract = function(text, ref, match, opt){ return null; }\n\n this.execute = function(text, ref, opt) {\n\n var results = [];\n var regex = this.pattern();\n\n var remainingText = text;\n var match = regex.exec(remainingText);\n\n while (match) {\n\n // Calculate match index on the full text;\n match.index += text.length - remainingText.length;\n\n var result = this.extract(text, ref, match, opt);\n if (result) {\n\n // If success, start from the end of the result\n remainingText = text.substring(result.index + result.text.length);\n\n if (!this.isStrictMode() || result.hasPossibleDates()) {\n results.push(result);\n }\n\n } else {\n // If fail, move on by 1\n remainingText = text.substring(match.index + 1);\n }\n\n match = regex.exec(remainingText);\n }\n\n if (this.refiners) {\n this.refiners.forEach(function () {\n results = refiner.refine(results, text, options);\n });\n }\n\n return results;\n }\n}\n\nexports.findYearClosestToRef = function (ref, day, month) {\n //Find the most appropriated year\n const refMoment = dayjs(ref);\n var dateMoment = refMoment;\n dateMoment = dateMoment.month(month - 1);\n dateMoment = dateMoment.date(day);\n dateMoment = dateMoment.year(refMoment.year())\n\n const nextYear = dateMoment.add(1, 'y');\n const lastYear = dateMoment.add(-1, 'y');\n if( Math.abs(nextYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = nextYear;\n }\n else if( Math.abs(lastYear.diff(refMoment)) < Math.abs(dateMoment.diff(refMoment)) ){\n dateMoment = lastYear;\n }\n\n return dateMoment.year();\n}\n\nexports.ENISOFormatParser = require('./en/ENISOFormatParser').Parser;\nexports.ENDeadlineFormatParser = require('./en/ENDeadlineFormatParser').Parser;\nexports.ENRelativeDateFormatParser = require('./en/ENRelativeDateFormatParser').Parser;\nexports.ENMonthNameLittleEndianParser = require('./en/ENMonthNameLittleEndianParser').Parser;\nexports.ENMonthNameMiddleEndianParser = require('./en/ENMonthNameMiddleEndianParser').Parser;\nexports.ENMonthNameParser = require('./en/ENMonthNameParser').Parser;\nexports.ENSlashDateFormatParser = require('./en/ENSlashDateFormatParser').Parser;\nexports.ENSlashDateFormatStartWithYearParser = require('./en/ENSlashDateFormatStartWithYearParser').Parser;\nexports.ENSlashMonthFormatParser = require('./en/ENSlashMonthFormatParser').Parser;\nexports.ENTimeAgoFormatParser = require('./en/ENTimeAgoFormatParser').Parser;\nexports.ENTimeExpressionParser = require('./en/ENTimeExpressionParser').Parser;\nexports.ENTimeLaterFormatParser = require('./en/ENTimeLaterFormatParser').Parser;\nexports.ENWeekdayParser = require('./en/ENWeekdayParser').Parser;\nexports.ENCasualDateParser = require('./en/ENCasualDateParser').Parser;\nexports.ENCasualTimeParser = require('./en/ENCasualTimeParser').Parser;\n\nexports.JPStandardParser = require('./ja/JPStandardParser').Parser;\nexports.JPCasualDateParser = require('./ja/JPCasualDateParser').Parser;\n\nexports.PTCasualDateParser = require('./pt/PTCasualDateParser').Parser;\nexports.PTDeadlineFormatParser = require('./pt/PTDeadlineFormatParser').Parser;\nexports.PTMonthNameLittleEndianParser = require('./pt/PTMonthNameLittleEndianParser').Parser;\nexports.PTSlashDateFormatParser = require('./pt/PTSlashDateFormatParser').Parser;\nexports.PTTimeAgoFormatParser = require('./pt/PTTimeAgoFormatParser').Parser;\nexports.PTTimeExpressionParser = require('./pt/PTTimeExpressionParser').Parser;\nexports.PTWeekdayParser = require('./pt/PTWeekdayParser').Parser;\n\nexports.ESCasualDateParser = require('./es/ESCasualDateParser').Parser;\nexports.ESDeadlineFormatParser = require('./es/ESDeadlineFormatParser').Parser;\nexports.ESTimeAgoFormatParser = require('./es/ESTimeAgoFormatParser').Parser;\nexports.ESTimeExpressionParser = require('./es/ESTimeExpressionParser').Parser;\nexports.ESWeekdayParser = require('./es/ESWeekdayParser').Parser;\nexports.ESMonthNameLittleEndianParser = require('./es/ESMonthNameLittleEndianParser').Parser;\nexports.ESSlashDateFormatParser = require('./es/ESSlashDateFormatParser').Parser;\n\nexports.FRCasualDateParser = require('./fr/FRCasualDateParser').Parser;\nexports.FRDeadlineFormatParser = require('./fr/FRDeadlineFormatParser').Parser;\nexports.FRMonthNameLittleEndianParser = require('./fr/FRMonthNameLittleEndianParser').Parser;\nexports.FRSlashDateFormatParser = require('./fr/FRSlashDateFormatParser').Parser;\nexports.FRTimeAgoFormatParser = require('./fr/FRTimeAgoFormatParser').Parser;\nexports.FRTimeExpressionParser = require('./fr/FRTimeExpressionParser').Parser;\nexports.FRWeekdayParser = require('./fr/FRWeekdayParser').Parser;\nexports.FRRelativeDateFormatParser = require('./fr/FRRelativeDateFormatParser').Parser;\n\nexports.ZHHantDateParser = require('./zh-Hant/ZHHantDateParser').Parser;\nexports.ZHHantWeekdayParser = require('./zh-Hant/ZHHantWeekdayParser').Parser;\nexports.ZHHantTimeExpressionParser = require('./zh-Hant/ZHHantTimeExpressionParser').Parser;\nexports.ZHHantCasualDateParser = require('./zh-Hant/ZHHantCasualDateParser').Parser;\nexports.ZHHantDeadlineFormatParser = require('./zh-Hant/ZHHantDeadlineFormatParser').Parser;\n\nexports.DEDeadlineFormatParser = require('./de/DEDeadlineFormatParser').Parser;\nexports.DEMonthNameLittleEndianParser = require('./de/DEMonthNameLittleEndianParser').Parser;\nexports.DEMonthNameParser = require('./de/DEMonthNameParser').Parser;\nexports.DESlashDateFormatParser = require('./de/DESlashDateFormatParser').Parser;\nexports.DETimeAgoFormatParser = require('./de/DETimeAgoFormatParser').Parser;\nexports.DETimeExpressionParser = require('./de/DETimeExpressionParser').Parser;\nexports.DEWeekdayParser = require('./de/DEWeekdayParser').Parser;\nexports.DECasualDateParser = require('./de/DECasualDateParser').Parser;\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.dayjs=n()}(this,function(){\"use strict\";var t=\"millisecond\",n=\"second\",e=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",o=\"quarter\",a=\"year\",h=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:\"\"+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return e||(l=r),r},g=function(t,n,e){if(y(t))return t.clone();var r=n?\"string\"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u,$offset:n.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if(\"string\"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)<this.startOf(n)},d.isBefore=function(t,n){return this.endOf(n)<g(t)},d.$g=function(t,n,e){return D.u(t)?this[n]:this.set(e,t)},d.year=function(t){return this.$g(t,\"$y\",a)},d.month=function(t){return this.$g(t,\"$M\",u)},d.day=function(t){return this.$g(t,\"$W\",i)},d.date=function(t){return this.$g(t,\"$D\",\"date\")},d.hour=function(t){return this.$g(t,\"$H\",r)},d.minute=function(t){return this.$g(t,\"$m\",e)},d.second=function(t){return this.$g(t,\"$s\",n)},d.millisecond=function(n){return this.$g(n,\"$ms\",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,n){var e=D.w(h.$u?Date.UTC(h.$y,n,t):new Date(h.$y,n,t),h);return f?e:e.endOf(i)},$=function(t,n){return D.w(h.toDate()[t].apply(h.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(n)),h)},l=this.$W,m=this.$M,y=this.$D,M=\"set\"+(this.$u?\"UTC\":\"\");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case\"date\":return $(M+\"Hours\",0);case r:return $(M+\"Minutes\",1);case e:return $(M+\"Seconds\",2);case n:return $(M+\"Milliseconds\",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c=\"set\"+(this.$u?\"UTC\":\"\"),d=(h={},h[i]=c+\"Date\",h.date=c+\"Date\",h[u]=c+\"Month\",h[a]=c+\"FullYear\",h[r]=c+\"Hours\",h[e]=c+\"Minutes\",h[n]=c+\"Seconds\",h[t]=c+\"Milliseconds\",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set(\"date\",1);l.$d[d]($),l.init(),this.$d=l.set(\"date\",Math.min(this.$D,l.daysInMonth())).toDate()}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,n){return this.clone().$set(t,n)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(n){var e=g(f);return D.w(e.date(e.date()+Math.round(n*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[e]=6e4,h[r]=36e5,h[n]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,n){return this.add(-1*t,n)},d.format=function(t){var n=this;if(!this.isValid())return\"Invalid Date\";var e=t||\"YYYY-MM-DDTHH:mm:ssZ\",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(n,e))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,\"0\")},$=i.meridiem||function(t,n,e){var r=t<12?\"AM\":\"PM\";return e?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,\"0\"),MMM:c(i.monthsShort,o,h,3),MMMM:h[o]||h(this,e),D:this.$D,DD:D.s(this.$D,2,\"0\"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,\"0\"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,\"0\"),s:String(this.$s),ss:D.s(this.$s,2,\"0\"),SSS:D.s(this.$ms,3,\"0\"),Z:r};return e.replace(f,function(t,n){return n||l[t]||r.replace(\":\",\"\")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[e]=m/6e4,c[n]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,n){if(!t)return this.$L;var e=this.clone(),r=M(t,n,!0);return r&&(e.$L=r),e},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,n){return t(n,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});\n","\nexports.Refiner = function Refiner() { \n\n this.refine = function(text, results, opt) { return results; };\n}\n\nexports.Filter = function Filter() { \n \n exports.Refiner.call(this);\n\n this.isValid = function(text, result, opt) { return true; }\n this.refine = function(text, results, opt) { \n\n var filteredResult = [];\n for (var i=0; i < results.length; i++) {\n\n var result = results[i];\n if (this.isValid(text, result, opt)) {\n filteredResult.push(result);\n }\n }\n\n return filteredResult;\n }\n}\n\n\n// Common refiners\nexports.OverlapRemovalRefiner = require('./OverlapRemovalRefiner').Refiner;\nexports.ExtractTimezoneOffsetRefiner = require('./ExtractTimezoneOffsetRefiner').Refiner;\nexports.ExtractTimezoneAbbrRefiner = require('./ExtractTimezoneAbbrRefiner').Refiner;\nexports.ForwardDateRefiner = require('./ForwardDateRefiner').Refiner;\nexports.UnlikelyFormatFilter = require('./UnlikelyFormatFilter').Refiner;\n\n// en refiners\nexports.ENMergeDateTimeRefiner = require('./en/ENMergeDateTimeRefiner').Refiner;\nexports.ENMergeDateRangeRefiner = require('./en/ENMergeDateRangeRefiner').Refiner;\nexports.ENPrioritizeSpecificDateRefiner = require('./en/ENPrioritizeSpecificDateRefiner').Refiner;\n\n// ja refiners\nexports.JPMergeDateRangeRefiner = require('./ja/JPMergeDateRangeRefiner').Refiner;\n\n// fr refiners\nexports.FRMergeDateRangeRefiner = require('./fr/FRMergeDateRangeRefiner').Refiner;\nexports.FRMergeDateTimeRefiner = require('./fr/FRMergeDateTimeRefiner').Refiner;\n\n// de refiners\nexports.DEMergeDateRangeRefiner = require('./de/DEMergeDateRangeRefiner').Refiner;\nexports.DEMergeDateTimeRefiner = require('./de/DEMergeDateTimeRefiner').Refiner;\n","exports.WEEKDAY_OFFSET = { \n 'sunday': 0, \n 'sun': 0, \n 'monday': 1, \n 'mon': 1,\n 'tuesday': 2, \n 'tue':2, \n 'wednesday': 3, \n 'wed': 3, \n 'thursday': 4, \n 'thur': 4, \n 'thu': 4,\n 'friday': 5, \n 'fri': 5,\n 'saturday': 6, \n 'sat': 6\n};\n \nexports.MONTH_OFFSET = { \n 'january': 1,\n 'jan': 1,\n 'jan.': 1,\n 'february': 2,\n 'feb': 2,\n 'feb.': 2,\n 'march': 3,\n 'mar': 3,\n 'mar.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'may': 5,\n 'june': 6,\n 'jun': 6,\n 'jun.': 6,\n 'july': 7,\n 'jul': 7,\n 'jul.': 7,\n 'august': 8,\n 'aug': 8,\n 'aug.': 8,\n 'september': 9,\n 'sep': 9,\n 'sep.': 9,\n 'sept': 9,\n 'sept.': 9,\n 'october': 10,\n 'oct': 10,\n 'oct.': 10,\n 'november': 11,\n 'nov': 11,\n 'nov.': 11,\n 'december': 12,\n 'dec': 12,\n 'dec.': 12\n};\n\nexports.MONTH_PATTERN = '(?:' \n + Object.keys(exports.MONTH_OFFSET).join('|').replace(/\\./g, '\\\\.')\n + ')';\n\nexports.INTEGER_WORDS = {\n 'one' : 1,\n 'two' : 2,\n 'three' : 3,\n 'four' : 4,\n 'five' : 5,\n 'six' : 6,\n 'seven' : 7,\n 'eight' : 8,\n 'nine' : 9,\n 'ten' : 10,\n 'eleven' : 11,\n 'twelve' : 12\n};\nexports.INTEGER_WORDS_PATTERN = '(?:' \n + Object.keys(exports.INTEGER_WORDS).join('|') \n +')';\n\nexports.ORDINAL_WORDS = {\n 'first' : 1,\n 'second': 2,\n 'third': 3,\n 'fourth': 4,\n 'fifth': 5,\n 'sixth': 6,\n 'seventh': 7,\n 'eighth': 8,\n 'ninth': 9,\n 'tenth': 10,\n 'eleventh': 11,\n 'twelfth': 12,\n 'thirteenth': 13,\n 'fourteenth': 14,\n 'fifteenth': 15,\n 'sixteenth': 16,\n 'seventeenth': 17,\n 'eighteenth': 18,\n 'nineteenth': 19,\n 'twentieth': 20,\n 'twenty first': 21,\n 'twenty second': 22,\n 'twenty third': 23,\n 'twenty fourth': 24,\n 'twenty fifth': 25,\n 'twenty sixth': 26,\n 'twenty seventh': 27,\n 'twenty eighth': 28,\n 'twenty ninth': 29,\n 'thirtieth': 30,\n 'thirty first': 31\n};\nexports.ORDINAL_WORDS_PATTERN = '(?:' \n + Object.keys(exports.ORDINAL_WORDS).join('|').replace(/ /g, '[ -]') \n + ')';\n\nvar TIME_UNIT = \n '(' + exports.INTEGER_WORDS_PATTERN + '|[0-9]+|[0-9]+\\.[0-9]+|an?(?:\\\\s*few)?|half(?:\\\\s*an?)?)\\\\s*' +\n '(sec(?:onds?)?|min(?:ute)?s?|hours?|weeks?|days?|months?|years?)\\\\s*';\n\nvar TIME_UNIT_STRICT = \n '(?:[0-9]+|an?)\\\\s*' +\n '(?:seconds?|minutes?|hours?|days?)\\\\s*';\n\nvar PATTERN_TIME_UNIT = new RegExp(TIME_UNIT, 'i');\n\nexports.TIME_UNIT_PATTERN = '(?:' + TIME_UNIT + ')+';\nexports.TIME_UNIT_STRICT_PATTERN = '(?:' + TIME_UNIT_STRICT + ')+';\n\nexports.extractDateTimeUnitFragments = function (timeunitText) {\n var fragments = {};\n var remainingText = timeunitText;\n var match = PATTERN_TIME_UNIT.exec(remainingText);\n while (match) {\n collectDateTimeFragment(match, fragments);\n remainingText = remainingText.substring(match[0].length);\n match = PATTERN_TIME_UNIT.exec(remainingText);\n }\n return fragments;\n};\n\nfunction collectDateTimeFragment(match, fragments) {\n var num = match[1].toLowerCase() ;\n if (exports.INTEGER_WORDS[num] !== undefined) {\n num = exports.INTEGER_WORDS[num];\n } else if(num === 'a' || num === 'an'){\n num = 1;\n } else if (num.match(/few/)) {\n num = 3;\n } else if (num.match(/half/)) {\n num = 0.5;\n } else {\n num = parseFloat(num);\n }\n\n if (match[2].match(/hour/i)) {\n fragments['hour'] = num;\n } else if (match[2].match(/min/i)) {\n fragments['minute'] = num;\n } else if (match[2].match(/sec/i)) {\n fragments['second'] = num;\n } else if (match[2].match(/week/i)) {\n fragments['week'] = num;\n } else if (match[2].match(/day/i)) {\n fragments['d'] = num;\n } else if (match[2].match(/month/i)) {\n fragments['month'] = num;\n } else if (match[2].match(/year/i)) {\n fragments['year'] = num;\n }\n\n return fragments;\n}","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar DAYS_OFFSET = { 'sunday': 0, 'sun': 0, 'monday': 1, 'mon': 1,'tuesday': 2, 'tues':2, 'tue':2, 'wednesday': 3, 'wed': 3,\n 'thursday': 4, 'thurs':4, 'thur': 4, 'thu': 4,'friday': 5, 'fri': 5,'saturday': 6, 'sat': 6};\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:on\\\\s*?)?' +\n '(?:(this|last|past|next)\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(this|last|past|next)\\\\s*week)?' +\n '(?=\\\\W|$)', 'i');\n\nvar PREFIX_GROUP = 2;\nvar WEEKDAY_GROUP = 3;\nvar POSTFIX_GROUP = 4;\n\n\nexports.updateParsedComponent = function updateParsedComponent(result, ref, offset, modifier) {\n\n var startMoment = dayjs(ref);\n var startMomentFixed = false;\n var refOffset = startMoment.day();\n\n if(modifier == 'last' || modifier == 'past') {\n startMoment =startMoment.day(offset - 7);\n startMomentFixed = true;\n } else if(modifier == 'next') {\n startMoment = startMoment.day(offset + 7);\n startMomentFixed = true;\n } else if(modifier == 'this') {\n startMoment = startMoment.day(offset);\n } else {\n if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {\n startMoment = startMoment.day(offset - 7);\n } else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {\n startMoment = startMoment.day(offset + 7);\n } else {\n startMoment = startMoment.day(offset);\n }\n }\n\n result.start.assign('weekday', offset);\n if (startMomentFixed) {\n result.start.assign('day', startMoment.date());\n result.start.assign('month', startMoment.month() + 1);\n result.start.assign('year', startMoment.year());\n } else {\n result.start.imply('day', startMoment.date());\n result.start.imply('month', startMoment.month() + 1);\n result.start.imply('year', startMoment.year());\n }\n\n return result;\n};\n\n\nexports.Parser = function ENWeekdayParser() {\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; };\n\n this.extract = function(text, ref, match, opt){\n var index = match.index + match[1].length;\n var text = match[0].substr(match[1].length, match[0].length - match[1].length);\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n var offset = DAYS_OFFSET[dayOfWeek];\n if(offset === undefined) {\n return null;\n }\n\n var prefix = match[PREFIX_GROUP];\n var postfix = match[POSTFIX_GROUP];\n var norm = prefix || postfix;\n norm = norm || '';\n norm = norm.toLowerCase();\n\n exports.updateParsedComponent(result, ref, offset, norm);\n result.tags['ENWeekdayParser'] = true;\n\n return result;\n }\n};\n","/*\n \n*/\nvar ParsedComponents = require('../../result').ParsedComponents;\nvar Refiner = require('../refiner').Refiner;\n\nvar PATTERN = new RegExp(\"^\\\\s*(T|at|after|before|on|of|,|-)?\\\\s*$\");\n\nvar isDateOnly = exports.isDateOnly = function(result) {\n return !result.start.isCertain('hour');\n}\n \nvar isTimeOnly = exports.isTimeOnly = function(result) {\n return !result.start.isCertain('month') && !result.start.isCertain('weekday');\n}\n\nvar isAbleToMerge = exports.isAbleToMerge = function(text, prevResult, curResult) {\n var textBetween = text.substring(prevResult.index + prevResult.text.length, curResult.index);\n return textBetween.match(PATTERN);\n}\n\nvar mergeDateTimeComponent = exports.mergeDateTimeComponent = function(dateComponent, timeComponent) {\n var dateTimeComponent = dateComponent.clone();\n\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', timeComponent.get('hour'));\n dateTimeComponent.assign('minute', timeComponent.get('minute'));\n\n if (timeComponent.isCertain('second')) {\n dateTimeComponent.assign('second', timeComponent.get('second'));\n\n if (timeComponent.isCertain('millisecond')) {\n dateTimeComponent.assign('millisecond', timeComponent.get('millisecond'));\n } else {\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n } else {\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n \n } else {\n dateTimeComponent.imply('hour', timeComponent.get('hour'));\n dateTimeComponent.imply('minute', timeComponent.get('minute'));\n dateTimeComponent.imply('second', timeComponent.get('second'));\n dateTimeComponent.imply('millisecond', timeComponent.get('millisecond'));\n }\n\n if (timeComponent.isCertain('meridiem')) {\n dateTimeComponent.assign('meridiem', timeComponent.get('meridiem'));\n } else if (\n timeComponent.get('meridiem') !== undefined &&\n dateTimeComponent.get('meridiem') === undefined\n ) {\n dateTimeComponent.imply('meridiem', timeComponent.get('meridiem'));\n }\n\n if (dateTimeComponent.get('meridiem') == 1 && dateTimeComponent.get('hour') < 12) {\n if (timeComponent.isCertain('hour')) {\n dateTimeComponent.assign('hour', dateTimeComponent.get('hour') + 12);\n } else {\n dateTimeComponent.imply('hour', dateTimeComponent.get('hour') + 12);\n }\n }\n\n return dateTimeComponent;\n}\n\n\nfunction mergeResult(text, dateResult, timeResult){\n\n var beginDate = dateResult.start;\n var beginTime = timeResult.start;\n var beginDateTime = mergeDateTimeComponent(beginDate, beginTime);\n \n if (dateResult.end != null || timeResult.end != null) {\n \n var endDate = dateResult.end == null ? dateResult.start : dateResult.end; \n var endTime = timeResult.end == null ? timeResult.start : timeResult.end;\n var endDateTime = mergeDateTimeComponent(endDate, endTime);\n \n if (dateResult.end == null && endDateTime.date().getTime() < beginDateTime.date().getTime()) {\n // Ex. 9pm - 1am\n if (endDateTime.isCertain('day')) {\n endDateTime.assign('day', endDateTime.get('day') + 1);\n } else {\n endDateTime.imply('day', endDateTime.get('day') + 1);\n }\n }\n\n dateResult.end = endDateTime;\n }\n\n dateResult.start = beginDateTime; \n\n var startIndex = Math.min(dateResult.index, timeResult.index);\n var endIndex = Math.max(\n dateResult.index + dateResult.text.length, \n timeResult.index + timeResult.text.length);\n \n dateResult.index = startIndex;\n dateResult.text = text.substring(startIndex, endIndex);\n\n for (var tag in timeResult.tags) {\n dateResult.tags[tag] = true;\n }\n dateResult.tags['ENMergeDateAndTimeRefiner'] = true;\n return dateResult;\n}\n\nexports.Refiner = function ENMergeDateTimeRefiner() {\n Refiner.call(this);\n\n\n this.refine = function(text, results, opt) { \n\n if (results.length < 2) return results;\n\n var mergedResult = [];\n var currResult = null;\n var prevResult = null;\n\n for (var i = 1; i < results.length; i++) {\n\n currResult = results[i];\n prevResult = results[i-1];\n \n if (isDateOnly(prevResult) && isTimeOnly(currResult) \n && isAbleToMerge(text, prevResult, currResult)) {\n \n prevResult = mergeResult(text, prevResult, currResult);\n currResult = results[i + 1];\n i += 1;\n \n } else if (isDateOnly(currResult) && isTimeOnly(prevResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n \n prevResult = mergeResult(text, currResult, prevResult);\n currResult = results[i + 1];\n i += 1;\n }\n \n mergedResult.push(prevResult);\n }\n\n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n return mergedResult;\n }\n}","var NUMBER ={\n '零':0,\n '一':1,\n '二':2,\n '兩':2,\n '三':3,\n '四':4,\n '五':5,\n '六':6,\n '七':7,\n '八':8,\n '九':9,\n '十':10,\n '廿':20,\n '卅':30,\n};\n\nvar WEEKDAY_OFFSET ={\n '天':0,\n '日':0,\n '一':1,\n '二':2,\n '三':3,\n '四':4,\n '五':5,\n '六':6,\n};\n\nexports.NUMBER = NUMBER;\nexports.WEEKDAY_OFFSET = WEEKDAY_OFFSET;\n\nexports.zhStringToNumber=function(text){\n var number = 0;\n for(var i=0; i<text.length ;i++){\n var char = text[i];\n if(char === '十'){\n number = number=== 0 ? NUMBER[char] : (number * NUMBER[char]);\n }else{\n number += NUMBER[char];\n }\n }\n return number;\n};\n\nexports.zhStringToYear=function(text){\n var string = '';\n for(var i=0; i<text.length ;i++){\n var char = text[i];\n string = string + NUMBER[char];\n }\n return parseInt(string);\n};\n","exports.WEEKDAY_OFFSET = { \n 'sonntag': 0, \n 'so': 0, \n 'montag': 1, \n 'mo': 1,\n 'dienstag': 2, \n 'di':2, \n 'mittwoch': 3, \n 'mi': 3, \n 'donnerstag': 4, \n 'do': 4, \n 'freitag': 5, \n 'fr': 5,\n 'samstag': 6, \n 'sa': 6\n};\n \nexports.MONTH_OFFSET = { \n 'januar': 1,\n 'jan': 1,\n 'jan.': 1,\n 'februar': 2,\n 'feb': 2,\n 'feb.': 2,\n 'märz': 3,\n 'maerz': 3,\n 'mär': 3,\n 'mär.': 3,\n 'mrz': 3,\n 'mrz.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'mai': 5,\n 'juni': 6,\n 'jun': 6,\n 'jun.': 6,\n 'juli': 7,\n 'jul': 7,\n 'jul.': 7,\n 'august': 8,\n 'aug': 8,\n 'aug.': 8,\n 'september': 9,\n 'sep': 9,\n 'sep.': 9,\n 'sept': 9,\n 'sept.': 9,\n 'oktober': 10,\n 'okt': 10,\n 'okt.': 10,\n 'november': 11,\n 'nov': 11,\n 'nov.': 11,\n 'dezember': 12,\n 'dez': 12,\n 'dez.': 12\n};\n\nexports.INTEGER_WORDS_PATTERN = '(?:eins|zwei|drei|vier|fünf|fuenf|sechs|sieben|acht|neun|zehn|elf|zwölf|zwoelf)';\nexports.INTEGER_WORDS = {\n 'eins' : 1,\n 'zwei' : 2,\n 'drei' : 3,\n 'vier' : 4,\n 'fünf' : 5,\n 'fuenf': 5,\n 'sechs' : 6,\n 'sieben' : 7,\n 'acht' : 8,\n 'neun' : 9,\n 'zehn' : 10,\n 'elf' : 11,\n 'zwölf' : 12,\n 'zwoelf' : 12\n};\n","exports.WEEKDAY_OFFSET = { \r\n 'dimanche': 0, \r\n 'dim': 0, \r\n 'lundi': 1, \r\n 'lun': 1,\r\n 'mardi': 2, \r\n 'mar':2, \r\n 'mercredi': 3, \r\n 'mer': 3, \r\n 'jeudi': 4, \r\n 'jeu': 4, \r\n 'vendredi': 5, \r\n 'ven': 5,\r\n 'samedi': 6, \r\n 'sam': 6\r\n};\r\n \r\nexports.MONTH_OFFSET = { \r\n 'janvier': 1,\r\n 'jan': 1,\r\n 'jan.': 1,\r\n 'février': 2,\r\n 'fév': 2,\r\n 'fév.': 2,\r\n 'fevrier': 2,\r\n 'fev': 2,\r\n 'fev.': 2,\r\n 'mars': 3,\r\n 'mar': 3,\r\n 'mar.': 3,\r\n 'avril': 4,\r\n 'avr': 4,\r\n 'avr.': 4,\r\n 'mai': 5,\r\n 'juin': 6,\r\n 'jun': 6,\r\n 'juillet': 7,\r\n 'jul': 7,\r\n 'jul.': 7,\r\n 'août': 8,\r\n 'aout': 8,\r\n 'septembre': 9,\r\n 'sep': 9,\r\n 'sep.': 9,\r\n 'sept': 9,\r\n 'sept.': 9,\r\n 'octobre': 10,\r\n 'oct': 10,\r\n 'oct.': 10,\r\n 'novembre': 11,\r\n 'nov': 11,\r\n 'nov.': 11,\r\n 'décembre': 12,\r\n 'decembre': 12,\r\n 'dec': 12,\r\n 'dec.': 12\r\n};\r\n\r\nexports.INTEGER_WORDS_PATTERN = '(?:un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize)';\r\nexports.INTEGER_WORDS = {\r\n 'un' : 1,\r\n 'deux' : 2,\r\n 'trois' : 3,\r\n 'quatre' : 4,\r\n 'cinq' : 5,\r\n 'six' : 6,\r\n 'sept' : 7,\r\n 'huit' : 8,\r\n 'neuf' : 9,\r\n 'dix' : 10,\r\n 'onze' : 11,\r\n 'douze' : 12,\r\n 'treize' : 13,\r\n};\r\n","/*\n \n*/\nvar Refiner = require('../refiner').Refiner;\n\nexports.Refiner = function ENMergeDateRangeRefiner() {\n Refiner.call(this);\n\n this.pattern = function () { return /^\\s*(to|\\-)\\s*$/i };\n\n this.refine = function(text, results, opt) {\n\n if (results.length < 2) return results;\n \n var mergedResult = [];\n var currResult = null;\n var prevResult = null;\n \n for (var i=1; i<results.length; i++){\n \n currResult = results[i];\n prevResult = results[i-1];\n \n if (!prevResult.end && !currResult.end \n && this.isAbleToMerge(text, prevResult, currResult)) {\n \n prevResult = this.mergeResult(text, prevResult, currResult);\n currResult = null;\n i += 1;\n }\n \n mergedResult.push(prevResult);\n }\n \n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n\n return mergedResult;\n };\n\n this.isAbleToMerge = function(text, result1, result2) {\n var begin = result1.index + result1.text.length;\n var end = result2.index;\n var textBetween = text.substring(begin,end);\n\n return textBetween.match(this.pattern());\n };\n\n this.mergeResult = function(text, fromResult, toResult) {\n\n if (!fromResult.isOnlyWeekday() && !toResult.isOnlyWeekday()) {\n \n var timeKeys = {'hour': true, 'minute': true, 'second': true};\n\n for (var key in toResult.start.knownValues) {\n if (!fromResult.start.isCertain(key)) {\n fromResult.start.assign(key, toResult.start.get(key));\n }\n }\n\n for (var key in fromResult.start.knownValues) {\n if (!toResult.start.isCertain(key)) {\n toResult.start.assign(key, fromResult.start.get(key));\n }\n }\n }\n\n if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {\n \n var fromMoment = fromResult.start.dayjs();\n var toMoment = toResult.start.dayjs();\n\n if (fromResult.isOnlyWeekday() && fromMoment.add(-7, 'days').isBefore(toMoment)) {\n fromMoment = fromMoment.add(-7, 'days');\n fromResult.start.imply('day', fromMoment.date());\n fromResult.start.imply('month', fromMoment.month() + 1);\n fromResult.start.imply('year', fromMoment.year());\n } else if (toResult.isOnlyWeekday() && toMoment.add(7, 'days').isAfter(fromMoment)) {\n toMoment = toMoment.add(7, 'days');\n toResult.start.imply('day', toMoment.date());\n toResult.start.imply('month', toMoment.month() + 1);\n toResult.start.imply('year', toMoment.year());\n } else {\n var tmp = toResult;\n toResult = fromResult;\n fromResult = tmp;\n }\n }\n \n fromResult.end = toResult.start;\n\n \n\n for (var tag in toResult.tags) {\n fromResult.tags[tag] = true;\n }\n\n \n var startIndex = Math.min(fromResult.index, toResult.index);\n var endIndex = Math.max(\n fromResult.index + fromResult.text.length, \n toResult.index + toResult.text.length);\n \n fromResult.index = startIndex;\n fromResult.text = text.substring(startIndex, endIndex);\n fromResult.tags[this.constructor.name] = true;\n return fromResult;\n }\n};\n\n","\nvar options = exports.options = require('./options');\n\nexports.parser = require('./parsers/parser');\nexports.refiner = require('./refiners/refiner');\n\nexports.Parser = exports.parser.Parser;\nexports.Refiner = exports.refiner.Refiner;\nexports.Filter = exports.refiner.Filter;\n\nexports.ParsedResult = require('./result').ParsedResult;\nexports.ParsedComponents = require('./result').ParsedComponents;\n\nvar Chrono = function(option) {\n\n option = option || exports.options.casualOption();\n this.parsers = new Object(option.parsers);\n this.refiners = new Object(option.refiners);\n};\n\n\nChrono.prototype.parse = function(text, refDate, opt) {\n\n refDate = refDate || new Date();\n opt = opt || {};\n opt.forwardDate = opt.forwardDate || opt.forwardDate;\n \n var allResults = [];\n\n this.parsers.forEach(function (parser) {\n var results = parser.execute(text, refDate, opt);\n allResults = allResults.concat(results);\n });\n\n allResults.sort(function(a, b) {\n return a.index - b.index;\n });\n\n this.refiners.forEach(function (refiner) {\n allResults = refiner.refine(text, allResults, opt);\n });\n \n return allResults;\n};\n\n\nChrono.prototype.parseDate = function(text, refDate, opt) {\n var results = this.parse(text, refDate, opt);\n if (results.length > 0) {\n return results[0].start.date();\n }\n return null;\n};\n\nexports.Chrono = Chrono;\nexports.strict = new Chrono( options.strictOption() );\nexports.casual = new Chrono( options.casualOption() );\n\nexports.en = new Chrono( options.mergeOptions([\n options.en.casual, options.commonPostProcessing]));\n\nexports.en_GB = new Chrono( options.mergeOptions([\n options.en_GB.casual, options.commonPostProcessing]));\n\nexports.de = new Chrono( options.mergeOptions([\n options.de.casual, options.en, options.commonPostProcessing]));\n\nexports.pt = new Chrono( options.mergeOptions([\n options.pt.casual, options.en, options.commonPostProcessing]));\n\nexports.es = new Chrono( options.mergeOptions([\n options.es.casual, options.en, options.commonPostProcessing]));\n\nexports.fr = new Chrono( options.mergeOptions([\n options.fr.casual, options.en, options.commonPostProcessing]));\n\nexports.ja = new Chrono( options.mergeOptions([ \n options.ja.casual, options.en, options.commonPostProcessing]));\n\n\nexports.parse = function () {\n return exports.casual.parse.apply(exports.casual, arguments);\n};\n\nexports.parseDate = function () {\n return exports.casual.parseDate.apply(exports.casual, arguments);\n};\n\n\n\n\n","var parser = require('./parsers/parser');\nvar refiner = require('./refiners/refiner');\n\n\nexports.mergeOptions = function(options) {\n\n var addedTypes = {};\n var mergedOption = {\n parsers: [],\n refiners: []\n };\n\n options.forEach(function (option) {\n\n if (option.call) {\n option = option.call();\n }\n\n if (option.parsers) {\n option.parsers.forEach(function (p) {\n if (!addedTypes[p.constructor]) {\n mergedOption.parsers.push(p);\n addedTypes[p.constructor] = true;\n }\n });\n }\n\n if (option.refiners) {\n option.refiners.forEach(function (r) {\n if (!addedTypes[r.constructor]) {\n mergedOption.refiners.push(r);\n addedTypes[r.constructor] = true;\n }\n });\n }\n });\n\n return mergedOption;\n};\n\n\nexports.commonPostProcessing = function() {\n return {\n refiners: [\n // These should be after all other refiners\n new refiner.ExtractTimezoneOffsetRefiner(),\n new refiner.ExtractTimezoneAbbrRefiner(),\n new refiner.UnlikelyFormatFilter()\n ]\n }\n};\n\n\n// -------------------------------------------------------------\n\nexports.strictOption = function () {\n var strictConfig = {\n strict: true\n };\n\n return exports.mergeOptions([\n exports.en(strictConfig),\n exports.de(strictConfig),\n exports.pt(strictConfig),\n exports.es(strictConfig),\n exports.fr(strictConfig),\n exports.ja(strictConfig),\n exports.zh,\n exports.commonPostProcessing\n ]);\n};\n\nexports.casualOption = function () {\n return exports.mergeOptions([\n exports.en.casual,\n // Some German abbriviate overlap with common English\n exports.de({ strict: true }), \n exports.pt.casual,\n exports.es.casual,\n exports.fr.casual,\n exports.ja.casual,\n exports.zh,\n exports.commonPostProcessing\n ]);\n};\n\n// -------------------------------------------------------------\n\nexports.de = function(config) {\n return {\n parsers: [\n new parser.DEDeadlineFormatParser(config),\n new parser.DEMonthNameLittleEndianParser(config),\n new parser.DEMonthNameParser(config),\n new parser.DESlashDateFormatParser(config),\n new parser.DETimeAgoFormatParser(config),\n new parser.DETimeExpressionParser(config)\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n new refiner.DEMergeDateTimeRefiner(),\n new refiner.DEMergeDateRangeRefiner()\n ]\n }\n};\n\nexports.de.casual = function() {\n var option = exports.de({\n strict: false\n });\n option.parsers.unshift(new parser.DECasualDateParser());\n option.parsers.unshift(new parser.DEWeekdayParser());\n return option;\n};\n\n\n\n// -------------------------------------------------------------\n\n\nexports.en = function(config) {\n return {\n parsers: [\n new parser.ENISOFormatParser(config),\n new parser.ENDeadlineFormatParser(config),\n new parser.ENMonthNameLittleEndianParser(config),\n new parser.ENMonthNameMiddleEndianParser(config),\n new parser.ENMonthNameParser(config),\n new parser.ENSlashDateFormatParser(config),\n new parser.ENSlashDateFormatStartWithYearParser(config),\n new parser.ENSlashMonthFormatParser(config),\n new parser.ENTimeAgoFormatParser(config),\n new parser.ENTimeLaterFormatParser(config),\n new parser.ENTimeExpressionParser(config)\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n\n // English\n new refiner.ENMergeDateTimeRefiner(),\n new refiner.ENMergeDateRangeRefiner(),\n new refiner.ENPrioritizeSpecificDateRefiner()\n ]\n }\n};\n\nexports.en.casual = function(config) {\n config = config || {};\n config.strict = false;\n var option = exports.en(config);\n\n // en\n option.parsers.unshift(new parser.ENCasualDateParser());\n option.parsers.unshift(new parser.ENCasualTimeParser());\n option.parsers.unshift(new parser.ENWeekdayParser());\n option.parsers.unshift(new parser.ENRelativeDateFormatParser());\n return option;\n};\n\n\nexports.en_GB = function(config) {\n config = config || {};\n config.littleEndian = true;\n return exports.en(config);\n}\n\nexports.en_GB.casual = function(config) {\n config = config || {};\n config.littleEndian = true;\n return exports.en.casual(config);\n}\n\n// -------------------------------------------------------------\n\nexports.ja = function() {\n return {\n parsers: [\n new parser.JPStandardParser()\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n new refiner.JPMergeDateRangeRefiner()\n ]\n }\n};\n\nexports.ja.casual = function() {\n var option = exports.ja();\n option.parsers.unshift(new parser.JPCasualDateParser());\n return option;\n};\n\n// -------------------------------------------------------------\n\n\nexports.pt = function(config) {\n return {\n parsers: [\n new parser.PTTimeAgoFormatParser(config),\n new parser.PTDeadlineFormatParser(config),\n new parser.PTTimeExpressionParser(config),\n new parser.PTMonthNameLittleEndianParser(config),\n new parser.PTSlashDateFormatParser(config)\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner()\n ]\n }\n};\n\nexports.pt.casual = function() {\n var option = exports.pt({ \n strict: false \n });\n\n option.parsers.unshift(new parser.PTCasualDateParser());\n option.parsers.unshift(new parser.PTWeekdayParser());\n return option;\n};\n\n// -------------------------------------------------------------\n\n\nexports.es = function(config) {\n return {\n parsers: [\n new parser.ESTimeAgoFormatParser(config),\n new parser.ESDeadlineFormatParser(config),\n new parser.ESTimeExpressionParser(config),\n new parser.ESMonthNameLittleEndianParser(config),\n new parser.ESSlashDateFormatParser(config)\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner()\n ]\n }\n};\n\nexports.es.casual = function() {\n var option = exports.es({ \n strict: false \n });\n\n option.parsers.unshift(new parser.ESCasualDateParser());\n option.parsers.unshift(new parser.ESWeekdayParser());\n return option;\n};\n\n\n// -------------------------------------------------------------\n\nexports.fr = function(config) {\n return {\n parsers: [\n new parser.FRDeadlineFormatParser(config),\n new parser.FRMonthNameLittleEndianParser(config),\n new parser.FRSlashDateFormatParser(config),\n new parser.FRTimeAgoFormatParser(config),\n new parser.FRTimeExpressionParser(config)\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n new refiner.FRMergeDateRangeRefiner(),\n new refiner.FRMergeDateTimeRefiner()\n ]\n }\n};\n\nexports.fr.casual = function() {\n var option = exports.fr({\n strict: false\n });\n\n option.parsers.unshift(new parser.FRCasualDateParser());\n option.parsers.unshift(new parser.FRWeekdayParser());\n option.parsers.unshift(new parser.FRRelativeDateFormatParser());\n return option;\n};\n\n\n// -------------------------------------------------------------\n\nexports.zh = function() {\n return {\n parsers: [\n new parser.ZHHantDateParser(),\n new parser.ZHHantWeekdayParser(),\n new parser.ZHHantTimeExpressionParser(),\n new parser.ZHHantCasualDateParser(),\n new parser.ZHHantDeadlineFormatParser()\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner()\n ]\n }\n};","/*\n ISO 8601\n http://www.w3.org/TR/NOTE-datetime\n - YYYY-MM-DD\n - YYYY-MM-DDThh:mmTZD\n - YYYY-MM-DDThh:mm:ssTZD\n - YYYY-MM-DDThh:mm:ss.sTZD \n - TZD = (Z or +hh:mm or -hh:mm)\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(\\\\W|^)' \n + '([0-9]{4})\\\\-([0-9]{1,2})\\\\-([0-9]{1,2})'\n + '(?:T' //..\n + '([0-9]{1,2}):([0-9]{1,2})' // hh:mm\n + '(?::([0-9]{1,2})(?:\\\\.(\\\\d{1,4}))?)?' // :ss.s\n + '(?:Z|([+-]\\\\d{2}):?(\\\\d{2})?)?' // TZD (Z or ±hh:mm or ±hhmm or ±hh)\n + ')?' //..\n + '(?=\\\\W|$)', 'i');\n\nvar YEAR_NUMBER_GROUP = 2;\nvar MONTH_NUMBER_GROUP = 3;\nvar DATE_NUMBER_GROUP = 4;\nvar HOUR_NUMBER_GROUP = 5;\nvar MINUTE_NUMBER_GROUP = 6;\nvar SECOND_NUMBER_GROUP = 7;\nvar MILLISECOND_NUMBER_GROUP = 8;\nvar TZD_HOUR_OFFSET_GROUP = 9;\nvar TZD_MINUTE_OFFSET_GROUP = 10;\n\nexports.Parser = function ENISOFormatParser(){\n Parser.apply(this, arguments);\n \n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){ \n \n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n })\n \n result.start.assign('year', parseInt(match[YEAR_NUMBER_GROUP]));\n result.start.assign('month', parseInt(match[MONTH_NUMBER_GROUP]));\n result.start.assign('day', parseInt(match[DATE_NUMBER_GROUP]));\n\n if (dayjs(result.start.get('month')) > 12 || dayjs(result.start.get('month')) < 1 ||\n dayjs(result.start.get('day')) > 31 || dayjs(result.start.get('day')) < 1) {\n return null;\n }\n\n if (match[HOUR_NUMBER_GROUP] != null) {\n \n result.start.assign('hour',\n parseInt(match[HOUR_NUMBER_GROUP]));\n result.start.assign('minute',\n parseInt(match[MINUTE_NUMBER_GROUP]));\n\n if (match[SECOND_NUMBER_GROUP] != null) {\n\n result.start.assign('second',\n parseInt(match[SECOND_NUMBER_GROUP]));\n }\n\n if (match[MILLISECOND_NUMBER_GROUP] != null) {\n\n result.start.assign('millisecond',\n parseInt(match[MILLISECOND_NUMBER_GROUP]));\n }\n\n if (match[TZD_HOUR_OFFSET_GROUP] == null) {\n\n result.start.assign('timezoneOffset', 0);\n } else {\n\n var minuteOffset = 0;\n var hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]);\n if (match[TZD_MINUTE_OFFSET_GROUP] != null)\n minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]);\n\n var offset = hourOffset * 60;\n if (offset < 0) {\n offset -= minuteOffset;\n } else {\n offset += minuteOffset;\n }\n\n result.start.assign('timezoneOffset', offset);\n }\n }\n \n result.tags['ENISOFormatParser'] = true;\n return result;\n };\n\n}\n\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(within|in)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|an?(?:\\\\s*few)?|half(?:\\\\s*an?)?)\\\\s*' +\n '(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)\\\\s*' +\n '(?=\\\\W|$)', 'i'\n);\n\nvar STRICT_PATTERN = new RegExp('(\\\\W|^)' +\n '(within|in)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|an?)\\\\s*' +\n '(seconds?|minutes?|hours?|days?)\\\\s*' +\n '(?=\\\\W|$)', 'i'\n);\n\nexports.Parser = function ENDeadlineFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\n };\n\n this.extract = function(text, ref, match, opt){\n\n var index = match.index + match[1].length;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var num = match[3].toLowerCase();\n if (util.INTEGER_WORDS[num] !== undefined) {\n num = util.INTEGER_WORDS[num];\n } else if (num === 'a' || num === 'an'){\n num = 1;\n } else if (num.match(/few/i)){\n num = 3;\n } else if (num.match(/half/i)) {\n num = 0.5;\n } else {\n num = parseInt(num);\n }\n\n var date = dayjs(ref);\n if (match[4].match(/day|week|month|year/i)) {\n\n if (match[4].match(/day/i)) {\n date = date.add(num, 'd');\n } else if (match[4].match(/week/i)) {\n date = date.add(num * 7, 'd');\n } else if (match[4].match(/month/i)) {\n date = date.add(num, 'month');\n } else if (match[4].match(/year/i)) {\n date = date.add(num, 'year');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n return result;\n }\n\n if (match[4].match(/hour/i)) {\n\n date = date.add(num, 'hour');\n\n } else if (match[4].match(/min/i)) {\n\n date = date.add(num, 'minute');\n\n } else if (match[4].match(/second/i)) {\n\n date = date.add(num, 'second');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n result.start.imply('hour', date.hour());\n result.start.imply('minute', date.minute());\n result.start.imply('second', date.second());\n result.tags['ENDeadlineFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(this|next|last|past)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|few|half(?:\\\\s*an?)?)?\\\\s*' +\n '(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)(?=\\\\s*)' +\n '(?=\\\\W|$)', 'i'\n);\n\nvar MODIFIER_WORD_GROUP = 2;\nvar MULTIPLIER_WORD_GROUP = 3;\nvar RELATIVE_WORD_GROUP = 4;\n\nexports.Parser = function ENRelativeDateFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; };\n\n this.extract = function(text, ref, match, opt){\n\n var index = match.index + match[1].length;\n var modifier = match[MODIFIER_WORD_GROUP].toLowerCase().match(/^next/) ? 1 : -1;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n result.tags['ENRelativeDateFormatParser'] = true;\n\n var num = match[MULTIPLIER_WORD_GROUP] === undefined ? '' : match[3].toLowerCase();\n if (util.INTEGER_WORDS[num] !== undefined) {\n num = util.INTEGER_WORDS[num];\n } else if (num === ''){\n num = 1;\n } else if (num.match(/few/i)){\n num = 3;\n } else if (num.match(/half/i)) {\n num = 0.5;\n } else {\n num = parseInt(num);\n }\n\n num *= modifier;\n var date = dayjs(ref);\n\n if (match[MODIFIER_WORD_GROUP].toLowerCase().match(/^this/)) {\n\n if (match[MULTIPLIER_WORD_GROUP]) {\n return null;\n }\n\n if (match[RELATIVE_WORD_GROUP].match(/day|week|month|year/i)) {\n \n // This week\n if (match[RELATIVE_WORD_GROUP].match(/week/i)) {\n date = date.add(-date.get('d'), 'd');\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n } \n \n // This month\n else if (match[RELATIVE_WORD_GROUP].match(/month/i)) {\n date = date.add(-date.date() + 1, 'd');\n result.start.imply('day', date.date());\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n } \n\n // This year\n else if (match[RELATIVE_WORD_GROUP].match(/year/i)) {\n date = date.add(-date.date() + 1, 'd');\n date = date.add(-date.month(), 'month');\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.assign('year', date.year());\n } \n\n return result;\n }\n }\n \n if (match[RELATIVE_WORD_GROUP].match(/day|week|month|year/i)) {\n\n if (match[RELATIVE_WORD_GROUP].match(/day/i)) {\n date = date.add(num, 'd');\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n } else if (match[RELATIVE_WORD_GROUP].match(/week/i)) {\n date = date.add(num * 7, 'd');\n // We don't know the exact date for next/last week so we imply\n // them\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n } else if (match[RELATIVE_WORD_GROUP].match(/month/i)) {\n date = date.add(num, 'month');\n // We don't know the exact day for next/last month\n result.start.imply('day', date.date());\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n } else if (match[RELATIVE_WORD_GROUP].match(/year/i)) {\n date = date.add(num, 'year');\n // We don't know the exact day for month on next/last year\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.assign('year', date.year());\n }\n\n return result;\n }\n\n if (match[RELATIVE_WORD_GROUP].match(/hour/i)) {\n\n date = date.add(num, 'hour');\n result.start.imply('minute', date.minute());\n result.start.imply('second', date.second());\n\n } else if (match[RELATIVE_WORD_GROUP].match(/min/i)) {\n\n date = date.add(num, 'minute');\n result.start.assign('minute', date.minute());\n result.start.imply('second', date.second());\n\n } else if (match[RELATIVE_WORD_GROUP].match(/second/i)) {\n\n date = date.add(num, 'second');\n result.start.assign('second', date.second());\n result.start.assign('minute', date.minute());\n }\n\n result.start.assign('hour', date.hour());\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n return result;\n };\n};\n","const parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:on\\\\s*?)?' +\n '(?:(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sun|Mon|Tue|Wed|Thu|Fri|Sat)\\\\s*,?\\\\s*)?' +\n '(([0-9]{1,2})(?:st|nd|rd|th)?|' + util.ORDINAL_WORDS_PATTERN + ')' +\n '(?:\\\\s*' +\n '(?:to|\\\\-|\\\\–|until|through|till|\\\\s)\\\\s*' +\n '(([0-9]{1,2})(?:st|nd|rd|th)?|' + util.ORDINAL_WORDS_PATTERN + ')' +\n ')?' + \n '(?:-|\\/|\\\\s*(?:of)?\\\\s*)' +\n '(' + util.MONTH_PATTERN + ')' +\n '(?:' +\n '(?:-|\\/|,?\\\\s*)' +\n '((?:' + \n '[1-9][0-9]{0,3}\\\\s*(?:BE|AD|BC)|' +\n '[1-2][0-9]{3}' + \n ')(?![^\\\\s]\\\\d))' +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\n\nvar WEEKDAY_GROUP = 2;\nvar DATE_GROUP = 3;\nvar DATE_NUM_GROUP = 4;\nvar DATE_TO_GROUP = 5;\nvar DATE_TO_NUM_GROUP = 6;\nvar MONTH_NAME_GROUP = 7;\nvar YEAR_GROUP = 8;\n\nexports.Parser = function ENMonthNameLittleEndianParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref\n });\n\n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = match[DATE_NUM_GROUP] ?\n parseInt(match[DATE_NUM_GROUP]):\n util.ORDINAL_WORDS[match[DATE_GROUP].trim().replace('-', ' ').toLowerCase()];\n\n var year = null;\n if (match[YEAR_GROUP]) {\n year = match[YEAR_GROUP];\n \n if (/BE/i.test(year)) {\n // Buddhist Era\n year = year.replace(/BE/i, '');\n year = parseInt(year) - 543;\n } else if (/BC/i.test(year)){\n // Before Christ\n year = year.replace(/BC/i, '');\n year = -parseInt(year);\n } else if (/AD/i.test(year)){\n year = year.replace(/AD/i, '');\n year = parseInt(year);\n } else {\n year = parseInt(year);\n if (year < 100){\n year = year + 2000;\n }\n }\n }\n\n if(year){\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month);\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n var weekday = match[WEEKDAY_GROUP];\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n // Text can be 'range' value. Such as '12 - 13 January 2012'\n if (match[DATE_TO_GROUP]) {\n var endDate = match[DATE_TO_NUM_GROUP] ?\n parseInt(match[DATE_TO_NUM_GROUP]):\n util.ORDINAL_WORDS[match[DATE_TO_GROUP].trim().replace('-', ' ').toLowerCase()];\n\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n result.tags['ENMonthNameLittleEndianParser'] = true;\n return result;\n };\n};\n","/*\n\n The parser for parsing US's date format that begin with month's name.\n\n EX.\n - January 13\n - January 13, 2012\n - January 13 - 15, 2012\n - Tuesday, January 13, 2012\n\n Watch out for:\n - January 12:00\n - January 12.44\n - January 1222344\n*/\nvar parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '(?:on\\\\s*?)?' +\n '(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sun\\\\.?|Mon\\\\.?|Tue\\\\.?|Wed\\\\.?|Thu\\\\.?|Fri\\\\.?|Sat\\\\.?)' +\n '\\\\s*,?\\\\s*)?' +\n '(' + util.MONTH_PATTERN + ')' +\n '(?:-|\\/|\\\\s*,?\\\\s*)' +\n '(([0-9]{1,2})(?:st|nd|rd|th)?|' + util.ORDINAL_WORDS_PATTERN +')(?!\\\\s*(?:am|pm))\\\\s*' + '' + \n '(?:' +\n '(?:to|\\\\-)\\\\s*' +\n '(([0-9]{1,2})(?:st|nd|rd|th)?| ' + util.ORDINAL_WORDS_PATTERN + ')\\\\s*' +\n ')?' +\n '(?:' +\n '(?:-|\\/|\\\\s*,?\\\\s*)' +\n '(?:([0-9]{4})\\\\s*(BE|AD|BC)?|([0-9]{1,4})\\\\s*(AD|BC))\\\\s*' +\n ')?' +\n '(?=\\\\W|$)(?!\\\\:\\\\d)', 'i');\n\nvar WEEKDAY_GROUP = 2;\nvar MONTH_NAME_GROUP = 3;\nvar DATE_GROUP = 4;\nvar DATE_NUM_GROUP = 5;\nvar DATE_TO_GROUP = 6;\nvar DATE_TO_NUM_GROUP = 7;\nvar YEAR_GROUP = 8;\nvar YEAR_BE_GROUP = 9;\nvar YEAR_GROUP2 = 10;\nvar YEAR_BE_GROUP2 = 11;\n\nexports.Parser = function ENMonthNameMiddleEndianParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n\n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n var day = match[DATE_NUM_GROUP] ?\n parseInt(match[DATE_NUM_GROUP]) :\n util.ORDINAL_WORDS[match[DATE_GROUP].trim().replace('-', ' ').toLowerCase()];\n\n var year = null;\n if (match[YEAR_GROUP] || match[YEAR_GROUP2]) {\n year = match[YEAR_GROUP] || match[YEAR_GROUP2];\n year = parseInt(year);\n\n var yearBE = match[YEAR_BE_GROUP] || match[YEAR_BE_GROUP2];\n if (yearBE) {\n if (/BE/i.test(yearBE)) {\n // Buddhist Era\n year = year - 543;\n } else if (/BC/i.test(yearBE)) {\n // Before Christ\n year = -year;\n }\n } else if (year < 100){\n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month)\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n var weekday = match[WEEKDAY_GROUP];\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n // Text can be 'range' value. Such as 'January 12 - 13, 2012'\n if (match[DATE_TO_GROUP]) {\n var endDate = match[DATE_TO_NUM_GROUP] ?\n endDate = parseInt(match[DATE_TO_NUM_GROUP]) :\n util.ORDINAL_WORDS[match[DATE_TO_GROUP].replace('-', ' ').trim().toLowerCase()];\n\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n result.tags['ENMonthNameMiddleEndianParser'] = true;\n return result;\n }\n};","/*\n \n The parser for parsing month name and year.\n \n EX. \n - January\n - January 2012\n - January, 2012\n*/\nvar parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(^|\\\\D\\\\s+|[^\\\\w\\\\s])' +\n '('+ util.MONTH_PATTERN +')' + \n '\\\\s*' +\n '(?:' +\n '[,-]?\\\\s*([0-9]{4})(\\\\s*BE|AD|BC)?' +\n ')?' +\n '(?=[^\\\\s\\\\w]|\\\\s+[^0-9]|\\\\s+$|$)', 'i');\n\nvar MONTH_NAME_GROUP = 2;\nvar YEAR_GROUP = 3;\nvar YEAR_BE_GROUP = 4;\n\nexports.Parser = function ENMonthNameParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n \n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = 1;\n\n var year = null;\n if (match[YEAR_GROUP]) {\n year = match[YEAR_GROUP];\n year = parseInt(year);\n\n if(match[YEAR_BE_GROUP]){\n if (match[YEAR_BE_GROUP].match(/BE/)) {\n // Buddhist Era\n year = year - 543;\n } else if (match[YEAR_BE_GROUP].match(/BC/)) {\n // Before Christ\n year = -year;\n }\n\n } else if (year < 100){ \n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.imply('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month)\n result.start.imply('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n result.tags['ENMonthNameParser'] = true;\n return result;\n }\n}\n","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - Tuesday 11/3/2015 \n - 11/3/2015\n - 11/3\n\n By default the paser us \"middle-endien\" format (US English),\n then fallback to little-endian if failed.\n - 11/3/2015 = November 3rd, 2015\n - 23/4/2015 = April 23th, 2015\n\n If \"littleEndian\" config is set, the parser will try the little-endian first. \n - 11/3/2015 = March 11th, 2015\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '(?:on\\\\s*?)?' +\n '((?:sun|mon|tues?|wed(?:nes)?|thu(?:rs?)?|fri|sat(?:ur)?)(?:day)?)' +\n '\\\\s*\\\\,?\\\\s*' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nvar DAYS_OFFSET = { 'sunday': 0, 'sun': 0, 'monday': 1, 'mon': 1,'tuesday': 2, 'wednesday': 3, 'wed': 3,\n 'thursday': 4, 'thur': 4,'friday': 5, 'fri': 5,'saturday': 6, 'sat': 6,}\n\n\nvar OPENNING_GROUP = 1;\nvar ENDING_GROUP = 6;\n\nvar WEEKDAY_GROUP = 2;\n\n\nvar FIRST_NUMBERS_GROUP = 3;\nvar SECOND_NUMBERS_GROUP = 4;\n\nvar YEAR_GROUP = 5;\n\nexports.Parser = function ENSlashDateFormatParser(config) {\n Parser.apply(this, arguments);\n config = config || {};\n var littleEndian = config.littleEndian;\n var MONTH_GROUP = littleEndian ? SECOND_NUMBERS_GROUP : FIRST_NUMBERS_GROUP;\n var DAY_GROUP = littleEndian ? FIRST_NUMBERS_GROUP : SECOND_NUMBERS_GROUP;\n\n this.pattern = function () { return PATTERN; };\n this.extract = function(text, ref, match, opt){\n\n if(match[OPENNING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n var index = match.index + match[OPENNING_GROUP].length;\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n });\n\n if(text.match(/^\\d\\.\\d$/)) return;\n if(text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}$/)) return;\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;\n\n var date = null;\n var year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n var month = match[MONTH_GROUP];\n var day = match[DAY_GROUP];\n\n month = parseInt(month);\n day = parseInt(day);\n year = parseInt(year);\n\n if(month < 1 || month > 12) {\n if(month > 12) {\n // dd/mm/yyyy date format if day looks like a month, and month\n // looks like a day.\n if (day >= 1 && day <= 12 && month >= 13 && month <= 31) {\n // unambiguous\n var tday = month;\n month = day;\n day = tday;\n }\n else {\n // both month and day are <= 12\n return null;\n }\n }\n }\n if(day < 1 || day > 31) return null;\n\n if(year < 100){\n if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n if (match[YEAR_GROUP]) {\n result.start.assign('year', year);\n } else {\n result.start.imply('year', year);\n }\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['ENSlashDateFormatParser'] = true;\n return result;\n };\n};\n","/*\n Date format with slash \"/\" between numbers like ENSlashDateFormatParser,\n but this parser expect year before month and date. \n - YYYY/MM/DD\n - YYYY-MM-DD\n - YYYY.MM.DD\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('(\\\\W|^)' \n + '([0-9]{4})[\\\\-\\\\.\\\\/]'\n + '((?:' + util.MONTH_PATTERN + '|[0-9]{1,2}))[\\\\-\\\\.\\\\/]'\n + '([0-9]{1,2})'\n + '(?=\\\\W|$)', 'i');\n\nvar YEAR_NUMBER_GROUP = 2;\nvar MONTH_NUMBER_GROUP = 3;\nvar DATE_NUMBER_GROUP = 4;\n\nexports.Parser = function ENSlashDateFormatStartWithYearParser(){\n Parser.apply(this, arguments);\n \n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){\n\n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n })\n \n var month = match[MONTH_NUMBER_GROUP].toLowerCase();\n month = util.MONTH_OFFSET[month] | month;\n\n result.start.assign('year', parseInt(match[YEAR_NUMBER_GROUP]));\n result.start.assign('month', parseInt(month));\n result.start.assign('day', parseInt(match[DATE_NUMBER_GROUP]));\n\n if (\n dayjs(result.start.get('month')) > 12 || dayjs(result.start.get('month')) < 1 || \n dayjs(result.start.get('day')) > 31 || dayjs(result.start.get('day')) < 1) {\n return null;\n }\n \n result.tags['ENDateFormatParser'] = true;\n return result;\n };\n}\n","/*\n Month/Year date format with slash \"/\" (also \"-\" and \".\") between numbers \n - 11/05\n - 06/2005\n*/\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(^|[^\\\\d/]\\\\s+|[^\\\\w\\\\s])' +\n '([0-9]|0[1-9]|1[012])/([0-9]{4})' + \n '(?=[^\\\\d/]|$)', 'i');\n\nvar OPENNING_GROUP = 1;\n\nvar MONTH_GROUP = 2;\nvar YEAR_GROUP = 3;\n\nexports.Parser = function ENSlashMonthFormatParser(argument) {\n Parser.apply(this, arguments);\n\n this.pattern = function () { return PATTERN; };\n this.extract = function(text, ref, match, opt){\n \n var index = match.index + match[OPENNING_GROUP].length;\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length).trim();\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n });\n\n var year = match[YEAR_GROUP] ;\n var month = match[MONTH_GROUP];\n var day = 1;\n \n month = parseInt(month);\n year = parseInt(year);\n\n result.start.imply('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n\n result.tags['ENSlashMonthFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('' +\n '(\\\\W|^)' +\n '(?:within\\\\s*)?' +\n '(' + util.TIME_UNIT_PATTERN + ')' +\n '(?:ago|before|earlier)(?=(?:\\\\W|$))', 'i');\n\nvar STRICT_PATTERN = new RegExp('' +\n '(\\\\W|^)' +\n '(?:within\\\\s*)?' +\n '(' + util.TIME_UNIT_STRICT_PATTERN + ')' +\n 'ago(?=(?:\\\\W|$))', 'i');\n\nexports.Parser = function ENTimeAgoFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\n };\n\n this.extract = function(text, ref, match, opt){\n\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n var index = match.index + match[1].length;\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var fragments = util.extractDateTimeUnitFragments(match[2]);\n var date = dayjs(ref);\n\n for (var key in fragments) {\n date = date.add(-fragments[key], key);\n }\n\n if (fragments['hour'] > 0 || fragments['minute'] > 0 || fragments['second'] > 0) {\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.start.assign('second', date.second());\n result.tags['ENTimeAgoFormatParser'] = true;\n } \n \n if (fragments['d'] > 0 || fragments['month'] > 0 || fragments['year'] > 0) {\n result.start.assign('day', date.date());\n result.start.assign('month', date.month() + 1);\n result.start.assign('year', date.year());\n } else {\n if (fragments['week'] > 0) {\n result.start.imply('weekday', date.day());\n }\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n }\n\n return result;\n };\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar ParsedComponents = require('../../result').ParsedComponents;\n\nvar FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:at|from)\\\\s*)??\" + \n \"(\\\\d{1,4}|noon|midnight)\" + \n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" + \n \"(?:\" + \n \"(?:\\\\:|\\\\:)(\\\\d{2})(?:\\\\.(\\\\d{1,6}))?\" + \n \")?\" + \n \")?\" + \n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?|O\\\\W*CLOCK))?\" + \n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" + \n \"(\\\\-|\\\\–|\\\\~|\\\\〜|to|\\\\?)\\\\s*\" + \n \"(\\\\d{1,4})\" +\n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" + \n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})(?:\\\\.(\\\\d{1,6}))?\" + \n \")?\" + \n \")?\" + \n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?|O\\\\W*CLOCK))?\" + \n \"(?=\\\\W|$)\", 'i');\n\nvar HOUR_GROUP = 2;\nvar MINUTE_GROUP = 3;\nvar SECOND_GROUP = 4;\nvar MILLI_SECOND_GROUP = 5;\nvar AM_PM_HOUR_GROUP = 6;\n\n\nexports.Parser = function ENTimeExpressionParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return FIRST_REG_PATTERN; }\n \n this.extract = function(text, ref, match, opt){ \n \n // This pattern can be overlapped Ex. [12] AM, 1[2] AM\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n var refMoment = dayjs(ref);\n var result = new ParsedResult();\n result.ref = ref;\n result.index = match.index + match[1].length;\n result.text = match[0].substring(match[1].length);\n result.tags['ENTimeExpressionParser'] = true;\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month()+1);\n result.start.imply('year', refMoment.year());\n \n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null){ \n var millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n \n result.start.assign('millisecond', millisecond);\n }\n\n // ----- Second\n if(match[SECOND_GROUP] != null){ \n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n \n // ----- Hours\n if (match[HOUR_GROUP].toLowerCase() == \"noon\"){\n meridiem = 1; \n hour = 12;\n } else if (match[HOUR_GROUP].toLowerCase() == \"midnight\") {\n meridiem = 0; \n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n \n // ----- Minutes\n if(match[MINUTE_GROUP] != null){ \n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) { \n minute = hour%100;\n hour = parseInt(hour/100);\n } \n \n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) { \n meridiem = 1;\n }\n\n // ----- AM & PM \n if(match[AM_PM_HOUR_GROUP] != null) {\n if(hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = 0; \n if(hour == 12) hour = 0;\n }\n \n if(ampm == \"p\"){\n meridiem = 1; \n if(hour != 12) hour += 12;\n }\n } \n\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n\n if (meridiem >= 0) {\n result.start.assign('meridiem', meridiem);\n } else {\n if (hour < 12) {\n result.start.imply('meridiem', 0);\n } else {\n result.start.imply('meridiem', 1);\n }\n }\n\n // ==============================================================\n // Extracting the 'to' chunk\n // ==============================================================\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n return result;\n }\n\n\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*(\\+|\\-)\\s*\\d{3,4}$/)) {\n return result;\n }\n\n if(result.end == null){\n result.end = new ParsedComponents(null, result.start.date());\n }\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Millisecond\n if(match[MILLI_SECOND_GROUP] != null){ \n var millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));\n if(millisecond >= 1000) return null;\n \n result.end.assign('millisecond', millisecond);\n }\n \n // ----- Second\n if(match[SECOND_GROUP] != null){ \n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n hour = parseInt(match[2]);\n \n // ----- Minute\n if (match[MINUTE_GROUP]!= null) {\n \n minute = parseInt(match[MINUTE_GROUP]);\n if(minute >= 60) return result;\n \n } else if (hour > 100) {\n\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) { \n meridiem = 1;\n }\n \n // ----- AM & PM \n if (match[AM_PM_HOUR_GROUP] != null){\n\n if (hour > 12) return null;\n\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = 0; \n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n }\n \n if(ampm == \"p\"){\n meridiem = 1; \n if(hour != 12) hour += 12;\n }\n \n if (!result.start.isCertain('meridiem')) {\n if (meridiem == 0) {\n \n result.start.imply('meridiem', 0);\n \n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', 1);\n \n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12); \n }\n }\n }\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n } else {\n var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == 1;\n if (startAtPM && result.start.get('hour') > hour) {\n // 10pm - 1 (am)\n result.end.imply('meridiem', 0);\n\n } else if (hour > 12) {\n result.end.imply('meridiem', 1);\n }\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n \n return result;\n }\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/EN');\n\nvar PATTERN = new RegExp('' +\n /*match[1]*/ '(\\\\W|^)' +\n /*match[2]*/ '(in )?' +\n /*match[3]*/ '(' + util.TIME_UNIT_PATTERN + ')' +\n /*match[4]*/ '(later|after|from now|henceforth|forward|out)?' +\n /*match[5]*/ '(?=(?:\\\\W|$))',\n'i');\n\nvar STRICT_PATTERN = new RegExp('' +\n /*match[1]*/ '(\\\\W|^)' +\n /*match[2]*/ '(in )?' +\n /*match[3]*/ '(' + util.TIME_UNIT_STRICT_PATTERN + ')' +\n /*match[4]*/ '(later|from now)?' +\n /*match[5]*/ '(?=(?:\\\\W|$))',\n'i');\n\nexports.Parser = function ENTimeLaterFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\n };\n\n this.extract = function(text, ref, match, opt){\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n\n var prefix = match[2];\n var suffix = match[4];\n if (!prefix && !suffix) return null;\n\n var preamble = match[1];\n var text = match[0].substr(preamble.length, match[0].length - preamble.length);\n var index = match.index + preamble.length;\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var fragments = util.extractDateTimeUnitFragments(match[3]);\n var date = dayjs(ref);\n for (var key in fragments) {\n date = date.add(fragments[key], key);\n }\n\n if (fragments['hour'] > 0 || fragments['minute'] > 0 || fragments['second'] > 0) {\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.start.assign('second', date.second());\n result.tags['ENTimeAgoFormatParser'] = true;\n } \n \n if (fragments['d'] > 0 || fragments['month'] > 0 || fragments['year'] > 0) {\n result.start.assign('day', date.date());\n result.start.assign('month', date.month() + 1);\n result.start.assign('year', date.year());\n } else {\n if (fragments['week'] > 0) {\n result.start.imply('weekday', date.day());\n }\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n }\n\n return result;\n };\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)(now|today|tonight|last\\s*night|(?:tomorrow|tmr|yesterday)\\s*|tomorrow|tmr|yesterday)(?=\\W|$)/i;\n\nexports.Parser = function ENCasualDateParser(){\n\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var refMoment = dayjs(ref);\n var startMoment = refMoment;\n var lowerText = text.toLowerCase();\n\n if(lowerText == 'tonight'){\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n } else if (/^tomorrow|^tmr/.test(lowerText)) {\n\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n\n } else if (/^yesterday/.test(lowerText)) {\n\n startMoment = startMoment.add(-1, 'day');\n\n } else if(lowerText.match(/last\\s*night/)) {\n\n result.start.imply('hour', 0);\n if (refMoment.hour() > 6) {\n startMoment = startMoment.add(-1, 'day');\n }\n\n } else if (lowerText.match(\"now\")) {\n\n result.start.assign('hour', refMoment.hour());\n result.start.assign('minute', refMoment.minute());\n result.start.assign('second', refMoment.second());\n result.start.assign('millisecond', refMoment.millisecond());\n\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags['ENCasualDateParser'] = true;\n return result;\n }\n}\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)((this)?\\s*(morning|afternoon|evening|noon|night))/i;\n\nvar TIME_MATCH = 4;\n\nexports.Parser = function ENCasualTimeParser(){\n\n Parser.apply(this, arguments);\n\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n if(!match[TIME_MATCH]) TIME_MATCH = 3;\n \n switch (match[TIME_MATCH].toLowerCase()) {\n\n case 'afternoon':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 15);\n break;\n\n case 'evening':\n case 'night':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 20);\n break;\n\n case 'morning':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 6);\n break;\n\n case 'noon':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 12);\n break;\n }\n \n result.tags['ENCasualTimeParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nconst parser = require('../parser');\nconst ParsedResult = require('../../result').ParsedResult;\n\nconst util = require('../../utils/JP'); \n\nconst PATTERN = /(?:(同|今|本|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\\s*)?([0-90-9]{1,2})月\\s*([0-90-9]{1,2})日/i;\nconst SPECIAL_YEAR_GROUP = 1;\nconst TYPICAL_YEAR_GROUP = 2;\nconst ERA_GROUP = 3;\nconst YEAR_NUMBER_GROUP = 4;\nconst MONTH_GROUP = 5;\nconst DAY_GROUP = 6;\n\nexports.Parser = function JPStandardParser(){\n parser.Parser.apply(this, arguments);\n \n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){ \n var result = new ParsedResult({\n text: match[0],\n index: match.index,\n ref: ref,\n });\n \n var month = match[MONTH_GROUP];\n month = util.toHankaku(month);\n month = parseInt(month);\n\n var day = match[DAY_GROUP];\n day = util.toHankaku(day);\n day = parseInt(day);\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n \n if (match[TYPICAL_YEAR_GROUP]) {\n\n var year = match[YEAR_NUMBER_GROUP];\n if (year == '元') {\n year = 1;\n } else {\n year = util.toHankaku(year);\n year = parseInt(year);\n }\n\n if (match[ERA_GROUP] == '令和') {\n year += 2018;\n } else if (match[ERA_GROUP] == '平成') {\n year += 1988;\n } else if (match[ERA_GROUP] == '昭和') {\n year += 1925;\n }\n\n result.start.assign('year', year);\n\n } else if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match('同|今|本')) {\n const moment = dayjs(ref)\n result.start.assign('year', moment.year());\n } else {\n const year = parser.findYearClosestToRef(ref, day, month);\n result.start.imply('year', year);\n }\n \n result.tags['JPStandardParser'] = true;\n return result;\n };\n\n}\n\n","\n\n/**\n * to-hankaku.js\n * convert to ascii code strings.\n *\n * @version 1.0.1\n * @author think49\n * @url https://gist.github.com/964592\n * @license http://www.opensource.org/licenses/mit-license.php (The MIT License)\n */\n \nexports.toHankaku = (function (String, fromCharCode) {\n \n function toHankaku (string) {\n return String(string).replace(/\\u2019/g, '\\u0027').replace(/\\u201D/g, '\\u0022').replace(/\\u3000/g, '\\u0020').replace(/\\uFFE5/g, '\\u00A5').replace(/[\\uFF01\\uFF03-\\uFF06\\uFF08\\uFF09\\uFF0C-\\uFF19\\uFF1C-\\uFF1F\\uFF21-\\uFF3B\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5E]/g, alphaNum);\n }\n \n function alphaNum (token) {\n return fromCharCode(token.charCodeAt(0) - 65248);\n }\n \n return toHankaku;\n})(String, String.fromCharCode);\n\n/**\n * to-zenkaku.js\n * convert to multi byte strings.\n *\n * @version 1.0.2\n * @author think49\n * @url https://gist.github.com/964592\n * @license http://www.opensource.org/licenses/mit-license.php (The MIT License)\n */\nexports.toZenkaku = (function (String, fromCharCode) {\n \n function toZenkaku (string) {\n return String(string).replace(/\\u0020/g, '\\u3000').replace(/\\u0022/g, '\\u201D').replace(/\\u0027/g, '\\u2019').replace(/\\u00A5/g, '\\uFFE5').replace(/[!#-&(),-9\\u003C-?A-[\\u005D_a-{}~]/g, alphaNum);\n }\n \n function alphaNum (token) {\n return fromCharCode(token.charCodeAt(0) + 65248);\n }\n \n return toZenkaku;\n})(String, String.fromCharCode);","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /今日|当日|昨日|明日|今夜|今夕|今晩|今朝/i;\n\nexports.Parser = function JPCasualDateParser(){\n \n Parser.apply(this, arguments);\n \n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){ \n \n var index = match.index;\n var text = match[0];\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var refMoment = dayjs(ref);\n var startMoment = refMoment;\n\n if(text == '今夜' || text == '今夕' || text == '今晩'){\n // Normally means this coming midnight \n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n } else if(text == '明日'){\n\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 4) {\n startMoment = startMoment.add(1, 'day');\n }\n\n } else if(text == '昨日') {\n\n startMoment = startMoment.add(-1, 'day');\n\n } else if (text.match(\"今朝\")) {\n\n result.start.imply('hour', 6);\n result.start.imply('meridiem', 0);\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags['JPCasualDateParser'] = true;\n return result;\n }\n}\n\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\n/*\n Valid patterns:\n - esta manhã -> today in the morning\n - esta tarde -> today in the afternoon/evening\n - esta noite -> tonight\n - ontem de -> yesterday in the morning\n - ontem a tarde -> yesterday in the afternoon/evening\n - ontem a noite -> yesterday at night\n - amanhã de manhã -> tomorrow in the morning\n - amanhã a tarde -> tomorrow in the afternoon/evening\n - amanhã a noite -> tomorrow at night\n - hoje -> today\n - ontem -> yesterday\n - amanhã -> tomorrow\n */\nvar PATTERN = /(\\W|^)(agora|esta\\s*(manhã|tarde|noite)|(ontem|amanhã)\\s*(de|à)\\s*(manhã|tarde|noite)|hoje|amanhã|ontem|noite)(?=\\W|$)/i;\n\nexports.Parser = function PTCasualDateParser(){\n\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var refMoment = dayjs(ref);\n var startMoment = refMoment;\n var lowerText = text.toLowerCase().replace(/\\s+/g, ' ');\n\n if(lowerText == 'amanhã'){\n\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n\n } else if(lowerText == 'ontem') {\n\n startMoment = startMoment.add(-1, 'day');\n }\n else if(lowerText == 'noite') {\n\n result.start.imply('hour', 0);\n if (refMoment.hour() > 6) {\n startMoment = startMoment.add(-1, 'day');\n }\n\n } else if (lowerText.match(\"esta\")) {\n\n var secondMatch = match[3].toLowerCase();\n if (secondMatch == \"tarde\") {\n\n result.start.imply('hour', 18);\n\n } else if (secondMatch == \"manhã\") {\n\n result.start.imply('hour', 6);\n\n } else if (secondMatch == \"noite\") {\n\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n }\n } else if (lowerText.match(/de|à/)) {\n\n var firstMatch = match[4].toLowerCase();\n if (firstMatch === 'ontem') {\n\n startMoment = startMoment.add(-1, 'day');\n\n } else if (firstMatch === 'amanhã') {\n\n startMoment = startMoment.add(1, 'day');\n\n }\n\n var secondMatch = match[6].toLowerCase();\n if (secondMatch == \"tarde\") {\n\n result.start.imply('hour', 18);\n\n } else if (secondMatch == \"manhã\") {\n\n result.start.imply('hour', 9);\n\n } else if (secondMatch == \"noite\") {\n\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n }\n\n } else if (lowerText.match(\"agora\")) {\n\n result.start.imply('hour', refMoment.hour());\n result.start.imply('minute', refMoment.minute());\n result.start.imply('second', refMoment.second());\n result.start.imply('millisecond', refMoment.millisecond());\n\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags['PTCasualDateParser'] = true;\n return result;\n }\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)(dentro\\s*de|em|em*até)\\s*([0-9]+|mei[oa]|uma?)\\s*(minutos?|horas?|dias?)\\s*(?=(?:\\W|$))/i;\n\nexports.Parser = function PTDeadlineFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var index = match.index + match[1].length;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var num = parseInt(match[3]);\n if (isNaN(num)) {\n if (match[3].match(/(meio|meia)/)) {\n num = 0.5;\n } else {\n num = 1;\n }\n }\n\n var date = dayjs(ref);\n if (match[4].match(/dia/)) {\n date = date.add(num, 'd');\n\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n return result;\n }\n\n\n if (match[4].match(/hora/)) {\n\n date = date.add(num, 'hour');\n\n } else if (match[4].match(/minuto/)) {\n\n date = date.add(num, 'minute');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.tags['PTDeadlineFormatParser'] = true;\n return result;\n };\n}\n","var parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar util = require('../../utils/PT');\n\nvar DAYS_OFFSET = util.WEEKDAY_OFFSET;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(domingo|segunda|segunda-feira|terça|terça-feira|quarta|quarta-feira|quinta|quinta-feira|sexta|sexta-feira|sábado|sabado|dom|seg|ter|qua|qui|sex|sab)\\\\s*,?\\\\s*)?' +\n '([0-9]{1,2})(?:º|ª|°)?' +\n '(?:\\\\s*(?:desde|de|\\\\-|\\\\–|ao?|\\\\s)\\\\s*([0-9]{1,2})(?:º|ª|°)?)?\\\\s*(?:de)?\\\\s*' +\n '(Jan(?:eiro|\\\\.)?|Fev(?:ereiro|\\\\.)?|Mar(?:ço|\\\\.)?|Abr(?:il|\\\\.)?|Mai(?:o|\\\\.)?|Jun(?:ho|\\\\.)?|Jul(?:ho|\\\\.)?|Ago(?:sto|\\\\.)?|Set(?:embro|\\\\.)?|Out(?:ubro|\\\\.)?|Nov(?:embro|\\\\.)?|Dez(?:embro|\\\\.)?)' +\n '(?:\\\\s*(?:de?)?(\\\\s*[0-9]{1,4}(?![^\\\\s]\\\\d))(\\\\s*[ad]\\\\.?\\\\s*c\\\\.?|a\\\\.?\\\\s*d\\\\.?)?)?' +\n '(?=\\\\W|$)', 'i'\n );\n\nvar WEEKDAY_GROUP = 2;\nvar DATE_GROUP = 3;\nvar DATE_TO_GROUP = 4;\nvar MONTH_NAME_GROUP = 5;\nvar YEAR_GROUP = 6;\nvar YEAR_BE_GROUP = 7;\n\nexports.Parser = function PTMonthNameLittleEndianParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = match[DATE_GROUP];\n day = parseInt(day);\n\n var year = null;\n if (match[YEAR_GROUP]) {\n year = match[YEAR_GROUP];\n year = parseInt(year);\n\n if(match[YEAR_BE_GROUP]){\n if (/a\\.?\\s*c\\.?/i.test(match[YEAR_BE_GROUP])) {\n // antes de Cristo\n year = -year;\n }\n } else if (year < 100){\n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month);\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n var weekday = match[WEEKDAY_GROUP];\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n // Text can be 'range' value. Such as '12 - 13 January 2012'\n if (match[DATE_TO_GROUP]) {\n result.end = result.start.clone();\n result.end.assign('day', parseInt(match[DATE_TO_GROUP]));\n }\n\n result.tags['PTMonthNameLittleEndianParser'] = true;\n return result;\n };\n}\n","exports.WEEKDAY_OFFSET = {\n 'domingo': 0,\n 'dom': 0,\n 'segunda': 1,\n 'segunda-feira': 1,\n 'seg': 1,\n 'terça': 2,\n 'terca': 2,\n 'terça-feira': 2,\n 'terca-feira': 2,\n 'ter':2,\n 'quarta': 3,\n 'quarta-feira': 3,\n 'qua': 3,\n 'quinta': 4,\n 'quinta-feira': 4,\n 'qui': 4,\n 'sexta': 5,\n 'sexta-feira': 5,\n 'sex': 5,\n 'sábado': 6,\n 'sabado': 6,\n 'sab': 6,}\n \n exports.MONTH_OFFSET = {\n 'janeiro': 1,\n 'jan': 1,\n 'jan.': 1,\n 'fevereiro': 2,\n 'fev': 2,\n 'fev.': 2,\n 'março': 3,\n 'mar': 3,\n 'mar.': 3,\n 'abril': 4,\n 'abr': 4,\n 'abr.': 4,\n 'maio': 5,\n 'mai': 5,\n 'mai.': 5,\n 'junho': 6,\n 'jun': 6,\n 'jun.': 6,\n 'julho': 7,\n 'jul': 7,\n 'jul.': 7,\n 'agosto': 8,\n 'ago': 8,\n 'ago.': 8,\n 'setembro': 9,\n 'set': 9,\n 'set.': 9,\n 'outubro': 10,\n 'out': 10,\n 'out.': 10,\n 'novembro': 11,\n 'nov': 11,\n 'nov.': 11,\n 'dezembro': 12,\n 'dez': 12,\n 'dez.': 12,\n }","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - Martes 3/11/2015\n - 3/11/2015\n - 3/11\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '((?:domingo|dom|segunda|segunda-feira|seg|terça|terça-feira|ter|quarta|quarta-feira|qua|quinta|quinta-feira|qui|sexta|sexta-feira|sex|s[áa]bado|sab))' +\n '\\\\s*\\\\,?\\\\s*' +\n ')?' +\n '([0-1]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nvar DAYS_OFFSET = { 'domingo': 0, 'dom': 0, 'segunda': 1, 'segunda-feira': 1, 'seg': 1, 'terça': 2, 'terça-feira': 2, 'ter': 2, 'quarta': 3, 'quarta-feira': 3, 'qua': 3,\n 'quinta': 4, 'quinta-feira': 4, 'qui': 4, 'sexta': 5, 'sexta-feira': 5, 'sex': 5, 'sábado': 6, 'sabado': 6, 'sab': 6,}\n\n\nvar OPENNING_GROUP = 1;\nvar ENDING_GROUP = 6;\n\n// in Spanish we use day/month/year\nvar WEEKDAY_GROUP = 2;\nvar MONTH_GROUP = 4;\nvar DAY_GROUP = 3;\nvar YEAR_GROUP = 5;\n\nexports.Parser = function PTSlashDateFormatParser(argument) {\n Parser.apply(this, arguments);\n\n this.pattern = function () { return PATTERN; };\n this.extract = function(text, ref, match, opt){\n\n if(match[OPENNING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n var index = match.index + match[OPENNING_GROUP].length;\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n });\n\n if(text.match(/^\\d\\.\\d$/)) return;\n if(text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}$/)) return;\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;\n\n var date = null;\n var year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n var month = match[MONTH_GROUP];\n var day = match[DAY_GROUP];\n\n month = parseInt(month);\n day = parseInt(day);\n year = parseInt(year);\n\n if(month < 1 || month > 12) {\n if(month > 12) {\n // dd/mm/yyyy date format if day looks like a month, and month\n // looks like a day.\n if (day >= 1 && day <= 12 && month >= 13 && month <= 31) {\n // unambiguous\n var tday = month;\n month = day;\n day = tday;\n }\n else {\n // both month and day are <= 12\n return null;\n }\n }\n }\n if(day < 1 || day > 31) return null;\n\n if(year < 100){\n if(year > 50){\n year = year + 1900;\n }else{\n year = year + 2000;\n }\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['PTSlashDateFormatParser'] = true;\n return result;\n };\n};","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)há\\s*([0-9]+|mei[oa]|uma?)\\s*(minutos?|horas?|semanas?|dias?|mes(es)?|anos?)(?=(?:\\W|$))/i;\n\nexports.Parser = function PTTimeAgoFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n }\n\n this.extract = function(text, ref, match, opt){\n\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n index = match.index + match[1].length;\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var num = parseInt(match[2]);\n if (isNaN(num)) {\n if (match[2].match(/mei/)) {\n num = 0.5;\n } else {\n num = 1;\n }\n }\n\n var date = dayjs(ref);\n\n if (match[3].match(/hora/) || match[3].match(/minuto/)) {\n if (match[3].match(/hora/)) {\n\n date = date.add(-num, 'hour');\n\n } else if (match[3].match(/minuto/)) {\n\n date = date.add(-num, 'minute');\n }\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.tags['PTTimeAgoFormatParser'] = true;\n return result;\n }\n\n if (match[3].match(/semana/)) {\n date = date.add(-num, 'week');\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.imply('weekday', date.day());\n return result;\n }\n\n if (match[3].match(/dia/)) {\n date = date.add(-num, 'd');\n }\n\n if (match[3].match(/mes/)) {\n date = date.add(-num, 'month');\n }\n\n if (match[3].match(/ano/)) {\n\n date = date.add(-num, 'year');\n }\n\n result.start.assign('day', date.date());\n result.start.assign('month', date.month() + 1);\n result.start.assign('year', date.year());\n return result;\n\n };\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar ParsedComponents = require('../../result').ParsedComponents;\n\nvar FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:ao?|às?|das|da|do)\\\\s*)?\" +\n \"(\\\\d{1,4}|meio-dia|meia-noite|meio dia|meia noite)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|a(?:o)?|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nvar HOUR_GROUP = 2;\nvar MINUTE_GROUP = 3;\nvar SECOND_GROUP = 4;\nvar AM_PM_HOUR_GROUP = 5;\n\nexports.Parser = function PTTimeExpressionParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return FIRST_REG_PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n // This pattern can be overlaped Ex. [12] AM, 1[2] AM\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n var refMoment = dayjs(ref);\n var result = new ParsedResult();\n result.ref = ref;\n result.index = match.index + match[1].length;\n result.text = match[0].substring(match[1].length);\n result.tags['PTTimeExpressionParser'] = true;\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month()+1);\n result.start.imply('year', refMoment.year());\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n\n // ----- Hours\n if (match[HOUR_GROUP].toLowerCase().match(/meio\\-di/)){\n meridiem = 1;\n hour = 12;\n } else if (match[HOUR_GROUP].toLowerCase() == \"meia-noite\") {\n meridiem = 0;\n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if(match[MINUTE_GROUP] != null){\n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) {\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if(match[AM_PM_HOUR_GROUP] != null) {\n if(hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = 0;\n if(hour == 12) hour = 0;\n }\n\n if(ampm == \"p\"){\n meridiem = 1;\n if(hour != 12) hour += 12;\n }\n }\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n if (meridiem >= 0) {\n result.start.assign('meridiem', meridiem);\n }\n\n // ==============================================================\n // Extracting the 'to' chunk\n // ==============================================================\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n // Not accept number only result\n if (result.text.match(/^\\d+$/)) {\n return null;\n }\n return result;\n }\n\n\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*(\\+|\\-)\\s*\\d{3,4}$/)) {\n return result;\n }\n\n if(result.end == null){\n result.end = new ParsedComponents(null, result.start.date());\n }\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n hour = parseInt(match[2]);\n\n // ----- Minute\n if (match[MINUTE_GROUP]!= null) {\n\n minute = parseInt(match[MINUTE_GROUP]);\n if(minute >= 60) return result;\n\n } else if (hour > 100) {\n\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP] != null){\n\n if (hour > 12) return null;\n\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"a\"){\n meridiem = 0;\n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n }\n\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"p\"){\n meridiem = 1;\n if(hour != 12) hour += 12;\n }\n\n if (!result.start.isCertain('meridiem')) {\n if (meridiem == 0) {\n\n result.start.imply('meridiem', 0);\n\n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', 1);\n\n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12);\n }\n }\n }\n\n } else if(hour >= 12) {\n meridiem = 1;\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n\n return result;\n }\n}\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;\n\nvar DAYS_OFFSET = { 'domingo': 0, 'dom': 0, 'segunda': 1, 'segunda-feira': 1, 'seg': 1, 'terça': 2, 'terça-feira': 2, 'ter': 2, 'quarta': 3, 'quarta-feira': 3, 'qua': 3,\n 'quinta': 4, 'quinta-feira': 4, 'qui': 4, 'sexta': 5, 'sexta-feira': 5, 'sex': 5, 'sábado': 6, 'sabado': 6, 'sab': 6,}\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:(este|esta|passado|pr[oó]ximo)\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(este|esta|passado|pr[óo]ximo)\\\\s*semana)?' +\n '(?=\\\\W|$)', 'i');\n\nvar PREFIX_GROUP = 2;\nvar WEEKDAY_GROUP = 3;\nvar POSTFIX_GROUP = 4;\n\nexports.Parser = function PTWeekdayParser() {\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n var index = match.index + match[1].length;\n var text = match[0].substr(match[1].length, match[0].length - match[1].length);\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n var offset = DAYS_OFFSET[dayOfWeek];\n if(offset === undefined) return null;\n\n var modifier = null;\n var prefix = match[PREFIX_GROUP];\n var postfix = match[POSTFIX_GROUP];\n if (prefix || postfix) {\n var norm = prefix || postfix;\n norm = norm.toLowerCase();\n\n if(norm == 'passado') {\n modifier = 'this';\n }\n else if(norm == 'próximo' || norm == 'proximo') {\n modifier = 'next';\n }\n else if(norm== 'este') {\n modifier = 'this';\n }\n }\n\n updateParsedComponent(result, ref, offset, modifier);\n result.tags['PTWeekdayParser'] = true;\n return result;\n }\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\n/*\n Valid patterns:\n - esta mañana -> today in the morning\n - esta tarde -> today in the afternoon/evening\n - esta noche -> tonight\n - ayer por la mañana -> yesterday in the morning\n - ayer por la tarde -> yesterday in the afternoon/evening\n - ayer por la noche -> yesterday at night\n - mañana por la mañana -> tomorrow in the morning\n - mañana por la tarde -> tomorrow in the afternoon/evening\n - mañana por la noche -> tomorrow at night\n - anoche -> tomorrow at night\n - hoy -> today\n - ayer -> yesterday\n - mañana -> tomorrow\n */\nvar PATTERN = /(\\W|^)(ahora|esta\\s*(mañana|tarde|noche)|(ayer|mañana)\\s*por\\s*la\\s*(mañana|tarde|noche)|hoy|mañana|ayer|anoche)(?=\\W|$)/i;\n\nexports.Parser = function ESCasualDateParser(){\n\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var text = match[0].substr(match[1].length);\n var index = match.index + match[1].length;\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var refMoment = dayjs(ref);\n var startMoment = refMoment;\n var lowerText = text.toLowerCase().replace(/\\s+/g, ' ');\n\n if(lowerText == 'mañana'){\n\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n\n } else if(lowerText == 'ayer') {\n\n startMoment = startMoment.add(-1, 'day');\n }\n else if(lowerText == 'anoche') {\n\n result.start.imply('hour', 0);\n if (refMoment.hour() > 6) {\n startMoment = startMoment.add(-1, 'day');\n }\n\n } else if (lowerText.match(\"esta\")) {\n\n var secondMatch = match[3].toLowerCase();\n if (secondMatch == \"tarde\") {\n\n result.start.imply('hour', 18);\n\n } else if (secondMatch == \"mañana\") {\n\n result.start.imply('hour', 6);\n\n } else if (secondMatch == \"noche\") {\n\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n }\n } else if (lowerText.match(/por\\s*la/)) {\n\n var firstMatch = match[4].toLowerCase();\n if (firstMatch === 'ayer') {\n\n startMoment = startMoment.add(-1, 'day');\n\n } else if (firstMatch === 'mañana') {\n\n startMoment = startMoment.add(1, 'day');\n\n }\n\n var secondMatch = match[5].toLowerCase();\n if (secondMatch == \"tarde\") {\n\n result.start.imply('hour', 18);\n\n } else if (secondMatch == \"mañana\") {\n\n result.start.imply('hour', 9);\n\n } else if (secondMatch == \"noche\") {\n\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n\n }\n\n } else if (lowerText.match(\"ahora\")) {\n\n result.start.imply('hour', refMoment.hour());\n result.start.imply('minute', refMoment.minute());\n result.start.imply('second', refMoment.second());\n result.start.imply('millisecond', refMoment.millisecond());\n\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags['ESCasualDateParser'] = true;\n return result;\n }\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)(dentro\\s*de|en)\\s*([0-9]+|medi[oa]|una?)\\s*(minutos?|horas?|d[ií]as?)\\s*(?=(?:\\W|$))/i;\n\nexports.Parser = function ESDeadlineFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var index = match.index + match[1].length;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var num = parseInt(match[3]);\n if (isNaN(num)) {\n if (match[3].match(/medi/)) {\n num = 0.5;\n } else {\n num = 1;\n }\n }\n\n var date = dayjs(ref);\n if (match[4].match(/d[ií]a/)) {\n date = date.add(num, 'd');\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n return result;\n }\n\n\n if (match[4].match(/hora/)) {\n\n date = date.add(num, 'hour');\n\n } else if (match[4].match(/minuto/)) {\n\n date = date.add(num, 'minute');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.tags['ESDeadlineFormatParser'] = true;\n return result;\n };\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)hace\\s*([0-9]+|medi[oa]|una?)\\s*(minutos?|horas?|semanas?|d[ií]as?|mes(es)?|años?)(?=(?:\\W|$))/i;\n\nexports.Parser = function ESTimeAgoFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n }\n\n this.extract = function(text, ref, match, opt){\n\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n index = match.index + match[1].length;\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var num = parseInt(match[2]);\n if (isNaN(num)) {\n if (match[2].match(/medi/)) {\n num = 0.5;\n } else {\n num = 1;\n }\n }\n\n var date = dayjs(ref);\n\n if (match[3].match(/hora/) || match[3].match(/minuto/)) {\n if (match[3].match(/hora/)) {\n\n date = date.add(-num, 'hour');\n\n } else if (match[3].match(/minuto/)) {\n\n date = date.add(-num, 'minute');\n }\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.tags['ESTimeAgoFormatParser'] = true;\n return result;\n }\n\n if (match[3].match(/semana/)) {\n date = date.add(-num, 'week');\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.imply('weekday', date.day());\n return result;\n }\n\n if (match[3].match(/d[ií]a/)) {\n date = date.add(-num, 'd');\n }\n\n if (match[3].match(/mes/)) {\n date = date.add(-num, 'month');\n }\n\n if (match[3].match(/año/)) {\n\n date = date.add(-num, 'year');\n }\n\n result.start.assign('day', date.date());\n result.start.assign('month', date.month() + 1);\n result.start.assign('year', date.year());\n return result;\n\n };\n}\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar ParsedComponents = require('../../result').ParsedComponents;\n\nvar FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:a las?|al?|desde|de)\\\\s*)?\" +\n \"(\\\\d{1,4}|mediod[ií]a|medianoche)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|a(?:\\s*las)?|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\n \"(?=\\\\W|$)\", 'i');\n\nvar HOUR_GROUP = 2;\nvar MINUTE_GROUP = 3;\nvar SECOND_GROUP = 4;\nvar AM_PM_HOUR_GROUP = 5;\n\nexports.Parser = function ESTimeExpressionParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return FIRST_REG_PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n // This pattern can be overlaped Ex. [12] AM, 1[2] AM\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n var refMoment = dayjs(ref);\n var result = new ParsedResult();\n result.ref = ref;\n result.index = match.index + match[1].length;\n result.text = match[0].substring(match[1].length);\n result.tags['ESTimeExpressionParser'] = true;\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month()+1);\n result.start.imply('year', refMoment.year());\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n\n // ----- Hours\n if (match[HOUR_GROUP].toLowerCase().match(/mediod/)){\n meridiem = 1;\n hour = 12;\n } else if (match[HOUR_GROUP].toLowerCase() == \"medianoche\") {\n meridiem = 0;\n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if(match[MINUTE_GROUP] != null){\n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) {\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if(match[AM_PM_HOUR_GROUP] != null) {\n if(hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if(ampm == \"a\"){\n meridiem = 0;\n if(hour == 12) hour = 0;\n }\n\n if(ampm == \"p\"){\n meridiem = 1;\n if(hour != 12) hour += 12;\n }\n }\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n if (meridiem >= 0) {\n result.start.assign('meridiem', meridiem);\n }\n\n // ==============================================================\n // Extracting the 'to' chunk\n // ==============================================================\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n // Not accept number only result\n if (result.text.match(/^\\d+$/)) {\n return null;\n }\n return result;\n }\n\n\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*(\\+|\\-)\\s*\\d{3,4}$/)) {\n return result;\n }\n\n if(result.end == null){\n result.end = new ParsedComponents(null, result.start.date());\n }\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){\n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n hour = parseInt(match[2]);\n\n // ----- Minute\n if (match[MINUTE_GROUP]!= null) {\n\n minute = parseInt(match[MINUTE_GROUP]);\n if(minute >= 60) return result;\n\n } else if (hour > 100) {\n\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP] != null){\n\n if (hour > 12) return null;\n\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"a\"){\n meridiem = 0;\n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n }\n\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"p\"){\n meridiem = 1;\n if(hour != 12) hour += 12;\n }\n\n if (!result.start.isCertain('meridiem')) {\n if (meridiem == 0) {\n\n result.start.imply('meridiem', 0);\n\n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', 1);\n\n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12);\n }\n }\n }\n\n } else if(hour >= 12) {\n meridiem = 1;\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n\n return result;\n }\n}\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;\n\nvar DAYS_OFFSET = { 'domingo': 0, 'dom': 0, 'lunes': 1, 'lun': 1, 'martes': 2, 'mar':2, 'miercoles': 3, 'miércoles': 3, 'mie': 3,\n 'jueves': 4, 'jue': 4, 'viernes': 5, 'vier': 5, 'sabado': 6, 'sábado': 6, 'sab': 6,}\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:(este|pasado|pr[oó]ximo)\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(este|pasado|pr[óo]ximo)\\\\s*week)?' +\n '(?=\\\\W|$)', 'i');\n\nvar PREFIX_GROUP = 2;\nvar WEEKDAY_GROUP = 3;\nvar POSTFIX_GROUP = 4;\n\nexports.Parser = function ESWeekdayParser() {\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n var index = match.index + match[1].length;\n var text = match[0].substr(match[1].length, match[0].length - match[1].length);\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n var offset = DAYS_OFFSET[dayOfWeek];\n if(offset === undefined) return null;\n\n var modifier = null;\n var prefix = match[PREFIX_GROUP];\n var postfix = match[POSTFIX_GROUP];\n if (prefix || postfix) {\n var norm = prefix || postfix;\n norm = norm.toLowerCase();\n\n if(norm == 'pasado') {\n modifier = 'this';\n }\n else if(norm == 'próximo' || norm == 'proximo') {\n modifier = 'next';\n }\n else if(norm== 'este') {\n modifier = 'this';\n }\n }\n\n updateParsedComponent(result, ref, offset, modifier);\n result.tags['ESWeekdayParser'] = true;\n return result;\n }\n}\n","var parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar util = require('../../utils/ES');\n\nvar DAYS_OFFSET = util.WEEKDAY_OFFSET;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(Domingo|Lunes|Martes|Miércoles|Miercoles|Jueves|Viernes|Sábado|Sabado|Dom|Lun|Mar|Mie|Jue|Vie|Sab)\\\\s*,?\\\\s*)?' +\n '([0-9]{1,2})(?:º|ª|°)?' +\n '(?:\\\\s*(?:desde|de|\\\\-|\\\\–|al?|hasta|\\\\s)\\\\s*([0-9]{1,2})(?:º|ª|°)?)?\\\\s*(?:de)?\\\\s*' +\n '(Ene(?:ro|\\\\.)?|Feb(?:rero|\\\\.)?|Mar(?:zo|\\\\.)?|Abr(?:il|\\\\.)?|May(?:o|\\\\.)?|Jun(?:io|\\\\.)?|Jul(?:io|\\\\.)?|Ago(?:sto|\\\\.)?|Sep(?:tiembre|\\\\.)?|Set(?:iembre|\\\\.)?|Oct(?:ubre|\\\\.)?|Nov(?:iembre|\\\\.)?|Dic(?:iembre|\\\\.)?)' +\n '(?:\\\\s*(?:del?)?(\\\\s*[0-9]{1,4}(?![^\\\\s]\\\\d))(\\\\s*[ad]\\\\.?\\\\s*c\\\\.?|a\\\\.?\\\\s*d\\\\.?)?)?' +\n '(?=\\\\W|$)', 'i'\n );\n\nvar WEEKDAY_GROUP = 2;\nvar DATE_GROUP = 3;\nvar DATE_TO_GROUP = 4;\nvar MONTH_NAME_GROUP = 5;\nvar YEAR_GROUP = 6;\nvar YEAR_BE_GROUP = 7;\n\nexports.Parser = function ESMonthNameLittleEndianParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = match[DATE_GROUP];\n day = parseInt(day);\n\n var year = null;\n if (match[YEAR_GROUP]) {\n year = match[YEAR_GROUP];\n year = parseInt(year);\n\n if(match[YEAR_BE_GROUP]){\n if (/a\\.?\\s*c\\.?/i.test(match[YEAR_BE_GROUP])) {\n // antes de Cristo\n year = -year;\n }\n } else if (year < 100){\n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month);\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n var weekday = match[WEEKDAY_GROUP];\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n // Text can be 'range' value. Such as '12 - 13 January 2012'\n if (match[DATE_TO_GROUP]) {\n result.end = result.start.clone();\n result.end.assign('day', parseInt(match[DATE_TO_GROUP]));\n }\n\n result.tags['ESMonthNameLittleEndianParser'] = true;\n return result;\n };\n}\n","exports.WEEKDAY_OFFSET = {\n 'domingo': 0,\n 'dom': 0,\n 'lunes': 1,\n 'lun': 1,\n 'martes': 2,\n 'mar':2,\n 'miércoles': 3,\n 'miercoles': 3,\n 'mie': 3,\n 'jueves': 4,\n 'jue': 4,\n 'viernes': 5,\n 'vie': 5,\n 'sábado': 6,\n 'sabado': 6,\n 'sab': 6,}\n\nexports.MONTH_OFFSET = {\n 'enero': 1,\n 'ene': 1,\n 'ene.': 1,\n 'febrero': 2,\n 'feb': 2,\n 'feb.': 2,\n 'marzo': 3,\n 'mar': 3,\n 'mar.': 3,\n 'abril': 4,\n 'abr': 4,\n 'abr.': 4,\n 'mayo': 5,\n 'may': 5,\n 'may.': 5,\n 'junio': 6,\n 'jun': 6,\n 'jun.': 6,\n 'julio': 7,\n 'jul': 7,\n 'jul.': 7,\n 'agosto': 8,\n 'ago': 8,\n 'ago.': 8,\n 'septiembre': 9,\n 'sep': 9,\n 'sept': 9,\n 'sep.': 9,\n 'sept.': 9,\n 'octubre': 10,\n 'oct': 10,\n 'oct.': 10,\n 'noviembre': 11,\n 'nov': 11,\n 'nov.': 11,\n 'diciembre': 12,\n 'dic': 12,\n 'dic.': 12,\n}\n","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - Martes 3/11/2015\n - 3/11/2015\n - 3/11\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '((?:domingo|dom|lunes|lun|martes|mar|mi[ée]rcoles|mie|jueves|jue|viernes|vie|s[áa]bado|sab))' +\n '\\\\s*\\\\,?\\\\s*' +\n ')?' +\n '([0-1]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nvar DAYS_OFFSET = { 'domingo': 0, 'dom': 0, 'lunes': 1, 'lun': 1, 'martes': 2, 'mar': 2, 'miercoles': 3, 'miércoles': 3, 'mie': 3,\n 'jueves': 4, 'jue': 4, 'viernes': 5, 'vier': 5, 'sábado': 6, 'sabado': 6, 'sab': 6,}\n\n\nvar OPENNING_GROUP = 1;\nvar ENDING_GROUP = 6;\n\n// in Spanish we use day/month/year\nvar WEEKDAY_GROUP = 2;\nvar MONTH_GROUP = 4;\nvar DAY_GROUP = 3;\nvar YEAR_GROUP = 5;\n\nexports.Parser = function ESSlashDateFormatParser(argument) {\n Parser.apply(this, arguments);\n\n this.pattern = function () { return PATTERN; };\n this.extract = function(text, ref, match, opt){\n\n if(match[OPENNING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n var index = match.index + match[OPENNING_GROUP].length;\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n });\n\n if(text.match(/^\\d\\.\\d$/)) return;\n if(text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}$/)) return;\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;\n\n var date = null;\n var year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n var month = match[MONTH_GROUP];\n var day = match[DAY_GROUP];\n\n month = parseInt(month);\n day = parseInt(day);\n year = parseInt(year);\n\n if(month < 1 || month > 12) {\n if(month > 12) {\n // dd/mm/yyyy date format if day looks like a month, and month\n // looks like a day.\n if (day >= 1 && day <= 12 && month >= 13 && month <= 31) {\n // unambiguous\n var tday = month;\n month = day;\n day = tday;\n }\n else {\n // both month and day are <= 12\n return null;\n }\n }\n }\n if(day < 1 || day > 31) return null;\n\n if(year < 100){\n if(year > 50){\n year = year + 1900;\n }else{\n year = year + 2000;\n }\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['ESSlashDateFormatParser'] = true;\n return result;\n };\n};","const dayjs = require('dayjs');\r\nvar Parser = require('../parser').Parser;\r\nvar ParsedResult = require('../../result').ParsedResult;\r\n\r\nvar PATTERN = /(\\W|^)(maintenant|aujourd'hui|ajd|cette\\s*nuit|la\\s*veille|(demain|hier)(\\s*(matin|soir|aprem|après-midi))?|ce\\s*(matin|soir)|cet\\s*(après-midi|aprem))(?=\\W|$)/i;\r\n\r\nexports.Parser = function FRCasualDateParser(){\r\n\r\n Parser.apply(this, arguments);\r\n\r\n this.pattern = function() { return PATTERN; }\r\n\r\n this.extract = function(text, ref, match, opt){\r\n\r\n var text = match[0].substr(match[1].length);\r\n var index = match.index + match[1].length;\r\n var result = new ParsedResult({\r\n index: index,\r\n text: text,\r\n ref: ref,\r\n });\r\n\r\n var refMoment = dayjs(ref);\r\n var startMoment = refMoment;\r\n var lowerText = text.toLowerCase();\r\n\r\n if(lowerText.match(/demain/)){\r\n // Check not \"Tomorrow\" on late night\r\n if(refMoment.hour() > 1) {\r\n startMoment = startMoment.add(1, 'day');\r\n }\r\n } \r\n\r\n if(lowerText.match(/hier/)) {\r\n startMoment = startMoment.add(-1, 'day');\r\n }\r\n\r\n if(lowerText.match(/cette\\s*nuit/)){\r\n // Normally means this coming midnight\r\n result.start.imply('hour', 22);\r\n result.start.imply('meridiem', 1);\r\n\r\n } else if(lowerText.match(/la\\s*veille/)) {\r\n\r\n result.start.imply('hour', 0);\r\n if (refMoment.hour() > 6) {\r\n startMoment = startMoment.add(-1, 'day');\r\n }\r\n\r\n } else if (lowerText.match(/(après-midi|aprem)/)) {\r\n\r\n result.start.imply('hour', 14);\r\n\r\n } else if (lowerText.match(/(soir)/)) {\r\n\r\n result.start.imply('hour', 18);\r\n\r\n } else if (lowerText.match(/matin/)) {\r\n\r\n result.start.imply('hour', 8);\r\n\r\n } else if (lowerText.match(\"maintenant\")) {\r\n\r\n result.start.imply('hour', refMoment.hour());\r\n result.start.imply('minute', refMoment.minute());\r\n result.start.imply('second', refMoment.second());\r\n result.start.imply('millisecond', refMoment.millisecond());\r\n\r\n }\r\n\r\n result.start.assign('day', startMoment.date())\r\n result.start.assign('month', startMoment.month() + 1)\r\n result.start.assign('year', startMoment.year())\r\n result.tags['FRCasualDateParser'] = true;\r\n return result;\r\n }\r\n}\r\n","const dayjs = require('dayjs');\r\nvar Parser = require('../parser').Parser;\r\nvar ParsedResult = require('../../result').ParsedResult;\r\nvar util = require('../../utils/FR');\r\n\r\nvar PATTERN = new RegExp('(\\\\W|^)' +\r\n '(dans|en)\\\\s*' +\r\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|une?|(?:\\\\s*quelques)?|demi(?:\\\\s*|-?)?)\\\\s*' +\r\n '(secondes?|min(?:ute)?s?|heures?|jours?|semaines?|mois|années?)\\\\s*' +\r\n '(?=\\\\W|$)', 'i'\r\n);\r\n\r\nvar STRICT_PATTERN = new RegExp('(\\\\W|^)' +\r\n '(dans|en)\\\\s*' +\r\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|un?)\\\\s*' +\r\n '(secondes?|minutes?|heures?|jours?)\\\\s*' +\r\n '(?=\\\\W|$)', 'i'\r\n);\r\n\r\nexports.Parser = function FRDeadlineFormatParser(){\r\n Parser.apply(this, arguments);\r\n\r\n this.pattern = function() {\r\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\r\n };\r\n\r\n this.extract = function(text, ref, match, opt){\r\n\r\n var index = match.index + match[1].length;\r\n var text = match[0];\r\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\r\n\r\n var result = new ParsedResult({\r\n index: index,\r\n text: text,\r\n ref: ref\r\n });\r\n\r\n var num = match[3];\r\n if (util.INTEGER_WORDS[num] !== undefined) {\r\n num = util.INTEGER_WORDS[num];\r\n } else if (num === 'un' || num === 'une'){\r\n num = 1;\r\n } else if (num.match(/quelques?/i)){\r\n num = 3;\r\n } else if (num.match(/demi-?/i)) {\r\n num = 0.5;\r\n } else {\r\n num = parseInt(num);\r\n }\r\n\r\n var date = dayjs(ref);\r\n if (match[4].match(/jour|semaine|mois|année/i)) {\r\n\r\n if (match[4].match(/jour/)) {\r\n date = date.add(num, 'd');\r\n } else if (match[4].match(/semaine/i)) {\r\n date = date.add(num * 7, 'd');\r\n } else if (match[4].match(/mois/i)) {\r\n date = date.add(num, 'month');\r\n } else if (match[4].match(/année/i)) {\r\n date = date.add(num, 'year');\r\n }\r\n\r\n result.start.assign('year', date.year());\r\n result.start.assign('month', date.month() + 1);\r\n result.start.assign('day', date.date());\r\n return result;\r\n }\r\n\r\n if (match[4].match(/heure/i)) {\r\n\r\n date = date.add(num, 'hour');\r\n\r\n } else if (match[4].match(/min/i)) {\r\n\r\n date = date.add(num, 'minutes');\r\n\r\n } else if (match[4].match(/secondes/i)) {\r\n\r\n date = date.add(num, 'second');\r\n }\r\n\r\n result.start.imply('year', date.year());\r\n result.start.imply('month', date.month() + 1);\r\n result.start.imply('day', date.date());\r\n result.start.assign('hour', date.hour());\r\n result.start.assign('minute', date.minute());\r\n result.start.assign('second', date.second());\r\n result.tags['FRDeadlineFormatParser'] = true;\r\n return result;\r\n };\r\n};\r\n","const parser = require('../parser');\r\nvar ParsedResult = require('../../result').ParsedResult;\r\n\r\nvar util = require('../../utils/FR');\r\n\r\nvar DAYS_OFFSET = util.WEEKDAY_OFFSET;\r\n\r\nvar PATTERN = new RegExp('(\\\\W|^)' +\r\n '(?:(Dimanche|Lundi|Mardi|mercredi|Jeudi|Vendredi|Samedi|Dim|Lun|Mar|Mer|Jeu|Ven|Sam)\\\\s*,?\\\\s*)?' +\r\n '([0-9]{1,2}|1er)' +\r\n '(?:\\\\s*(?:au|\\\\-|\\\\–|jusqu\\'au?|\\\\s)\\\\s*([0-9]{1,2})(?:er)?)?\\\\s*(?:de)?\\\\s*' +\r\n '(Jan(?:vier|\\\\.)?|F[ée]v(?:rier|\\\\.)?|Mars|Avr(?:il|\\\\.)?|Mai|Juin|Juil(?:let|\\\\.)?|Ao[uû]t|Sept(?:embre|\\\\.)?|Oct(?:obre|\\\\.)?|Nov(?:embre|\\\\.)?|d[ée]c(?:embre|\\\\.)?)' +\r\n '(?:\\\\s*(\\\\s*[0-9]{1,4}(?![^\\\\s]\\\\d))(?:\\\\s*(AC|[ap]\\\\.?\\\\s*c(?:h(?:r)?)?\\\\.?\\\\s*n\\\\.?))?)?' +\r\n '(?=\\\\W|$)', 'i'\r\n );\r\n\r\nvar WEEKDAY_GROUP = 2;\r\nvar DATE_GROUP = 3;\r\nvar DATE_TO_GROUP = 4;\r\nvar MONTH_NAME_GROUP = 5;\r\nvar YEAR_GROUP = 6;\r\nvar YEAR_BE_GROUP = 7;\r\n\r\nexports.Parser = function FRMonthNameLittleEndianParser(){\r\n parser.Parser.apply(this, arguments);\r\n\r\n this.pattern = function() { return PATTERN; }\r\n\r\n this.extract = function(text, ref, match, opt){\r\n\r\n var result = new ParsedResult({\r\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\r\n index: match.index + match[1].length,\r\n ref: ref,\r\n });\r\n\r\n var month = match[MONTH_NAME_GROUP];\r\n month = util.MONTH_OFFSET[month.toLowerCase()];\r\n\r\n var day = match[DATE_GROUP];\r\n day = parseInt(day);\r\n\r\n var year = null;\r\n if (match[YEAR_GROUP]) {\r\n year = match[YEAR_GROUP];\r\n year = parseInt(year);\r\n\r\n if(match[YEAR_BE_GROUP]){\r\n if (/a/i.test(match[YEAR_BE_GROUP])) {\r\n // Ante Christe natum\r\n year = -year;\r\n }\r\n } else if (year < 100){\r\n\r\n year = year + 2000;\r\n }\r\n }\r\n\r\n if(year){\r\n result.start.assign('day', day);\r\n result.start.assign('month', month);\r\n result.start.assign('year', year);\r\n } else {\r\n year = parser.findYearClosestToRef(ref, day, month)\r\n result.start.assign('day', day);\r\n result.start.assign('month', month);\r\n result.start.imply('year', year);\r\n }\r\n\r\n // Weekday component\r\n if (match[WEEKDAY_GROUP]) {\r\n var weekday = match[WEEKDAY_GROUP];\r\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\r\n result.start.assign('weekday', weekday);\r\n }\r\n\r\n // Text can be 'range' value. Such as '12 - 13 janvier 2012'\r\n if (match[DATE_TO_GROUP]) {\r\n result.end = result.start.clone();\r\n result.end.assign('day', parseInt(match[DATE_TO_GROUP]));\r\n }\r\n\r\n result.tags['FRMonthNameLittleEndianParser'] = true;\r\n return result;\r\n };\r\n}\r\n","/*\r\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\r\n - Martes 3/11/2015\r\n - 3/11/2015\r\n - 3/11\r\n*/\r\nvar parser = require('../parser');\r\nvar ParsedResult = require('../../result').ParsedResult;\r\n\r\nvar PATTERN = new RegExp('(\\\\W|^)' +\r\n '(?:' +\r\n '((?:dimanche|dim|lundi|lun|mardi|mar|mercredi|mer|jeudi|jeu|vendredi|ven|samedi|sam|le))' +\r\n '\\\\s*\\\\,?\\\\s*' +\r\n ')?' +\r\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\r\n '(?:' +\r\n '[\\\\/\\\\.\\\\-]' +\r\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\r\n ')?' +\r\n '(\\\\W|$)', 'i');\r\n\r\nvar DAYS_OFFSET = { 'dimanche': 0, 'dim': 0, 'lundi': 1, 'lun': 1,'mardi': 2, 'mar':2, 'mercredi': 3, 'mer': 3,\r\n 'jeudi': 4, 'jeu':4, 'vendredi': 5, 'ven': 5,'samedi': 6, 'sam': 6};\r\n\r\n\r\nvar OPENNING_GROUP = 1;\r\nvar ENDING_GROUP = 6;\r\n\r\n// In French we use day/month/year\r\nvar WEEKDAY_GROUP = 2;\r\nvar DAY_GROUP = 3;\r\nvar MONTH_GROUP = 4;\r\nvar YEAR_GROUP = 5;\r\n\r\nexports.Parser = function FRSlashDateFormatParser(argument) {\r\n parser.Parser.apply(this, arguments);\r\n\r\n this.pattern = function () { return PATTERN; };\r\n this.extract = function(text, ref, match, opt){\r\n\r\n if(match[OPENNING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\r\n // Long skip, if there is some overlapping like:\r\n // XX[/YY/ZZ]\r\n // [XX/YY/]ZZ\r\n match.index += match[0].length\r\n return;\r\n }\r\n\r\n var index = match.index + match[OPENNING_GROUP].length;\r\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\r\n\r\n\r\n var result = new ParsedResult({\r\n text: text,\r\n index: index,\r\n ref: ref,\r\n });\r\n\r\n if(text.match(/^\\d\\.\\d$/)) return;\r\n if(text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}$/)) return;\r\n\r\n // MM/dd -> OK\r\n // MM.dd -> NG\r\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;\r\n\r\n var date = null;\r\n var month = match[MONTH_GROUP];\r\n var day = match[DAY_GROUP];\r\n\r\n day = parseInt(day);\r\n month = parseInt(month);\r\n\r\n var year = null;\r\n if (match[YEAR_GROUP]) {\r\n year = match[YEAR_GROUP];\r\n year = parseInt(year);\r\n\r\n if (year < 100){\r\n year = year + 2000;\r\n }\r\n }\r\n\r\n if(month < 1 || month > 12) {\r\n if(month > 12) {\r\n // dd/mm/yyyy date format if day looks like a month, and month looks like a day.\r\n if (day >= 1 && day <= 12 && month >= 13 && month <= 31) {\r\n // unambiguous\r\n var tday = month;\r\n month = day;\r\n day = tday;\r\n }\r\n else {\r\n // both month and day are <= 12\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n if(day < 1 || day > 31) return null;\r\n\r\n if(year){\r\n result.start.assign('day', day);\r\n result.start.assign('month', month);\r\n result.start.assign('year', year);\r\n } else {\r\n year = parser.findYearClosestToRef(ref, day, month)\r\n result.start.assign('day', day);\r\n result.start.assign('month', month);\r\n result.start.imply('year', year);\r\n }\r\n\r\n // Day of week\r\n if(match[WEEKDAY_GROUP]) {\r\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\r\n }\r\n\r\n result.tags['FRSlashDateFormatParser'] = true;\r\n return result;\r\n };\r\n};","const dayjs = require('dayjs');\r\nvar Parser = require('../parser').Parser;\r\nvar ParsedResult = require('../../result').ParsedResult;\r\n\r\nvar PATTERN = /(\\W|^)il y a\\s*([0-9]+|une?)\\s*(minutes?|heures?|semaines?|jours?|mois|années?|ans?)(?=(?:\\W|$))/i;\r\n\r\nexports.Parser = function FRTimeAgoFormatParser(){\r\n Parser.apply(this, arguments);\r\n\r\n this.pattern = function() {\r\n return PATTERN;\r\n }\r\n\r\n this.extract = function(text, ref, match, opt){\r\n\r\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\r\n\r\n var text = match[0];\r\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\r\n index = match.index + match[1].length;\r\n\r\n var result = new ParsedResult({\r\n index: index,\r\n text: text,\r\n ref: ref,\r\n });\r\n result.tags['FRTimeAgoFormatParser'] = true;\r\n \r\n var num = parseInt(match[2]);\r\n if (isNaN(num)) {\r\n if (match[2].match(/demi/)) {\r\n num = 0.5;\r\n } else {\r\n num = 1;\r\n }\r\n }\r\n\r\n var date = dayjs(ref);\r\n\r\n if (match[3].match(/heure/) || match[3].match(/minute/)) {\r\n if (match[3].match(/heure/)) {\r\n\r\n date = date.add(-num, 'hour');\r\n\r\n } else if (match[3].match(/minute/)) {\r\n\r\n date = date.add(-num, 'minute');\r\n }\r\n\r\n result.start.imply('day', date.date());\r\n result.start.imply('month', date.month() + 1);\r\n result.start.imply('year', date.year());\r\n result.start.assign('hour', date.hour());\r\n result.start.assign('minute', date.minute());\r\n\r\n return result;\r\n }\r\n\r\n if (match[3].match(/semaine/)) {\r\n date = date.add(-num, 'week');\r\n\r\n result.start.imply('day', date.date());\r\n result.start.imply('month', date.month() + 1);\r\n result.start.imply('year', date.year());\r\n result.start.imply('weekday', date.day());\r\n return result;\r\n }\r\n\r\n if (match[3].match(/jour/)) {\r\n date = date.add(-num, 'd');\r\n }\r\n\r\n if (match[3].match(/mois/)) {\r\n date = date.add(-num, 'month');\r\n }\r\n\r\n if (match[3].match(/années?|ans?/)) {\r\n date = date.add(-num, 'year');\r\n }\r\n\r\n result.start.assign('day', date.date());\r\n result.start.assign('month', date.month() + 1);\r\n result.start.assign('year', date.year());\r\n return result;\r\n\r\n };\r\n}\r\n","const dayjs = require('dayjs');\r\nvar Parser = require('../parser').Parser;\r\nvar ParsedResult = require('../../result').ParsedResult;\r\nvar ParsedComponents = require('../../result').ParsedComponents;\r\n\r\nvar FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\r\n \"(?:(?:[àa])\\\\s*)?\" +\r\n \"(\\\\d{1,2}(?:h)?|midi|minuit)\" +\r\n \"(?:\" +\r\n \"(?:\\\\.|\\\\:|\\\\:|h)(\\\\d{1,2})(?:m)?\" +\r\n \"(?:\" +\r\n \"(?:\\\\:|\\\\:|m)(\\\\d{0,2})(?:s)?\" +\r\n \")?\" +\r\n \")?\" +\r\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\r\n \"(?=\\\\W|$)\", 'i');\r\n\r\n\r\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\r\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|[àa]|\\\\?)\\\\s*\" +\r\n \"(\\\\d{1,2}(?:h)?)\" +\r\n \"(?:\" +\r\n \"(?:\\\\.|\\\\:|\\\\:|h)(\\\\d{1,2})(?:m)?\" +\r\n \"(?:\" +\r\n \"(?:\\\\.|\\\\:|\\\\:|m)(\\\\d{1,2})(?:s)?\" +\r\n \")?\" +\r\n \")?\" +\r\n \"(?:\\\\s*(A\\\\.M\\\\.|P\\\\.M\\\\.|AM?|PM?))?\" +\r\n \"(?=\\\\W|$)\", 'i');\r\n\r\nvar HOUR_GROUP = 2;\r\nvar MINUTE_GROUP = 3;\r\nvar SECOND_GROUP = 4;\r\nvar AM_PM_HOUR_GROUP = 5;\r\n\r\nexports.Parser = function FRTimeExpressionParser(){\r\n Parser.apply(this, arguments);\r\n\r\n this.pattern = function() { return FIRST_REG_PATTERN; }\r\n\r\n this.extract = function(text, ref, match, opt){\r\n\r\n // This pattern can be overlaped Ex. [12] AM, 1[2] AM\r\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\r\n var refMoment = dayjs(ref);\r\n var result = new ParsedResult();\r\n result.ref = ref;\r\n result.index = match.index + match[1].length;\r\n result.text = match[0].substring(match[1].length);\r\n result.tags['FRTimeExpressionParser'] = true;\r\n\r\n result.start.imply('day', refMoment.date());\r\n result.start.imply('month', refMoment.month()+1);\r\n result.start.imply('year', refMoment.year());\r\n\r\n var hour = 0;\r\n var minute = 0;\r\n var meridiem = -1;\r\n\r\n // ----- Second\r\n if(match[SECOND_GROUP] != null){\r\n var second = parseInt(match[SECOND_GROUP]);\r\n if(second >= 60) return null;\r\n\r\n result.start.assign('second', second);\r\n }\r\n\r\n // ----- Hours\r\n if (match[HOUR_GROUP].toLowerCase() == \"midi\"){\r\n meridiem = 1;\r\n hour = 12;\r\n } else if (match[HOUR_GROUP].toLowerCase() == \"minuit\") {\r\n meridiem = 0;\r\n hour = 0;\r\n } else {\r\n hour = parseInt(match[HOUR_GROUP]);\r\n }\r\n\r\n // ----- Minutes\r\n if(match[MINUTE_GROUP] != null){\r\n minute = parseInt(match[MINUTE_GROUP]);\r\n } else if(hour > 100) {\r\n minute = hour%100;\r\n hour = parseInt(hour/100);\r\n }\r\n\r\n if(minute >= 60) {\r\n return null;\r\n }\r\n\r\n if(hour > 24) {\r\n return null;\r\n }\r\n if (hour >= 12) {\r\n meridiem = 1;\r\n }\r\n\r\n // ----- AM & PM\r\n if(match[AM_PM_HOUR_GROUP] != null) {\r\n if(hour > 12) return null;\r\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\r\n if(ampm == \"a\"){\r\n meridiem = 0;\r\n if(hour == 12) hour = 0;\r\n }\r\n\r\n if(ampm == \"p\"){\r\n meridiem = 1;\r\n if(hour != 12) hour += 12;\r\n }\r\n }\r\n result.start.assign('hour', hour);\r\n result.start.assign('minute', minute);\r\n if (meridiem >= 0) {\r\n result.start.assign('meridiem', meridiem);\r\n }\r\n\r\n // ==============================================================\r\n // Extracting the 'to' chunk\r\n // ==============================================================\r\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\r\n if (!match) {\r\n // Not accept number only result\r\n if (result.text.match(/^\\d+$/)) {\r\n return null;\r\n }\r\n return result;\r\n }\r\n\r\n\r\n\r\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\r\n if (match[0].match(/^\\s*(\\+|\\-)\\s*\\d{3,4}$/)) {\r\n return result;\r\n }\r\n\r\n if(result.end == null){\r\n result.end = new ParsedComponents(null, result.start.date());\r\n }\r\n\r\n var hour = 0;\r\n var minute = 0;\r\n var meridiem = -1;\r\n\r\n // ----- Second\r\n if(match[SECOND_GROUP] != null){\r\n var second = parseInt(match[SECOND_GROUP]);\r\n if(second >= 60) return null;\r\n\r\n result.end.assign('second', second);\r\n }\r\n\r\n hour = parseInt(match[2]);\r\n\r\n // ----- Minute\r\n if (match[MINUTE_GROUP]!= null) {\r\n\r\n minute = parseInt(match[MINUTE_GROUP]);\r\n if(minute >= 60) return result;\r\n\r\n } else if (hour > 100) {\r\n\r\n minute = hour%100;\r\n hour = parseInt(hour/100);\r\n }\r\n\r\n if(minute >= 60) {\r\n return null;\r\n }\r\n\r\n if(hour > 24) {\r\n return null;\r\n }\r\n if (hour >= 12) {\r\n meridiem = 1;\r\n }\r\n\r\n // ----- AM & PM\r\n if (match[AM_PM_HOUR_GROUP] != null){\r\n\r\n if (hour > 12) return null;\r\n\r\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"a\"){\r\n meridiem = 0;\r\n if(hour == 12) {\r\n hour = 0;\r\n if (!result.end.isCertain('day')) {\r\n result.end.imply('day', result.end.get('day') + 1);\r\n }\r\n }\r\n }\r\n\r\n if(match[AM_PM_HOUR_GROUP][0].toLowerCase() == \"p\"){\r\n meridiem = 1;\r\n if(hour != 12) hour += 12;\r\n }\r\n\r\n if (!result.start.isCertain('meridiem')) {\r\n if (meridiem == 0) {\r\n\r\n result.start.imply('meridiem', 0);\r\n\r\n if (result.start.get('hour') == 12) {\r\n result.start.assign('hour', 0);\r\n }\r\n\r\n } else {\r\n\r\n result.start.imply('meridiem', 1);\r\n\r\n if (result.start.get('hour') != 12) {\r\n result.start.assign('hour', result.start.get('hour') + 12);\r\n }\r\n }\r\n }\r\n\r\n } else if(hour >= 12) {\r\n meridiem = 1;\r\n }\r\n\r\n result.text = result.text + match[0];\r\n result.end.assign('hour', hour);\r\n result.end.assign('minute', minute);\r\n if (meridiem >= 0) {\r\n result.end.assign('meridiem', meridiem);\r\n }\r\n\r\n if (result.end.date().getTime() < result.start.date().getTime()) {\r\n result.end.imply('day', result.end.get('day') + 1)\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","var Parser = require('../parser').Parser;\r\nvar ParsedResult = require('../../result').ParsedResult;\r\nvar updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;\r\n\r\nvar DAYS_OFFSET = { 'dimanche': 0, 'dim': 0, 'lundi': 1, 'lun': 1,'mardi': 2, 'mar':2, 'mercredi': 3, 'mer': 3,\r\n 'jeudi': 4, 'jeu':4, 'vendredi': 5, 'ven': 5,'samedi': 6, 'sam': 6};\r\n\r\nvar PATTERN = new RegExp('(\\\\s|^)' +\r\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\r\n '(?:(ce)\\\\s*)?' +\r\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\r\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\r\n '(?:\\\\s*(dernier|prochain)\\\\s*)?' +\r\n '(?=\\\\W|$)', 'i');\r\n\r\nvar PREFIX_GROUP = 2;\r\nvar WEEKDAY_GROUP = 3;\r\nvar POSTFIX_GROUP = 4;\r\n\r\nexports.Parser = function FRWeekdayParser() {\r\n Parser.apply(this, arguments);\r\n\r\n this.pattern = function() { return PATTERN; };\r\n\r\n this.extract = function(text, ref, match, opt){\r\n var index = match.index + match[1].length;\r\n var text = match[0].substr(match[1].length, match[0].length - match[1].length);\r\n var result = new ParsedResult({\r\n index: index,\r\n text: text,\r\n ref: ref\r\n });\r\n\r\n var dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\r\n var offset = DAYS_OFFSET[dayOfWeek];\r\n if(offset === undefined) return null;\r\n\r\n var modifier = null;\r\n var prefix = match[PREFIX_GROUP];\r\n var postfix = match[POSTFIX_GROUP];\r\n if (prefix || postfix) {\r\n var norm = prefix || postfix;\r\n norm = norm.toLowerCase();\r\n\r\n if(norm == 'dernier') {\r\n modifier = 'last';\r\n } else if(norm == 'prochain') {\r\n modifier = 'next';\r\n } else if(norm== 'ce') {\r\n modifier = 'this';\r\n }\r\n }\r\n\r\n updateParsedComponent(result, ref, offset, modifier);\r\n result.tags['FRWeekdayParser'] = true;\r\n return result;\r\n }\r\n};\r\n\r\n","const quarterOfYear = require('dayjs/plugin/quarterOfYear');\nconst dayjs = require('dayjs');\ndayjs.extend(quarterOfYear);\n\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/FR');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:les?|la|l\\'|du|des?)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|\\\\d+)?\\\\s*' +\n '(prochaine?s?|derni[eè]re?s?|pass[ée]e?s?|pr[ée]c[ée]dents?|suivante?s?)?\\\\s*' +\n '(secondes?|min(?:ute)?s?|heures?|jours?|semaines?|mois|trimestres?|années?)\\\\s*' +\n '(prochaine?s?|derni[eè]re?s?|pass[ée]e?s?|pr[ée]c[ée]dents?|suivante?s?)?' +\n '(?=\\\\W|$)', 'i'\n);\n\nvar MULTIPLIER_GROUP = 2;\nvar MODIFIER_1_GROUP = 3;\nvar RELATIVE_WORD_GROUP = 4;\nvar MODIFIER_2_GROUP = 5;\n\nexports.Parser = function FRRelativeDateFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; };\n\n this.extract = function(text, ref, match, opt){\n var index = match.index + match[1].length;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n // Multiplier\n var multiplier = match[MULTIPLIER_GROUP] === undefined ? '1' : match[MULTIPLIER_GROUP];\n if (util.INTEGER_WORDS[multiplier] !== undefined) {\n multiplier = util.INTEGER_WORDS[multiplier];\n } else {\n multiplier = parseInt(multiplier);\n }\n\n // Modifier\n var modifier = match[MODIFIER_1_GROUP] === undefined ?\n (match[MODIFIER_2_GROUP] === undefined ? '' : match[MODIFIER_2_GROUP].toLowerCase())\n : match[MODIFIER_1_GROUP].toLowerCase();\n if(!modifier) {\n // At least one modifier is mandatory to match this parser\n return;\n }\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n result.tags['FRRelativeDateFormatParser'] = true;\n\n var modifierFactor;\n switch(true) {\n case /prochaine?s?/.test(modifier):\n case /suivants?/.test(modifier):\n modifierFactor = 1;\n break;\n case /derni[eè]re?s?/.test(modifier):\n case /pass[ée]e?s?/.test(modifier):\n case /pr[ée]c[ée]dents?/.test(modifier):\n modifierFactor = -1;\n break;\n }\n\n var total = multiplier * modifierFactor;\n\n var dateFrom = dayjs(ref);\n var dateTo = dayjs(ref);\n\n var relative = match[RELATIVE_WORD_GROUP];\n var startOf;\n switch(true) {\n case /secondes?/.test(relative):\n dateFrom = dateFrom.add(total, 's');\n dateTo = dateTo.add(modifierFactor, 's');\n startOf = 'second';\n break;\n case /min(?:ute)?s?/.test(relative):\n dateFrom = dateFrom.add(total, 'm');\n dateTo = dateTo.add(modifierFactor, 'm');\n startOf = 'minute';\n break;\n case /heures?/.test(relative):\n dateFrom = dateFrom.add(total, 'h');\n dateTo = dateTo.add(modifierFactor, 'h');\n startOf = 'hour';\n break;\n case /jours?/.test(relative):\n dateFrom = dateFrom.add(total, 'd');\n dateTo = dateTo.add(modifierFactor, 'd');\n startOf = 'day';\n break;\n case /semaines?/.test(relative):\n dateFrom = dateFrom.add(total, 'w');\n dateTo = dateTo.add(modifierFactor, 'w');\n startOf = 'week';\n break;\n case /mois?/.test(relative):\n dateFrom = dateFrom.add(total, 'M');\n dateTo = dateTo.add(modifierFactor, 'M');\n startOf = 'month';\n break;\n case /trimestres?/.test(relative):\n dateFrom = dateFrom.add(total, 'Q');\n dateTo = dateTo.add(modifierFactor, 'Q');\n startOf = 'quarter';\n break;\n case /années?/.test(relative):\n dateFrom = dateFrom.add(total, 'y');\n dateTo = dateTo.add(modifierFactor, 'y');\n startOf = 'year';\n break;\n }\n\n // if we go forward, switch the start and end dates\n if(modifierFactor > 0) {\n var dateTmp = dateFrom;\n dateFrom = dateTo;\n dateTo = dateTmp;\n }\n\n // Get start and end of dates\n dateFrom = dateFrom.startOf(startOf);\n dateTo = dateTo.endOf(startOf);\n if (startOf == 'week') { // Weekday in FR start on Sat?\n dateFrom = dateFrom.add(1, 'd')\n dateTo = dateTo.add(1, 'd')\n }\n \n\n // Assign results\n result.start.assign('year', dateFrom.year());\n result.start.assign('month', dateFrom.month() + 1);\n result.start.assign('day', dateFrom.date());\n result.start.assign('minute', dateFrom.minute());\n result.start.assign('second', dateFrom.second());\n result.start.assign('hour', dateFrom.hour());\n result.start.assign('millisecond', dateFrom.millisecond());\n\n result.end = result.start.clone();\n result.end.assign('year', dateTo.year());\n result.end.assign('month', dateTo.month() + 1);\n result.end.assign('day', dateTo.date());\n result.end.assign('minute', dateTo.minute());\n result.end.assign('second', dateTo.second());\n result.end.assign('hour', dateTo.hour());\n result.end.assign('millisecond', dateTo.millisecond());\n return result;\n };\n};\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.dayjs_plugin_quarterOfYear=n()}(this,function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(r,i){var e=i.prototype;e.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var u=e.add;e.add=function(r,i){return r=Number(r),this.$utils().p(i)===n?this.add(3*r,t):u.bind(this)(r,i)};var s=e.startOf;e.startOf=function(r,i){var e=this.$utils(),u=!!e.u(i)||i;if(e.p(r)===n){var a=this.quarter()-1;return u?this.month(3*a).startOf(t).startOf(\"day\"):this.month(3*a+2).endOf(t).endOf(\"day\")}return s.bind(this)(r,i)}}});\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar util = require('../../utils/ZH-Hant.js');\n\nvar PATTERN = new RegExp(\n '(\\\\d{2,4}|[' + Object.keys(util.NUMBER).join('') + ']{2,4})?' +\n '(?:\\\\s*)' +\n '(?:年)?' +\n '(?:[\\\\s|,|,]*)' +\n '(\\\\d{1,2}|[' + Object.keys(util.NUMBER).join('') + ']{1,2})' +\n '(?:\\\\s*)' +\n '(?:月)' +\n '(?:\\\\s*)' +\n '(\\\\d{1,2}|[' + Object.keys(util.NUMBER).join('') + ']{1,2})?' +\n '(?:\\\\s*)' +\n '(?:日|號)?'\n);\n\nvar YEAR_GROUP = 1;\nvar MONTH_GROUP = 2;\nvar DAY_GROUP = 3;\n\nexports.Parser = function ZHHantDateParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n };\n\n this.extract = function(text, ref, match, opt) {\n var startMoment = dayjs(ref);\n var result = new ParsedResult({\n text: match[0],\n index: match.index,\n ref: ref,\n });\n\n //Month\n var month = parseInt(match[MONTH_GROUP]);\n if (isNaN(month)) month = util.zhStringToNumber(match[MONTH_GROUP]);\n result.start.assign('month', month);\n\n //Day\n if (match[DAY_GROUP]) {\n var day = parseInt(match[DAY_GROUP]);\n if (isNaN(day)) day = util.zhStringToNumber(match[DAY_GROUP]);\n result.start.assign('day', day);\n } else {\n result.start.imply('day', startMoment.date());\n }\n\n //Year\n if (match[YEAR_GROUP]) {\n var year = parseInt(match[YEAR_GROUP]);\n if (isNaN(year)) year = util.zhStringToYear(match[YEAR_GROUP]);\n result.start.assign('year', year);\n } else {\n result.start.imply('year', startMoment.year());\n }\n\n result.tags.ZHHantDateParser = true;\n return result;\n };\n};\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;\n\nvar util = require('../../utils/ZH-Hant.js');\n\nvar PATTERN = new RegExp(\n '(上|今|下|這|呢)?' +\n '(?:個)?' +\n '(?:星期|禮拜)' +\n '(' + Object.keys(util.WEEKDAY_OFFSET).join('|') + ')'\n);\n\nvar PREFIX_GROUP = 1;\nvar WEEKDAY_GROUP = 2;\n\nexports.Parser = function ZHHantWeekdayParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n };\n\n this.extract = function(text, ref, match, opt) {\n var index = match.index;\n text = match[0];\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var dayOfWeek = match[WEEKDAY_GROUP];\n var offset = util.WEEKDAY_OFFSET[dayOfWeek];\n if(offset === undefined) return null;\n\n var modifier = null;\n var prefix = match[PREFIX_GROUP];\n\n if(prefix == '上') {\n modifier = 'last';\n } else if(prefix == '下') {\n modifier = 'next';\n } else if(prefix == '今' || prefix == '這' || prefix == '呢') {\n modifier = 'this';\n }\n\n updateParsedComponent(result, ref, offset, modifier);\n result.tags['ZHHantWeekdayParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar ParsedComponents = require('../../result').ParsedComponents;\n\nvar util = require('../../utils/ZH-Hant.js');\n\nvar patternString1 = '(?:由|從|自)?' +\n '(?:' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +\n '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +\n '(?:[\\\\s,,]*)' +\n '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +\n ')?' +\n '(?:[\\\\s,,]*)' +\n '(?:(\\\\d+|[' + Object.keys(util.NUMBER).join('') + ']+)(?:\\\\s*)(?:點|時|:|:)' +\n '(?:\\\\s*)' +\n '(\\\\d+|半|正|整|[' + Object.keys(util.NUMBER).join('') + ']+)?(?:\\\\s*)(?:分|:|:)?' +\n '(?:\\\\s*)' +\n '(\\\\d+|[' + Object.keys(util.NUMBER).join('') + ']+)?(?:\\\\s*)(?:秒)?)' +\n '(?:\\\\s*(A\\.M\\.|P\\.M\\.|AM?|PM?))?';\n\nvar patternString2 = '(?:\\\\s*(?:到|至|\\\\-|\\\\–|\\\\~|\\\\〜)\\\\s*)' +\n '(?:' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +\n '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +\n '(?:[\\\\s,,]*)' +\n '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +\n ')?' +\n '(?:[\\\\s,,]*)' +\n '(?:(\\\\d+|[' + Object.keys(util.NUMBER).join('') + ']+)(?:\\\\s*)(?:點|時|:|:)' +\n '(?:\\\\s*)' +\n '(\\\\d+|半|正|整|[' + Object.keys(util.NUMBER).join('') + ']+)?(?:\\\\s*)(?:分|:|:)?' +\n '(?:\\\\s*)' +\n '(\\\\d+|[' + Object.keys(util.NUMBER).join('') + ']+)?(?:\\\\s*)(?:秒)?)' +\n '(?:\\\\s*(A\\.M\\.|P\\.M\\.|AM?|PM?))?';\n\nvar FIRST_REG_PATTERN = new RegExp(patternString1, 'i');\nvar SECOND_REG_PATTERN = new RegExp(patternString2, 'i');\n\nvar DAY_GROUP_1 = 1;\nvar ZH_AM_PM_HOUR_GROUP_1 = 2;\nvar ZH_AM_PM_HOUR_GROUP_2 = 3;\nvar DAY_GROUP_3 = 4;\nvar ZH_AM_PM_HOUR_GROUP_3 = 5;\nvar HOUR_GROUP = 6;\nvar MINUTE_GROUP = 7;\nvar SECOND_GROUP = 8;\nvar AM_PM_HOUR_GROUP = 9;\n\nexports.Parser = function ZHHantTimeExpressionParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return FIRST_REG_PATTERN;\n };\n\n this.extract = function(text, ref, match, opt) {\n\n // This pattern can be overlaped Ex. [12] AM, 1[2] AM\n if (match.index > 0 && text[match.index - 1].match(/\\w/)) return null;\n var refMoment = dayjs(ref);\n var result = new ParsedResult();\n result.ref = ref;\n result.index = match.index;\n result.text = match[0];\n result.tags.ZHTimeExpressionParser = true;\n\n var startMoment = refMoment.clone();\n\n // ----- Day\n if (match[DAY_GROUP_1]) {\n var day1 = match[DAY_GROUP_1];\n if (day1 == '明' || day1 == '聽') {\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment.add(1, 'day');\n }\n } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {\n startMoment.add(-1, 'day');\n } else if (day1 == \"前\"){\n startMoment.add(-2, 'day');\n } else if (day1 == \"大前\"){\n startMoment.add(-3, 'day');\n } else if (day1 == \"後\"){\n startMoment.add(2, 'day');\n } else if (day1 == \"大後\"){\n startMoment.add(3, 'day');\n }\n result.start.assign('day', startMoment.date());\n result.start.assign('month', startMoment.month() + 1);\n result.start.assign('year', startMoment.year());\n } else if (match[DAY_GROUP_3]) {\n var day3 = match[DAY_GROUP_3];\n if (day3 == '明' || day3 == '聽') {\n startMoment.add(1, 'day');\n } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {\n startMoment.add(-1, 'day');\n } else if (day3 == \"前\"){\n startMoment.add(-2, 'day');\n } else if (day3 == \"大前\"){\n startMoment.add(-3, 'day');\n } else if (day3 == \"後\"){\n startMoment.add(2, 'day');\n } else if (day3 == \"大後\"){\n startMoment.add(3, 'day');\n }\n result.start.assign('day', startMoment.date());\n result.start.assign('month', startMoment.month() + 1);\n result.start.assign('year', startMoment.year());\n } else {\n result.start.imply('day', startMoment.date());\n result.start.imply('month', startMoment.month() + 1);\n result.start.imply('year', startMoment.year());\n }\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if (match[SECOND_GROUP]) {\n var second = parseInt(match[SECOND_GROUP]);\n if (isNaN(second)) {\n second = util.zhStringToNumber(match[SECOND_GROUP]);\n }\n if (second >= 60) return null;\n result.start.assign('second', second);\n }\n\n hour = parseInt(match[HOUR_GROUP]);\n if (isNaN(hour)) {\n hour = util.zhStringToNumber(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if (match[MINUTE_GROUP]) {\n if (match[MINUTE_GROUP] == '半') {\n minute = 30;\n } else if (match[MINUTE_GROUP] == '正' || match[MINUTE_GROUP] == '整') {\n minute = 0;\n } else {\n minute = parseInt(match[MINUTE_GROUP]);\n if (isNaN(minute)) {\n minute = util.zhStringToNumber(match[MINUTE_GROUP]);\n }\n }\n } else if (hour > 100) {\n minute = hour % 100;\n hour = parseInt(hour / 100);\n }\n\n if (minute >= 60) {\n return null;\n }\n\n if (hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP]) {\n if (hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if (ampm == \"a\") {\n meridiem = 0;\n if (hour == 12) hour = 0;\n }\n\n if (ampm == \"p\") {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n } else if (match[ZH_AM_PM_HOUR_GROUP_1]) {\n var zhAMPMString1 = match[ZH_AM_PM_HOUR_GROUP_1];\n var zhAMPM1 = zhAMPMString1[0];\n if (zhAMPM1 == '朝' || zhAMPM1 == '早') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM1 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n } else if (match[ZH_AM_PM_HOUR_GROUP_2]) {\n var zhAMPMString2 = match[ZH_AM_PM_HOUR_GROUP_2];\n var zhAMPM2 = zhAMPMString2[0];\n if (zhAMPM2 == '上' || zhAMPM2 == '朝' || zhAMPM2 == '早' || zhAMPM2 == '凌') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM2 == '下' || zhAMPM2 == '晏' || zhAMPM2 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n } else if (match[ZH_AM_PM_HOUR_GROUP_3]) {\n var zhAMPMString3 = match[ZH_AM_PM_HOUR_GROUP_3];\n var zhAMPM3 = zhAMPMString3[0];\n if (zhAMPM3 == '上' || zhAMPM3 == '朝' || zhAMPM3 == '早' || zhAMPM3 == '凌') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM3 == '下' || zhAMPM3 == '晏' || zhAMPM3 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n }\n\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n\n if (meridiem >= 0) {\n result.start.assign('meridiem', meridiem);\n } else {\n if (hour < 12) {\n result.start.imply('meridiem', 0);\n } else {\n result.start.imply('meridiem', 1);\n }\n }\n\n // ==============================================================\n // Extracting the 'to' chunk\n // ==============================================================\n\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n // Not accept number only result\n if (result.text.match(/^\\d+$/)) {\n return null;\n }\n return result;\n }\n\n var endMoment = startMoment.clone();\n result.end = new ParsedComponents(null, null);\n\n // ----- Day\n if (match[DAY_GROUP_1]) {\n var day1 = match[DAY_GROUP_1];\n if (day1 == '明' || day1 == '聽') {\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n endMoment.add(1, 'day');\n }\n } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {\n endMoment.add(-1, 'day');\n } else if (day1 == \"前\"){\n endMoment.add(-2, 'day');\n } else if (day1 == \"大前\"){\n endMoment.add(-3, 'day');\n } else if (day1 == \"後\"){\n endMoment.add(2, 'day');\n } else if (day1 == \"大後\"){\n endMoment.add(3, 'day');\n }\n result.end.assign('day', endMoment.date());\n result.end.assign('month', endMoment.month() + 1);\n result.end.assign('year', endMoment.year());\n } else if (match[DAY_GROUP_3]) {\n var day3 = match[DAY_GROUP_3];\n if (day3 == '明' || day3 == '聽') {\n endMoment.add(1, 'day');\n } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {\n endMoment.add(-1, 'day');\n } else if (day3 == \"前\"){\n endMoment.add(-2, 'day');\n } else if (day3 == \"大前\"){\n endMoment.add(-3, 'day');\n } else if (day3 == \"後\"){\n endMoment.add(2, 'day');\n } else if (day3 == \"大後\"){\n endMoment.add(3, 'day');\n }\n result.end.assign('day', endMoment.date());\n result.end.assign('month', endMoment.month() + 1);\n result.end.assign('year', endMoment.year());\n } else {\n result.end.imply('day', endMoment.date());\n result.end.imply('month', endMoment.month() + 1);\n result.end.imply('year', endMoment.year());\n }\n\n hour = 0;\n minute = 0;\n meridiem = -1;\n\n // ----- Second\n if (match[SECOND_GROUP]) {\n var second = parseInt(match[SECOND_GROUP]);\n if (isNaN(second)) {\n second = util.zhStringToNumber(match[SECOND_GROUP]);\n }\n\n if (second >= 60) return null;\n result.end.assign('second', second);\n }\n\n hour = parseInt(match[HOUR_GROUP]);\n if (isNaN(hour)) {\n hour = util.zhStringToNumber(match[HOUR_GROUP]);\n }\n\n // ----- Minutes\n if (match[MINUTE_GROUP]) {\n if (match[MINUTE_GROUP] == '半') {\n minute = 30;\n } else if (match[MINUTE_GROUP] == '正' || match[MINUTE_GROUP] == '整') {\n minute = 0;\n } else {\n minute = parseInt(match[MINUTE_GROUP]);\n if (isNaN(minute)) {\n minute = util.zhStringToNumber(match[MINUTE_GROUP]);\n }\n }\n } else if (hour > 100) {\n minute = hour % 100;\n hour = parseInt(hour / 100);\n }\n\n if (minute >= 60) {\n return null;\n }\n\n if (hour > 24) {\n return null;\n }\n if (hour >= 12) {\n meridiem = 1;\n }\n\n // ----- AM & PM\n if (match[AM_PM_HOUR_GROUP]) {\n if (hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if (ampm == \"a\") {\n meridiem = 0;\n if (hour == 12) hour = 0;\n }\n\n if (ampm == \"p\") {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n\n if (!result.start.isCertain('meridiem')) {\n if (meridiem == 0) {\n\n result.start.imply('meridiem', 0);\n\n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', 1);\n\n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12);\n }\n }\n }\n\n } else if (match[ZH_AM_PM_HOUR_GROUP_1]) {\n var zhAMPMString1 = match[ZH_AM_PM_HOUR_GROUP_1];\n var zhAMPM1 = zhAMPMString1[0];\n if (zhAMPM1 == '朝' || zhAMPM1 == '早') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM1 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n } else if (match[ZH_AM_PM_HOUR_GROUP_2]) {\n var zhAMPMString2 = match[ZH_AM_PM_HOUR_GROUP_2];\n var zhAMPM2 = zhAMPMString2[0];\n if (zhAMPM2 == '上' || zhAMPM2 == '朝' || zhAMPM2 == '早' || zhAMPM2 == '凌') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM2 == '下' || zhAMPM2 == '晏' || zhAMPM2 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n } else if (match[ZH_AM_PM_HOUR_GROUP_3]) {\n var zhAMPMString3 = match[ZH_AM_PM_HOUR_GROUP_3];\n var zhAMPM3 = zhAMPMString3[0];\n if (zhAMPM3 == '上' || zhAMPM3 == '朝' || zhAMPM3 == '早' || zhAMPM3 == '凌') {\n meridiem = 0;\n if (hour == 12) hour = 0;\n } else if (zhAMPM3 == '下' || zhAMPM3 == '晏' || zhAMPM3 == '晚') {\n meridiem = 1;\n if (hour != 12) hour += 12;\n }\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n } else {\n var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == 1;\n if (startAtPM && result.start.get('hour') > hour) {\n // 10pm - 1 (am)\n result.end.imply('meridiem', 0);\n\n } else if (hour > 12) {\n result.end.imply('meridiem', 1);\n }\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp(\n '(而家|立(?:刻|即)|即刻)|' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +\n '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +\n '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +\n '(?:[\\\\s|,|,]*)' +\n '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?', 'i');\n\nvar NOW_GROUP = 1;\nvar DAY_GROUP_1 = 2;\nvar TIME_GROUP_1 = 3;\nvar TIME_GROUP_2 = 4;\nvar DAY_GROUP_3 = 5;\nvar TIME_GROUP_3 = 6;\n\nexports.Parser = function ZHHantCasualDateParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n };\n\n this.extract = function(text, ref, match, opt) {\n text = match[0];\n var index = match.index;\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var refMoment = dayjs(ref);\n var startMoment = refMoment;\n\n if (match[NOW_GROUP]) {\n result.start.imply('hour', refMoment.hour());\n result.start.imply('minute', refMoment.minute());\n result.start.imply('second', refMoment.second());\n result.start.imply('millisecond', refMoment.millisecond());\n } else if (match[DAY_GROUP_1]) {\n var day1 = match[DAY_GROUP_1];\n var time1 = match[TIME_GROUP_1];\n\n if (day1 == '明' || day1 == '聽') {\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {\n startMoment = startMoment.add(-1, 'day');\n } else if (day1 == \"前\"){\n startMoment = startMoment.add(-2, 'day');\n } else if (day1 == \"大前\"){\n startMoment = startMoment.add(-3, 'day');\n } else if ( day1 == \"後\"){\n startMoment = startMoment.add(2, 'day');\n } else if (day1 == \"大後\"){\n startMoment = startMoment.add(3, 'day');\n }\n\n if (time1 == '早' || time1 == '朝') {\n result.start.imply('hour', 6);\n } else if (time1 == '晚') {\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n }\n\n } else if (match[TIME_GROUP_2]) {\n var timeString2 = match[TIME_GROUP_2];\n var time2 = timeString2[0];\n if (time2 == '早' || time2 == '朝' || time2 == '上') {\n result.start.imply('hour', 6);\n } else if (time2 == '下' || time2 == '晏') {\n result.start.imply('hour', 15);\n result.start.imply('meridiem', 1);\n } else if (time2 == '中') {\n result.start.imply('hour', 12);\n result.start.imply('meridiem', 1);\n } else if (time2 == '夜' || time2 == '晚') {\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n } else if (time2 == '凌') {\n result.start.imply('hour', 0);\n }\n\n } else if (match[DAY_GROUP_3]) {\n var day3 = match[DAY_GROUP_3];\n\n if (day3 == '明' || day3 == '聽') {\n // Check not \"Tomorrow\" on late night\n if(refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {\n startMoment = startMoment.add(-1, 'day');\n } else if (day3 == \"前\"){\n startMoment = startMoment.add(-2, 'day');\n } else if (day3 == \"大前\"){\n startMoment = startMoment.add(-3, 'day');\n } else if (day3 == \"後\"){\n startMoment = startMoment.add(2, 'day');\n } else if (day3 == \"大後\"){\n startMoment = startMoment.add(3, 'day');\n }\n\n\n var timeString3 = match[TIME_GROUP_3];\n if (timeString3) {\n var time3 = timeString3[0];\n if (time3 == '早' || time3 == '朝' || time3 == '上') {\n result.start.imply('hour', 6);\n } else if (time3 == '下' || time3 == '晏') {\n result.start.imply('hour', 15);\n result.start.imply('meridiem', 1);\n } else if (time3 == '中') {\n result.start.imply('hour', 12);\n result.start.imply('meridiem', 1);\n } else if (time3 == '夜' || time3 == '晚') {\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n } else if (time3 == '凌') {\n result.start.imply('hour', 0);\n }\n }\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags.ZHHantCasualDateParser = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar util = require('../../utils/ZH-Hant.js');\n\nvar PATTERN = new RegExp(\n '(\\\\d+|[' + Object.keys(util.NUMBER).join('') + ']+|半|幾)(?:\\\\s*)' +\n '(?:個)?' +\n '(秒(?:鐘)?|分鐘|小時|鐘|日|天|星期|禮拜|月|年)' +\n '(?:(?:之|過)?後|(?:之)?內)', 'i'\n);\n\nvar NUMBER_GROUP = 1;\nvar UNIT_GROUP = 2;\n\nexports.Parser = function ZHHantCasualDateParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return PATTERN;\n };\n\n this.extract = function(text, ref, match, opt) {\n var index = match.index;\n text = match[0];\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var number = parseInt(match[NUMBER_GROUP]);\n if (isNaN(number)){\n number = util.zhStringToNumber(match[NUMBER_GROUP]);\n }\n\n if (isNaN(number)){\n var string = match[NUMBER_GROUP];\n if (string === '幾'){\n number = 3;\n }else if(string === '半'){\n number = 0.5;\n }else{\n\n //just in case\n return null;\n }\n }\n\n var date = dayjs(ref);\n var unit = match[UNIT_GROUP];\n var unitAbbr = unit[0];\n\n if (unitAbbr.match(/[日天星禮月年]/)){\n if(unitAbbr == '日' || unitAbbr == '天'){\n date = date.add(number, 'd');\n }else if(unitAbbr == '星' || unitAbbr == '禮'){\n date = date.add(number * 7, 'd');\n }else if(unitAbbr == '月'){\n date = date.add(number, 'month');\n }else if(unitAbbr == '年'){\n date = date.add(number, 'year');\n }\n\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n return result;\n }\n\n if(unitAbbr == '秒'){\n date = date.add(number, 'second');\n }else if(unitAbbr == '分'){\n date = date.add(number, 'minute');\n }else if(unitAbbr == '小' || unitAbbr == '鐘'){\n date = date.add(number, 'hour');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.start.assign('second', date.second());\n result.tags.ZHHantDeadlineFormatParser = true;\n return result;\n };\n};\n","/*\n\n\n*/\n\nvar dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/DE');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(in|nach)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|einigen|eine[rm]\\\\s*halben|eine[rm])\\\\s*' +\n '(sekunden?|min(?:ute)?n?|stunden?|tag(?:en)?|wochen?|monat(?:en)?|jahr(?:en)?)\\\\s*' +\n '(?=\\\\W|$)', 'i'\n);\n\nvar STRICT_PATTERN = new RegExp('(\\\\W|^)' +\n '(in|nach)\\\\s*' +\n '('+ util.INTEGER_WORDS_PATTERN + '|[0-9]+|eine(?:r|m)?)\\\\s*' +\n '(sekunden?|minuten?|stunden?|tag(?:en)?)\\\\s*' +\n '(?=\\\\W|$)', 'i'\n);\n\nexports.Parser = function DEDeadlineFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\n };\n\n this.extract = function(text, ref, match, opt){\n\n var index = match.index + match[1].length;\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var num = match[3].toLowerCase();\n if (util.INTEGER_WORDS[num] !== undefined) {\n num = util.INTEGER_WORDS[num];\n } else if (num === 'einer' || num === 'einem') {\n num = 1;\n } else if (num === 'einigen') {\n num = 3;\n } else if (/halben/.test(num)) {\n num = 0.5;\n } else {\n num = parseInt(num);\n }\n\n var date = dayjs(ref);\n if (/tag|woche|monat|jahr/i.test(match[4])) {\n\n if (/tag/i.test(match[4])) {\n date = date.add(num, 'd');\n } else if (/woche/i.test(match[4])) {\n date = date.add(num * 7, 'd');\n } else if (/monat/i.test(match[4])) {\n date = date.add(num, 'month');\n } else if (/jahr/i.test(match[4])) {\n date = date.add(num, 'year');\n }\n\n result.start.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('day', date.date());\n return result;\n }\n\n if (/stunde/i.test(match[4])) {\n\n date = date.add(num, 'hour');\n\n } else if (/min/i.test(match[4])) {\n\n date = date.add(num, 'minute');\n\n } else if (/sekunde/i.test(match[4])) {\n\n date = date.add(num, 'second');\n }\n\n result.start.imply('year', date.year());\n result.start.imply('month', date.month() + 1);\n result.start.imply('day', date.date());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.start.assign('second', date.second());\n result.tags['DEDeadlineFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nconst parser = require('../parser');\nconst ParsedResult = require('../../result').ParsedResult;\nconst util = require('../../utils/DE');\n\nconst PATTERN = new RegExp('(\\\\W|^)' +\n '(?:am\\\\s*?)?' +\n '(?:(Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|So|Mo|Di|Mi|Do|Fr|Sa)\\\\s*,?\\\\s*)?' +\n '(?:den\\\\s*)?' +\n '([0-9]{1,2})\\\\.' +\n '(?:\\\\s*(?:bis(?:\\\\s*(?:am|zum))?|\\\\-|\\\\–|\\\\s)\\\\s*([0-9]{1,2})\\\\.)?\\\\s*' +\n '(Jan(?:uar|\\\\.)?|Feb(?:ruar|\\\\.)?|Mär(?:z|\\\\.)?|Maerz|Mrz\\\\.?|Apr(?:il|\\\\.)?|Mai|Jun(?:i|\\\\.)?|Jul(?:i|\\\\.)?|Aug(?:ust|\\\\.)?|Sep(?:t|t\\\\.|tember|\\\\.)?|Okt(?:ober|\\\\.)?|Nov(?:ember|\\\\.)?|Dez(?:ember|\\\\.)?)' +\n '(?:' +\n ',?\\\\s*([0-9]{1,4}(?![^\\\\s]\\\\d))' +\n '(\\\\s*[vn]\\\\.?\\\\s*C(?:hr)?\\\\.?)?' +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\n\nconst WEEKDAY_GROUP = 2;\nconst DATE_GROUP = 3;\nconst DATE_TO_GROUP = 4;\nconst MONTH_NAME_GROUP = 5;\nconst YEAR_GROUP = 6;\nconst YEAR_BE_GROUP = 7;\n\nexports.Parser = function DEMonthNameLittleEndianParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt){\n\n const result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = match[DATE_GROUP];\n day = parseInt(day);\n\n var year = null;\n if (match[YEAR_GROUP]) {\n year = match[YEAR_GROUP];\n year = parseInt(year);\n\n if(match[YEAR_BE_GROUP]){\n if (/v/i.test(match[YEAR_BE_GROUP])) {\n // v.Chr.\n year = -year;\n }\n } else if (year < 100){\n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n year = parser.findYearClosestToRef(ref, day, month);\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n // Weekday component\n if (match[WEEKDAY_GROUP]) {\n var weekday = match[WEEKDAY_GROUP];\n weekday = util.WEEKDAY_OFFSET[weekday.toLowerCase()]\n result.start.assign('weekday', weekday);\n }\n\n // Text can be 'range' value. Such as '12 - 13 January 2012'\n if (match[DATE_TO_GROUP]) {\n result.end = result.start.clone();\n result.end.assign('day', parseInt(match[DATE_TO_GROUP]));\n }\n\n result.tags['DEMonthNameLittleEndianParser'] = true;\n return result;\n };\n}\n","/*\n \n The parser for parsing month name and year.\n \n EX. \n - Januar\n - Januar 2012\n*/\n\nconst parser = require('../parser');\nconst ParsedResult = require('../../result').ParsedResult;\nconst util = require('../../utils/DE');\n\nconst PATTERN = new RegExp('(^|\\\\D\\\\s+|[^\\\\w\\\\s])' +\n '(Jan\\\\.?|Januar|Feb\\\\.?|Februar|Mär\\\\.?|M(?:ä|ae)rz|Mrz\\\\.?|Apr\\\\.?|April|Mai\\\\.?|Jun\\\\.?|Juni|Jul\\\\.?|Juli|Aug\\\\.?|August|Sep\\\\.?|Sept\\\\.?|September|Okt\\\\.?|Oktober|Nov\\\\.?|November|Dez\\\\.?|Dezember)' + \n '\\\\s*' +\n '(?:' +\n ',?\\\\s*(?:([0-9]{4})(\\\\s*[vn]\\\\.?\\\\s*C(?:hr)?\\\\.?)?|([0-9]{1,4})\\\\s*([vn]\\\\.?\\\\s*C(?:hr)?\\\\.?))' +\n ')?' +\n '(?=[^\\\\s\\\\w]|$)', 'i');\n\nconst MONTH_NAME_GROUP = 2;\nconst YEAR_GROUP = 3;\nconst YEAR_BE_GROUP = 4;\nconst YEAR_GROUP2 = 5;\nconst YEAR_BE_GROUP2 = 6;\n\nexports.Parser = function ENMonthNameParser(){\n parser.Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n \n this.extract = function(text, ref, match, opt){\n var result = new ParsedResult({\n text: match[0].substr(match[1].length, match[0].length - match[1].length),\n index: match.index + match[1].length,\n ref: ref,\n });\n\n \n var month = match[MONTH_NAME_GROUP];\n month = util.MONTH_OFFSET[month.toLowerCase()];\n\n var day = 1;\n\n var year = null;\n if (match[YEAR_GROUP] || match[YEAR_GROUP2]) {\n year = match[YEAR_GROUP] || match[YEAR_GROUP2];\n year = parseInt(year);\n\n if (match[YEAR_BE_GROUP] || match[YEAR_BE_GROUP2]) {\n if (/v/i.test(match[YEAR_BE_GROUP] || match[YEAR_BE_GROUP2])) {\n // v.Chr.\n year = -year;\n }\n\n } else if (year < 100){ \n\n year = year + 2000;\n }\n }\n\n if(year){\n result.start.imply('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n } else {\n \n year = parser.findYearClosestToRef(ref, day, month);\n result.start.imply('day', day);\n result.start.assign('month', month);\n result.start.imply('year', year);\n }\n\n result.tags['DEMonthNameParser'] = true;\n return result;\n }\n}\n\n","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - Tuesday 11/3/2015\n - 11/3/2015\n - 11/3\n*/\nvar dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:' +\n '(?:am\\\\s*?)?' +\n '((?:sonntag|so|montag|mo|dienstag|di|mittwoch|mi|donnerstag|do|freitag|fr|samstag|sa))' +\n '\\\\s*\\\\,?\\\\s*' +\n '(?:den\\\\s*)?' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-3]{0,1}[0-9]{1})' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\n\nvar DAYS_OFFSET = {\n 'sonntag': 0, 'so': 0,\n 'montag': 1, 'mo': 1,\n 'dienstag': 2, 'di': 2,\n 'mittwoch': 3, 'mi': 3,\n 'donnerstag': 4, 'do': 4,\n 'freitag': 5, 'fr': 5,\n 'samstag': 6, 'sa': 6\n};\n\n\nvar OPENNING_GROUP = 1;\nvar ENDING_GROUP = 6;\n\nvar WEEKDAY_GROUP = 2;\nvar DAY_GROUP = 3;\nvar MONTH_GROUP = 4;\nvar YEAR_GROUP = 5;\n\nexports.Parser = function DESlashDateFormatParser(argument) {\n Parser.apply(this, arguments);\n\n this.pattern = function () { return PATTERN; };\n this.extract = function(text, ref, match, opt){\n\n if(match[OPENNING_GROUP] == '/' || match[ENDING_GROUP] == '/') {\n // Long skip, if there is some overlapping like:\n // XX[/YY/ZZ]\n // [XX/YY/]ZZ\n match.index += match[0].length\n return;\n }\n\n var index = match.index + match[OPENNING_GROUP].length;\n var text = match[0].substr(match[OPENNING_GROUP].length, match[0].length - match[ENDING_GROUP].length);\n\n\n var result = new ParsedResult({\n text: text,\n index: index,\n ref: ref,\n });\n\n if(text.match(/^\\d\\.\\d$/)) return;\n if(text.match(/^\\d\\.\\d{1,2}\\.\\d{1,2}$/)) return;\n\n // MM/dd -> OK\n // MM.dd -> NG\n if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;\n\n var year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n var month = match[MONTH_GROUP];\n var day = match[DAY_GROUP];\n\n month = parseInt(month);\n day = parseInt(day);\n year = parseInt(year);\n\n if (month < 1 || month > 12) return null;\n if(day < 1 || day > 31) return null;\n\n if(year < 100){\n if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\n }\n\n result.start.assign('day', day);\n result.start.assign('month', month);\n result.start.assign('year', year);\n\n //Day of week\n if(match[WEEKDAY_GROUP]) {\n result.start.assign('weekday', DAYS_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['DESlashDateFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/DE');\n\nvar PATTERN = new RegExp('' +\n '(\\\\W|^)vor\\\\s*' +\n '(' + util.INTEGER_WORDS_PATTERN + '|[0-9]+|einigen|eine[rm]\\\\s*halben|eine[rm])\\\\s*' +\n '(sekunden?|min(?:ute)?n?|stunden?|wochen?|tag(?:en)?|monat(?:en)?|jahr(?:en)?)\\\\s*' +\n '(?=(?:\\\\W|$))', 'i');\n\nvar STRICT_PATTERN = new RegExp('' +\n '(\\\\W|^)vor\\\\s*' +\n '([0-9]+|eine(?:r|m))\\\\s*' +\n '(sekunden?|minuten?|stunden?|tag(?:en)?)' +\n '(?=(?:\\\\W|$))', 'i');\n\nexports.Parser = function DETimeAgoFormatParser(){\n Parser.apply(this, arguments);\n\n this.pattern = function() {\n return this.isStrictMode()? STRICT_PATTERN : PATTERN;\n };\n\n this.extract = function(text, ref, match, opt){\n\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n\n var text = match[0];\n text = match[0].substr(match[1].length, match[0].length - match[1].length);\n index = match.index + match[1].length;\n\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref\n });\n\n var num = match[2].toLowerCase() ;\n if (util.INTEGER_WORDS[num] !== undefined) {\n num = util.INTEGER_WORDS[num];\n } else if (num === 'einer' || num === 'einem') {\n num = 1;\n } else if (num === 'einigen') {\n num = 3;\n } else if (/halben/.test(num)) {\n num = 0.5;\n } else {\n num = parseInt(num);\n }\n\n var date = dayjs(ref);\n\n if (/stunde|min|sekunde/i.test(match[3])) {\n if (/stunde/i.test(match[3])) {\n\n date = date.add(-num, 'hour');\n\n } else if (/min/i.test(match[3])) {\n\n date = date.add(-num, 'minute');\n\n } else if (/sekunde/i.test(match[3])) {\n\n date = date.add(-num, 'second');\n }\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.assign('hour', date.hour());\n result.start.assign('minute', date.minute());\n result.start.assign('second', date.second());\n result.tags['DETimeAgoFormatParser'] = true;\n return result;\n }\n\n if (/woche/i.test(match[3])) {\n date = date.add(-num, 'week');\n\n result.start.imply('day', date.date());\n result.start.imply('month', date.month() + 1);\n result.start.imply('year', date.year());\n result.start.imply('weekday', date.day());\n return result;\n }\n\n if (/tag/i.test(match[3])) {\n date = date.add(-num, 'd');\n }\n\n if (/monat/i.test(match[3])) {\n date = date.add(-num, 'month');\n }\n\n if (/jahr/i.test(match[3])) {\n\n date = date.add(-num, 'year');\n }\n\n result.start.assign('day', date.date());\n result.start.assign('month', date.month() + 1);\n result.start.assign('year', date.year());\n return result;\n\n };\n}\n","/*\n\n\n*/\n\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar ParsedComponents = require('../../result').ParsedComponents;\n\nvar FIRST_REG_PATTERN = new RegExp(\"(^|\\\\s|T)\" +\n \"(?:(?:um|von)\\\\s*)?\" + \n \"(\\\\d{1,4}|mittags?|mitternachts?)\" + \n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" + \n \"(?:\" + \n \"(?:\\\\:|\\\\:)(\\\\d{2})\" + \n \")?\" + \n \")?\" +\n \"(?:\\\\s*uhr)?\" +\n \"(?:\\\\s*(morgens|vormittags|mittags|nachmittags|abends|nachts))?\" + \n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" + \n \"(\\\\-|\\\\–|\\\\~|\\\\〜|bis|\\\\?)\\\\s*\" + \n \"(\\\\d{1,4})\" +\n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" + \n \"(?:\" + \n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" + \n \")?\" + \n \")?\" + \n \"(?:\\\\s*(morgens|vormittags|mittags|nachmittags|abends|nachts))?\" + \n \"(?=\\\\W|$)\", 'i');\n\nvar HOUR_GROUP = 2;\nvar MINUTE_GROUP = 3;\nvar SECOND_GROUP = 4;\nvar AM_PM_HOUR_GROUP = 5;\n\n\nexports.Parser = function DETimeExpressionParser() {\n Parser.apply(this, arguments);\n\n this.pattern = function() { return FIRST_REG_PATTERN; }\n \n this.extract = function(text, ref, match, opt){ \n \n // This pattern can be overlaped Ex. [12] AM, 1[2] AM\n if (match.index > 0 && text[match.index-1].match(/\\w/)) return null;\n var refMoment = dayjs(ref);\n var result = new ParsedResult();\n result.ref = ref;\n result.index = match.index + match[1].length;\n result.text = match[0].substring(match[1].length);\n result.tags['DETimeExpressionParser'] = true;\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month()+1);\n result.start.imply('year', refMoment.year());\n \n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){ \n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.start.assign('second', second);\n }\n \n // ----- Hours\n if (/mittags?/i.test(match[HOUR_GROUP])) {\n meridiem = 1; \n hour = 12;\n } else if (/mitternachts?/i.test(match[HOUR_GROUP])) {\n meridiem = 0; \n hour = 0;\n } else {\n hour = parseInt(match[HOUR_GROUP]);\n }\n \n // ----- Minutes\n if(match[MINUTE_GROUP] != null){ \n minute = parseInt(match[MINUTE_GROUP]);\n } else if(hour > 100) { \n minute = hour%100;\n hour = parseInt(hour/100);\n } \n \n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) { \n meridiem = 1;\n }\n\n // ----- AM & PM \n if (match[AM_PM_HOUR_GROUP] != null) {\n if (hour > 12) return null;\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if (ampm === 'morgens' || ampm === 'vormittags') {\n meridiem = 0; \n if(hour == 12) hour = 0;\n } else {\n meridiem = 1; \n if(hour != 12) hour += 12;\n }\n } \n\n result.start.assign('hour', hour);\n result.start.assign('minute', minute);\n\n if (meridiem >= 0) {\n result.start.assign('meridiem', meridiem);\n } else {\n if (hour < 12) {\n result.start.imply('meridiem', 0);\n } else {\n result.start.imply('meridiem', 1);\n }\n }\n \n // ==============================================================\n // Extracting the 'to' chunk\n // ==============================================================\n match = SECOND_REG_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n // Not accept number only result\n if (result.text.match(/^\\d+$/)) { \n return null;\n }\n return result;\n }\n\n\n\n // Pattern \"YY.YY -XXXX\" is more like timezone offset\n if (match[0].match(/^\\s*(\\+|\\-)\\s*\\d{3,4}$/)) {\n return result;\n }\n\n if(result.end == null){\n result.end = new ParsedComponents(null, result.start.date());\n }\n\n var hour = 0;\n var minute = 0;\n var meridiem = -1;\n\n // ----- Second\n if(match[SECOND_GROUP] != null){ \n var second = parseInt(match[SECOND_GROUP]);\n if(second >= 60) return null;\n\n result.end.assign('second', second);\n }\n\n hour = parseInt(match[2]);\n \n // ----- Minute\n if (match[MINUTE_GROUP]!= null) {\n \n minute = parseInt(match[MINUTE_GROUP]);\n if(minute >= 60) return result;\n \n } else if (hour > 100) {\n\n minute = hour%100;\n hour = parseInt(hour/100);\n }\n\n if(minute >= 60) {\n return null;\n }\n\n if(hour > 24) {\n return null;\n }\n if (hour >= 12) { \n meridiem = 1;\n }\n \n // ----- AM & PM \n if (match[AM_PM_HOUR_GROUP] != null) {\n\n if (hour > 12) return null;\n\n var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\n if (ampm === 'morgens' || ampm === 'vormittags') {\n meridiem = 0; \n if(hour == 12) {\n hour = 0;\n if (!result.end.isCertain('day')) {\n result.end.imply('day', result.end.get('day') + 1);\n }\n }\n } else {\n meridiem = 1; \n if(hour != 12) hour += 12;\n }\n \n if (!result.start.isCertain('meridiem')) {\n if (meridiem == 0) {\n \n result.start.imply('meridiem', 0);\n \n if (result.start.get('hour') == 12) {\n result.start.assign('hour', 0);\n }\n\n } else {\n\n result.start.imply('meridiem', 1);\n \n if (result.start.get('hour') != 12) {\n result.start.assign('hour', result.start.get('hour') + 12); \n }\n }\n }\n }\n\n result.text = result.text + match[0];\n result.end.assign('hour', hour);\n result.end.assign('minute', minute);\n if (meridiem >= 0) {\n result.end.assign('meridiem', meridiem);\n } else {\n var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == 1;\n if (startAtPM && result.start.get('hour') > hour) {\n // 10pm - 1 (am)\n result.end.imply('meridiem', 0);\n\n } else if (hour > 12) {\n result.end.imply('meridiem', 1);\n }\n }\n\n if (result.end.date().getTime() < result.start.date().getTime()) {\n result.end.imply('day', result.end.get('day') + 1)\n }\n \n return result;\n }\n}\n","/*\n\n\n*/\nconst dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar DAYS_OFFSET = {\n 'sonntag': 0, 'so': 0,\n 'montag': 1, 'mo': 1,\n 'dienstag': 2, 'di': 2,\n 'mittwoch': 3, 'mi': 3,\n 'donnerstag': 4, 'do': 4,\n 'freitag': 5, 'fr': 5,\n 'samstag': 6, 'sa': 6\n};\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:a[mn]\\\\s*?)?' +\n '(?:(diese[mn]|letzte[mn]|n(?:ä|ae)chste[mn])\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(diese|letzte|n(?:ä|ae)chste)\\\\s*woche)?' +\n '(?=\\\\W|$)', 'i');\n\nvar PREFIX_GROUP = 2;\nvar WEEKDAY_GROUP = 3;\nvar POSTFIX_GROUP = 4;\n\nexports.Parser = function DEWeekdayParser() {\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; };\n\n this.extract = function(text, ref, match, opt){\n var index = match.index + match[1].length;\n var text = match[0].substr(match[1].length, match[0].length - match[1].length);\n var result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n var dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();\n var offset = DAYS_OFFSET[dayOfWeek];\n if(offset === undefined) return null;\n\n var startMoment = dayjs(ref);\n var prefix = match[PREFIX_GROUP];\n var postfix = match[POSTFIX_GROUP];\n\n var refOffset = startMoment.day();\n var norm = prefix || postfix;\n norm = norm || '';\n norm = norm.toLowerCase();\n if (/letzte/.test(norm)) {\n startMoment = startMoment.day(offset - 7);\n } else if (/n(?:ä|ae)chste/.test(norm)) {\n startMoment = startMoment.day(offset + 7);\n } else if (/diese/.test(norm)) {\n if ( opt.forwardDate && refOffset > offset ) {\n startMoment = startMoment.day(offset + 7);\n } else {\n startMoment = startMoment.day(offset);\n }\n } else {\n if ( opt.forwardDate && refOffset > offset ) {\n startMoment = startMoment.day(offset + 7);\n } else if (!opt.forwardDate && Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {\n startMoment = startMoment.day(offset - 7);\n } else if (!opt.forwardDate && Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {\n startMoment = startMoment.day(offset + 7);\n } else {\n startMoment = startMoment.day(offset);\n }\n }\n\n result.start.assign('weekday', offset);\n result.start.imply('day', startMoment.date());\n result.start.imply('month', startMoment.month() + 1);\n result.start.imply('year', startMoment.year());\n return result;\n }\n};\n","var dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp(\n '(\\\\W|^)(' +\n 'jetzt|' +\n '(?:heute|diesen)\\\\s*(morgen|vormittag|mittag|nachmittag|abend)|' +\n '(?:heute|diese)\\\\s*nacht|' +\n 'heute|' +\n '(?:(?:ü|ue)ber)?morgen(?:\\\\s*(morgen|vormittag|mittag|nachmittag|abend|nacht))?|' +\n '(?:vor)?gestern(?:\\\\s*(morgen|vormittag|mittag|nachmittag|abend|nacht))?|' +\n 'letzte\\\\s*nacht' +\n ')(?=\\\\W|$)', 'i');\n\nexports.Parser = function DECasualDateParser() {\n\n Parser.apply(this, arguments);\n\n this.pattern = function() { return PATTERN; }\n\n this.extract = function(text, ref, match, opt) {\n text = match[0].substr(match[1].length);\n \n const index = match.index + match[1].length;\n const result = new ParsedResult({\n index: index,\n text: text,\n ref: ref,\n });\n\n const refMoment = dayjs(ref);\n const lowerText = text.toLowerCase();\n\n var startMoment = refMoment;\n\n if (/(?:heute|diese)\\s*nacht/.test(lowerText)) {\n // Normally means this coming midnight\n result.start.imply('hour', 22);\n result.start.imply('meridiem', 1);\n } else if (/^(?:ü|ue)bermorgen/.test(lowerText)) {\n startMoment = startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');\n } else if (/^morgen/.test(lowerText)) {\n // Check not \"Tomorrow\" on late night\n if (refMoment.hour() > 1) {\n startMoment = startMoment.add(1, 'day');\n }\n } else if (/^gestern/.test(lowerText)) {\n startMoment = startMoment.add(-1, 'day');\n } else if (/^vorgestern/.test(lowerText)) {\n startMoment = startMoment.add(-2, 'day');\n } else if (/letzte\\s*nacht/.test(lowerText)) {\n result.start.imply('hour', 0);\n if (refMoment.hour() > 6) {\n startMoment = startMoment.add(-1, 'day');\n }\n } else if (lowerText === 'jetzt') {\n result.start.imply('hour', refMoment.hour());\n result.start.imply('minute', refMoment.minute());\n result.start.imply('second', refMoment.second());\n result.start.imply('millisecond', refMoment.millisecond());\n }\n\n var secondMatch = match[3] || match[4] || match[5];\n if (secondMatch) {\n switch (secondMatch.toLowerCase()) {\n case 'morgen':\n result.start.imply('hour', 6);\n break;\n case 'vormittag':\n result.start.imply('hour', 9);\n break;\n case 'mittag':\n result.start.imply('hour', 12);\n break;\n case 'nachmittag':\n result.start.imply('hour', 15);\n result.start.imply('meridiem', 1);\n break;\n case 'abend':\n result.start.imply('hour', 18);\n result.start.imply('meridiem', 1);\n break;\n case 'nacht':\n result.start.imply('hour', 0);\n break;\n }\n }\n\n result.start.assign('day', startMoment.date())\n result.start.assign('month', startMoment.month() + 1)\n result.start.assign('year', startMoment.year())\n result.tags['DECasualDateParser'] = true;\n return result;\n }\n}\n","/*\n \n*/\nvar Refiner = require('./refiner').Refiner;\n\nexports.Refiner = function OverlapRemovalRefiner() {\n\tRefiner.call(this);\n\t\n\n\tthis.refine = function(text, results, opt) { \n\n if (results.length < 2) return results;\n \n var filteredResults = [];\n var prevResult = results[0];\n \n for (var i=1; i<results.length; i++){\n \n var result = results[i];\n \n // If overlap, compare the length and discard the shorter one\n if (result.index < prevResult.index + prevResult.text.length) {\n\n if (result.text.length > prevResult.text.length){\n prevResult = result;\n }\n \n } else {\n filteredResults.push(prevResult);\n prevResult = result;\n }\n }\n \n // The last one\n if (prevResult != null) {\n filteredResults.push(prevResult);\n }\n\n return filteredResults;\n }\n}","/*\n \n*/\nvar Refiner = require('./refiner').Refiner;\n\n\nvar TIMEZONE_OFFSET_PATTERN = new RegExp(\"^\\\\s*(GMT|UTC)?(\\\\+|\\\\-)(\\\\d{1,2}):?(\\\\d{2})\", 'i');\nvar TIMEZONE_OFFSET_SIGN_GROUP = 2;\nvar TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 3;\nvar TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 4;\n\nexports.Refiner = function ExtractTimezoneOffsetRefiner() {\n Refiner.call(this);\n\n this.refine = function(text, results, opt) {\n\n results.forEach(function(result) {\n\n if (result.start.isCertain('timezoneOffset')) {\n return;\n }\n\n var match = TIMEZONE_OFFSET_PATTERN.exec(text.substring(result.index + result.text.length));\n if (!match) {\n return;\n }\n\n var hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);\n var minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP]);\n var timezoneOffset = hourOffset * 60 + minuteOffset;\n if (match[TIMEZONE_OFFSET_SIGN_GROUP] === '-') {\n timezoneOffset = -timezoneOffset;\n }\n\n if (result.end != null) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.start.assign('timezoneOffset', timezoneOffset);\n result.text += match[0];\n result.tags['ExtractTimezoneOffsetRefiner'] = true;\n });\n\n return results;\n }\n}\n","/*\n\n*/\nvar Refiner = require('./refiner').Refiner;\n\n// Map ABBR -> Offset in minute\nvar TIMEZONE_NAME_PATTERN = new RegExp(\"^\\\\s*\\\\(?([A-Z]{2,4})\\\\)?(?=\\\\W|$)\", 'i');\nvar DEFAULT_TIMEZONE_ABBR_MAP = {\n \"ACDT\":630,\"ACST\":570,\"ADT\":-180,\"AEDT\":660,\"AEST\":600,\"AFT\":270,\"AKDT\":-480,\"AKST\":-540,\"ALMT\":360,\"AMST\":-180,\"AMT\":-240,\"ANAST\":720,\"ANAT\":720,\"AQTT\":300,\"ART\":-180,\"AST\":-240,\"AWDT\":540,\"AWST\":480,\"AZOST\":0,\"AZOT\":-60,\"AZST\":300,\"AZT\":240,\"BNT\":480,\"BOT\":-240,\"BRST\":-120,\"BRT\":-180,\"BST\":60,\"BTT\":360,\"CAST\":480,\"CAT\":120,\"CCT\":390,\"CDT\":-300,\"CEST\":120,\"CET\":60,\"CHADT\":825,\"CHAST\":765,\"CKT\":-600,\"CLST\":-180,\"CLT\":-240,\"COT\":-300,\"CST\":-360,\"CVT\":-60,\"CXT\":420,\"ChST\":600,\"DAVT\":420,\"EASST\":-300,\"EAST\":-360,\"EAT\":180,\"ECT\":-300,\"EDT\":-240,\"EEST\":180,\"EET\":120,\"EGST\":0,\"EGT\":-60,\"EST\":-300,\"ET\":-300,\"FJST\":780,\"FJT\":720,\"FKST\":-180,\"FKT\":-240,\"FNT\":-120,\"GALT\":-360,\"GAMT\":-540,\"GET\":240,\"GFT\":-180,\"GILT\":720,\"GMT\":0,\"GST\":240,\"GYT\":-240,\"HAA\":-180,\"HAC\":-300,\"HADT\":-540,\"HAE\":-240,\"HAP\":-420,\"HAR\":-360,\"HAST\":-600,\"HAT\":-90,\"HAY\":-480,\"HKT\":480,\"HLV\":-210,\"HNA\":-240,\"HNC\":-360,\"HNE\":-300,\"HNP\":-480,\"HNR\":-420,\"HNT\":-150,\"HNY\":-540,\"HOVT\":420,\"ICT\":420,\"IDT\":180,\"IOT\":360,\"IRDT\":270,\"IRKST\":540,\"IRKT\":540,\"IRST\":210,\"IST\":330,\"JST\":540,\"KGT\":360,\"KRAST\":480,\"KRAT\":480,\"KST\":540,\"KUYT\":240,\"LHDT\":660,\"LHST\":630,\"LINT\":840,\"MAGST\":720,\"MAGT\":720,\"MART\":-510,\"MAWT\":300,\"MDT\":-360,\"MESZ\":120,\"MEZ\":60,\"MHT\":720,\"MMT\":390,\"MSD\":240,\"MSK\":240,\"MST\":-420,\"MUT\":240,\"MVT\":300,\"MYT\":480,\"NCT\":660,\"NDT\":-90,\"NFT\":690,\"NOVST\":420,\"NOVT\":360,\"NPT\":345,\"NST\":-150,\"NUT\":-660,\"NZDT\":780,\"NZST\":720,\"OMSST\":420,\"OMST\":420,\"PDT\":-420,\"PET\":-300,\"PETST\":720,\"PETT\":720,\"PGT\":600,\"PHOT\":780,\"PHT\":480,\"PKT\":300,\"PMDT\":-120,\"PMST\":-180,\"PONT\":660,\"PST\":-480,\"PT\":-480,\"PWT\":540,\"PYST\":-180,\"PYT\":-240,\"RET\":240,\"SAMT\":240,\"SAST\":120,\"SBT\":660,\"SCT\":240,\"SGT\":480,\"SRT\":-180,\"SST\":-660,\"TAHT\":-600,\"TFT\":300,\"TJT\":300,\"TKT\":780,\"TLT\":540,\"TMT\":300,\"TVT\":720,\"ULAT\":480,\"UTC\":0,\"UYST\":-120,\"UYT\":-180,\"UZT\":300,\"VET\":-210,\"VLAST\":660,\"VLAT\":660,\"VUT\":660,\"WAST\":120,\"WAT\":60,\"WEST\":60,\"WESZ\":60,\"WET\":0,\"WEZ\":0,\"WFT\":720,\"WGST\":-120,\"WGT\":-180,\"WIB\":420,\"WIT\":540,\"WITA\":480,\"WST\":780,\"WT\":0,\"YAKST\":600,\"YAKT\":600,\"YAPT\":600,\"YEKST\":360,\"YEKT\":360\n};\n\nexports.Refiner = function ExtractTimezoneAbbrRefiner(config) {\n\tRefiner.call(this, arguments);\n\n\tthis.refine = function(text, results, opt) {\n\n\t var timezones = new Object(DEFAULT_TIMEZONE_ABBR_MAP);\n\t if (opt.timezones) {\n\t for (var name in opt.timezones) {\n timezones[name] = opt.timezones[name];\n }\n }\n\n\t\tresults.forEach(function(result) {\n\n if (!result.tags['ENTimeExpressionParser'] &&\n !result.tags['ZHTimeExpressionParser'] &&\n !result.tags['FRTimeExpressionParser'] &&\n !result.tags['DETimeExpressionParser']) {\n return;\n }\n\n var match = TIMEZONE_NAME_PATTERN.exec(text.substring(result.index + result.text.length));\n if (match) {\n var timezoneAbbr = match[1].toUpperCase();\n if (timezones[timezoneAbbr] === undefined) {\n return;\n }\n\n var timezoneOffset = timezones[timezoneAbbr];\n if (!result.start.isCertain('timezoneOffset')) {\n result.start.assign('timezoneOffset', timezoneOffset);\n }\n\n if (result.end != null && !result.end.isCertain('timezoneOffset')) {\n result.end.assign('timezoneOffset', timezoneOffset);\n }\n\n result.text += match[0];\n result.tags['ExtractTimezoneAbbrRefiner'] = true;\n }\n\t\t});\n\n return results;\n\t}\n};","/*\n Enforce 'forwardDate' option to on the results. When there are missing component,\n e.g. \"March 12-13 (without year)\" or \"Thursday\", the refiner will try to adjust the result\n into the future instead of the past.\n*/\nvar dayjs = require('dayjs');\nvar Refiner = require('./refiner').Refiner;\n\nexports.Refiner = function ForwardDateRefiner() {\n Refiner.call(this);\n\n this.refine = function(text, results, opt) {\n\n if (!opt['forwardDate']) {\n return results;\n }\n\n results.forEach(function(result) {\n\n var refMoment = dayjs(result.ref);\n\n if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())\n ) {\n // Adjust year into the future\n for (var i=0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {\n result.start.imply('year', result.start.get('year') + 1);\n\n if (result.end && !result.end.isCertain('year')) {\n result.end.imply('year', result.end.get('year') + 1);\n }\n }\n\n result.tags['ForwardDateRefiner'] = true;\n }\n\n if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {\n // Adjust date to the coming week\n if (refMoment.day() > result.start.get('weekday')) {\n refMoment = refMoment.day(result.start.get('weekday') + 7);\n } else {\n refMoment = refMoment.day(result.start.get('weekday'));\n }\n\n result.start.imply('day', refMoment.date());\n result.start.imply('month', refMoment.month() + 1);\n result.start.imply('year', refMoment.year());\n result.tags['ForwardDateRefiner'] = true;\n }\n });\n\n return results;\n }\n};\n","/*\n \n*/\nvar Filter = require('./refiner').Filter;\n\nexports.Refiner = function UnlikelyFormatFilter() {\n Filter.call(this);\n \n\n this.isValid = function(text, result, opt) { \n\n if (result.text.replace(' ','').match(/^\\d*(\\.\\d*)?$/)) {\n return false;\n }\n\n return true; \n }\n}","/*\n\n*/\nvar ParsedComponents = require('../../result').ParsedComponents;\nvar Refiner = require('../refiner').Refiner;\n\n\nvar PATTERN = new RegExp(\"^\\\\s*(at|after|before|on|,|-|\\\\(|\\\\))?\\\\s*$\");\n\nfunction isMoreSpecific(prevResult, currResult) {\n var moreSpecific = false;\n\n if (prevResult.start.isCertain('year')) {\n if (!currResult.start.isCertain('year')) {\n moreSpecific = true;\n } else {\n if (prevResult.start.isCertain('month')) {\n if (!currResult.start.isCertain('month')) {\n moreSpecific = true;\n } else {\n if (prevResult.start.isCertain('day') && !currResult.start.isCertain('day')) {\n moreSpecific = true;\n }\n }\n }\n }\n }\n\n return moreSpecific;\n}\n\n\nfunction isAbleToMerge(text, prevResult, currResult) {\n var textBetween = text.substring(prevResult.index + prevResult.text.length, currResult.index);\n\n // Only accepts merge if one of them comes from casual relative date\n var includesRelativeResult = (prevResult.tags['ENRelativeDateFormatParser'] || currResult.tags['ENRelativeDateFormatParser']);\n\n // We assume they refer to the same date if all date fields are implied\n var referToSameDate = !prevResult.start.isCertain('day') && !prevResult.start.isCertain('month') && !prevResult.start.isCertain('year');\n\n // If both years are certain, that determines if they refer to the same date\n // but with one more specific than the other\n if (prevResult.start.isCertain('year') && currResult.start.isCertain('year'))\n referToSameDate = (prevResult.start.get('year') === currResult.start.get('year'));\n\n // We now test with the next level (month) if they refer to the same date\n if (prevResult.start.isCertain('month') && currResult.start.isCertain('month'))\n referToSameDate = (prevResult.start.get('month') === currResult.start.get('month')) && referToSameDate;\n\n return includesRelativeResult && textBetween.match(PATTERN) && referToSameDate;\n}\n\nfunction mergeResult(text, specificResult, nonSpecificResult){\n\n var specificDate = specificResult.start;\n var nonSpecificDate = nonSpecificResult.start;\n\n var startIndex = Math.min(specificResult.index, nonSpecificResult.index);\n var endIndex = Math.max(\n specificResult.index + specificResult.text.length,\n nonSpecificResult.index + nonSpecificResult.text.length);\n\n specificResult.index = startIndex;\n specificResult.text = text.substring(startIndex, endIndex);\n\n for (var tag in nonSpecificResult.tags) {\n specificResult.tags[tag] = true;\n }\n specificResult.tags['ENPrioritizeSpecificDateRefiner'] = true;\n return specificResult;\n}\n\nexports.Refiner = function ENPrioritizeSpecificDateRefiner() {\n Refiner.call(this);\n\n this.refine = function(text, results, opt) {\n\n if (results.length < 2) return results;\n\n var mergedResult = [];\n var currResult = null;\n var prevResult = null;\n\n for (var i = 1; i < results.length; i++) {\n\n currResult = results[i];\n prevResult = results[i-1];\n\n if (isMoreSpecific(prevResult, currResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n\n prevResult = mergeResult(text, prevResult, currResult);\n currResult = null;\n i += 1;\n\n } else if (isMoreSpecific(currResult, prevResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n\n prevResult = mergeResult(text, currResult, prevResult);\n currResult = null;\n i += 1;\n }\n\n mergedResult.push(prevResult);\n }\n\n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n return mergedResult;\n }\n}\n","/*\n \n*/\nvar ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;\n\nexports.Refiner = function JPMergeDateRangeRefiner() {\n ENMergeDateRangeRefiner.call(this);\n\n this.pattern = function () { return /^\\s*(から|ー)\\s*$/i };\n}\n\n","/*\r\n \r\n*/\r\nvar Refiner = require('../refiner').Refiner;\r\n\r\nexports.Refiner = function FRMergeDateRangeRefiner() {\r\n Refiner.call(this);\r\n\r\n this.pattern = function () { return /^\\s*(à|a|\\-)\\s*$/i };\r\n\r\n this.refine = function(text, results, opt) {\r\n\r\n if (results.length < 2) return results;\r\n \r\n var mergedResult = [];\r\n var currResult = null;\r\n var prevResult = null;\r\n \r\n for (var i=1; i<results.length; i++){\r\n \r\n currResult = results[i];\r\n prevResult = results[i-1];\r\n \r\n if (!prevResult.end && !currResult.end \r\n && this.isAbleToMerge(text, prevResult, currResult)) {\r\n \r\n prevResult = this.mergeResult(text, prevResult, currResult);\r\n currResult = null;\r\n i += 1;\r\n }\r\n \r\n mergedResult.push(prevResult);\r\n }\r\n \r\n if (currResult != null) {\r\n mergedResult.push(currResult);\r\n }\r\n\r\n\r\n return mergedResult;\r\n };\r\n\r\n this.isAbleToMerge = function(text, result1, result2) {\r\n var begin = result1.index + result1.text.length;\r\n var end = result2.index;\r\n var textBetween = text.substring(begin,end);\r\n\r\n return textBetween.match(this.pattern());\r\n };\r\n\r\n this.isWeekdayResult = function (result) {\r\n return result.start.isCertain('weekday') && !result.start.isCertain('day');\r\n };\r\n\r\n this.mergeResult = function(text, fromResult, toResult) {\r\n\r\n if (!this.isWeekdayResult(fromResult) && !this.isWeekdayResult(toResult)) {\r\n\r\n for (var key in toResult.start.knownValues) {\r\n if (!fromResult.start.isCertain(key)) {\r\n fromResult.start.assign(key, toResult.start.get(key));\r\n }\r\n }\r\n\r\n for (var key in fromResult.start.knownValues) {\r\n if (!toResult.start.isCertain(key)) {\r\n toResult.start.assign(key, fromResult.start.get(key));\r\n }\r\n }\r\n }\r\n\r\n if (fromResult.start.date().getTime() > toResult.start.date()) {\r\n var tmp = toResult;\r\n toResult = fromResult;\r\n fromResult = tmp;\r\n }\r\n \r\n fromResult.end = toResult.start;\r\n\r\n \r\n\r\n for (var tag in toResult.tags) {\r\n fromResult.tags[tag] = true;\r\n }\r\n\r\n \r\n var startIndex = Math.min(fromResult.index, toResult.index);\r\n var endIndex = Math.max(\r\n fromResult.index + fromResult.text.length, \r\n toResult.index + toResult.text.length);\r\n \r\n fromResult.index = startIndex;\r\n fromResult.text = text.substring(startIndex, endIndex);\r\n fromResult.tags[this.constructor.name] = true;\r\n return fromResult;\r\n }\r\n};\r\n\r\n","/*\r\n \r\n*/\r\nvar ParsedComponents = require('../../result').ParsedComponents;\r\nvar Refiner = require('../refiner').Refiner;\r\nvar mergeDateTimeComponent = require('../en/ENMergeDateTimeRefiner').mergeDateTimeComponent;\r\n\r\nvar PATTERN = new RegExp(\"^\\\\s*(T|à|a|vers|de|,|-)?\\\\s*$\");\r\n\r\nfunction isDateOnly(result) {\r\n return !result.start.isCertain('hour') || result.tags['FRCasualDateParser'];\r\n}\r\n \r\nfunction isTimeOnly(result) {\r\n return !result.start.isCertain('month') && !result.start.isCertain('weekday');\r\n}\r\n\r\n\r\nfunction isAbleToMerge(text, prevResult, curResult) {\r\n var textBetween = text.substring(prevResult.index + prevResult.text.length, curResult.index);\r\n return textBetween.match(PATTERN);\r\n}\r\n\r\nfunction mergeResult(text, dateResult, timeResult){\r\n\r\n var beginDate = dateResult.start;\r\n var beginTime = timeResult.start;\r\n var beginDateTime = mergeDateTimeComponent(beginDate, beginTime);\r\n\r\n if (dateResult.end != null || timeResult.end != null) {\r\n \r\n var endDate = dateResult.end == null ? dateResult.start : dateResult.end; \r\n var endTime = timeResult.end == null ? timeResult.start : timeResult.end;\r\n var endDateTime = mergeDateTimeComponent(endDate, endTime);\r\n \r\n if (dateResult.end == null && endDateTime.date().getTime() < beginDateTime.date().getTime()) {\r\n // Ex. 9pm - 1am\r\n if (endDateTime.isCertain('day')) {\r\n endDateTime.assign('day', endDateTime.get('day') + 1);\r\n } else {\r\n endDateTime.imply('day', endDateTime.get('day') + 1);\r\n }\r\n }\r\n\r\n dateResult.end = endDateTime;\r\n }\r\n\r\n dateResult.start = beginDateTime; \r\n\r\n var startIndex = Math.min(dateResult.index, timeResult.index);\r\n var endIndex = Math.max(\r\n dateResult.index + dateResult.text.length, \r\n timeResult.index + timeResult.text.length);\r\n \r\n dateResult.index = startIndex;\r\n dateResult.text = text.substring(startIndex, endIndex);\r\n\r\n for (var tag in timeResult.tags) {\r\n dateResult.tags[tag] = true;\r\n }\r\n dateResult.tags['FRMergeDateAndTimeRefiner'] = true;\r\n return dateResult;\r\n}\r\n\r\nexports.Refiner = function FRMergeDateTimeRefiner() {\r\n Refiner.call(this);\r\n\r\n\r\n this.refine = function(text, results, opt) { \r\n\r\n if (results.length < 2) return results;\r\n\r\n var mergedResult = [];\r\n var currResult = null;\r\n var prevResult = null;\r\n\r\n for (var i = 1; i < results.length; i++) {\r\n\r\n currResult = results[i];\r\n prevResult = results[i-1];\r\n \r\n if (isDateOnly(prevResult) && isTimeOnly(currResult) \r\n && isAbleToMerge(text, prevResult, currResult)) {\r\n \r\n prevResult = mergeResult(text, prevResult, currResult);\r\n currResult = null;\r\n i += 1;\r\n \r\n } else if (isDateOnly(currResult) && isTimeOnly(prevResult)\r\n && isAbleToMerge(text, prevResult, currResult)) {\r\n \r\n prevResult = mergeResult(text, currResult, prevResult);\r\n currResult = null;\r\n i += 1;\r\n }\r\n \r\n mergedResult.push(prevResult);\r\n }\r\n\r\n if (currResult != null) {\r\n mergedResult.push(currResult);\r\n }\r\n\r\n return mergedResult;\r\n }\r\n}","/*\n \n*/\nvar ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;\n\nexports.Refiner = function DEMergeDateRangeRefiner() {\n ENMergeDateRangeRefiner.call(this);\n\n this.pattern = function () {\n return /^\\s*(bis(?:\\s*(?:am|zum))?|\\-)\\s*$/i\n };\n};\n","/*\n \n*/\nvar ParsedComponents = require('../../result').ParsedComponents;\nvar Refiner = require('../refiner').Refiner;\n\nvar mergeDateTimeComponent = require('../en/ENMergeDateTimeRefiner').mergeDateTimeComponent;\nvar isDateOnly = require('../en/ENMergeDateTimeRefiner').isDateOnly;\nvar isTimeOnly = require('../en/ENMergeDateTimeRefiner').isTimeOnly;\n\nvar PATTERN = new RegExp(\"^\\\\s*(T|um|am|,|-)?\\\\s*$\");\n\nfunction isAbleToMerge(text, prevResult, curResult) {\n var textBetween = text.substring(prevResult.index + prevResult.text.length, curResult.index);\n return textBetween.match(PATTERN);\n}\n\nfunction mergeResult(text, dateResult, timeResult){\n\n var beginDate = dateResult.start;\n var beginTime = timeResult.start; \n var beginDateTime = mergeDateTimeComponent(beginDate, beginTime);\n\n if (dateResult.end != null || timeResult.end != null) {\n \n var endDate = dateResult.end == null ? dateResult.start : dateResult.end; \n var endTime = timeResult.end == null ? timeResult.start : timeResult.end;\n var endDateTime = mergeDateTimeComponent(endDate, endTime);\n \n if (dateResult.end == null && endDateTime.date().getTime() < beginDateTime.date().getTime()) {\n // Ex. 9pm - 1am\n if (endDateTime.isCertain('day')) {\n endDateTime.assign('day', endDateTime.get('day') + 1);\n } else {\n endDateTime.imply('day', endDateTime.get('day') + 1);\n }\n }\n\n dateResult.end = endDateTime;\n }\n\n dateResult.start = beginDateTime; \n\n var startIndex = Math.min(dateResult.index, timeResult.index);\n var endIndex = Math.max(\n dateResult.index + dateResult.text.length, \n timeResult.index + timeResult.text.length);\n \n dateResult.index = startIndex;\n dateResult.text = text.substring(startIndex, endIndex);\n\n for (var tag in timeResult.tags) {\n dateResult.tags[tag] = true;\n }\n dateResult.tags['DEMergeDateAndTimeRefiner'] = true;\n return dateResult;\n}\n\nexports.Refiner = function DEMergeDateTimeRefiner() {\n Refiner.call(this);\n\n\n this.refine = function(text, results, opt) { \n\n if (results.length < 2) return results;\n\n var mergedResult = [];\n var currResult = null;\n var prevResult = null;\n\n for (var i = 1; i < results.length; i++) {\n\n currResult = results[i];\n prevResult = results[i-1];\n \n if (isDateOnly(prevResult) && isTimeOnly(currResult) \n && isAbleToMerge(text, prevResult, currResult)) {\n \n prevResult = mergeResult(text, prevResult, currResult);\n currResult = null;\n i += 1;\n \n } else if (isDateOnly(currResult) && isTimeOnly(prevResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n \n prevResult = mergeResult(text, currResult, prevResult);\n currResult = null;\n i += 1;\n }\n \n mergedResult.push(prevResult);\n }\n\n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n return mergedResult;\n }\n}"],"sourceRoot":""}