chrono-node 1.4.7 → 1.4.9
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.
- package/dist/chrono.js +711 -809
- package/dist/chrono.js.map +1 -1
- package/dist/chrono.min.js +1 -1
- package/dist/chrono.min.js.map +1 -1
- package/package.json +1 -1
- package/src/chrono.js +57 -59
- package/src/options.js +30 -29
- package/src/parsers/en/ENDeadlineFormatParser.js +9 -9
- package/src/result.js +119 -119
- package/test/de/de.test.js +36 -51
- package/test/de/de_casual.test.js +242 -141
- package/test/de/de_dash.test.js +5 -8
- package/test/de/de_deadline.test.js +151 -47
- package/test/de/de_little_endian.test.js +207 -58
- package/test/de/de_time_ago.test.js +167 -52
- package/test/de/de_time_exp.test.js +135 -121
- package/test/de/de_weekday.test.js +94 -31
- package/test/en/en.test.js +118 -89
- package/test/en/en_casual.test.js +149 -134
- package/test/en/en_dash.test.js +17 -11
- package/test/en/en_deadline.test.js +93 -69
- package/test/en/en_inter_std.test.js +28 -7
- package/test/en/en_little_endian.test.js +76 -26
- package/test/en/en_middle_endian.test.js +63 -21
- package/test/en/en_month.test.js +6 -2
- package/test/en/en_option_forward.test.js +120 -112
- package/test/en/en_relative.test.js +155 -172
- package/test/en/en_slash.test.js +156 -115
- package/test/en/en_time_ago.test.js +61 -21
- package/test/en/en_time_exp.test.js +228 -209
- package/test/en/en_time_from_now.test.js +70 -24
- package/test/en/en_time_later.test.js +16 -6
- package/test/en/en_weekday.test.js +39 -13
- package/test/es/es_casual.test.js +143 -120
- package/test/es/es_dash.test.js +7 -8
- package/test/es/es_deadline.test.js +69 -35
- package/test/es/es_little_endian.test.js +250 -145
- package/test/es/es_slash.test.js +17 -12
- package/test/es/es_time_ago.test.js +21 -7
- package/test/es/es_time_exp.test.js +154 -160
- package/test/fr/fr_casual.test.js +153 -124
- package/test/fr/fr_dash.test.js +13 -6
- package/test/fr/fr_deadline.test.js +163 -44
- package/test/fr/fr_little_endian.test.js +262 -81
- package/test/fr/fr_relative.test.js +188 -196
- package/test/fr/fr_slash.test.js +41 -14
- package/test/fr/fr_time_ago.test.js +30 -10
- package/test/fr/fr_time_exp.test.js +619 -567
- package/test/fr/fr_weekday.test.js +24 -8
- package/test/ja/ja_casual.test.js +41 -26
- package/test/ja/ja_standard.test.js +322 -207
- package/test/nl/nl.test.js +18 -20
- package/test/nl/nl_dash.test.js +26 -26
- package/test/nl/nl_little_endian.test.js +100 -51
- package/test/nl/nl_time_exp.test.js +37 -13
- package/test/nl/nl_weekday.test.js +39 -13
- package/test/pt/pt_casual.test.js +222 -156
- package/test/pt/pt_dash.test.js +7 -6
- package/test/pt/pt_deadline.test.js +51 -17
- package/test/pt/pt_little_endian.test.js +251 -144
- package/test/pt/pt_slash.test.js +38 -25
- package/test/pt/pt_time_ago.test.js +128 -80
- package/test/pt/pt_time_exp.test.js +191 -173
- package/test/test_util.js +1 -5
- package/test/zh/zh_hant_casual.test.js +184 -87
- package/test/zh/zh_hant_date.test.js +109 -75
- package/test/zh/zh_hant_deadline.test.js +131 -41
- package/test/zh/zh_hant_time_exp.test.js +184 -141
- package/test/zh/zh_hant_weekday.test.js +64 -22
package/dist/chrono.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://chrono/webpack/universalModuleDefinition","webpack://chrono/webpack/bootstrap","webpack://chrono/./src/parsers/parser.js","webpack://chrono/./src/result.js","webpack://chrono/./node_modules/dayjs/dayjs.min.js","webpack://chrono/./src/refiners/refiner.js","webpack://chrono/./src/utils/EN.js","webpack://chrono/./src/refiners/en/ENMergeDateTimeRefiner.js","webpack://chrono/./src/parsers/en/ENWeekdayParser.js","webpack://chrono/./src/utils/ZH-Hant.js","webpack://chrono/./src/utils/DE.js","webpack://chrono/./src/refiners/en/ENMergeDateRangeRefiner.js","webpack://chrono/./src/utils/FR.js","webpack://chrono/./src/utils/NL.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/parsers/nl/NLMonthNameParser.js","webpack://chrono/./src/parsers/nl/NLMonthNameLittleEndianParser.js","webpack://chrono/./src/parsers/nl/NLSlashDateFormatParser.js","webpack://chrono/./src/parsers/nl/NLWeekdayParser.js","webpack://chrono/./src/parsers/nl/NLTimeExpressionParser.js","webpack://chrono/./src/parsers/nl/NLCasualDateParser.js","webpack://chrono/./src/parsers/nl/NLCasualTimeParser.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","webpack://chrono/./src/refiners/nl/NLMergeDateRangeRefiner.js","webpack://chrono/./src/refiners/nl/NLMergeDateTimeRefiner.js","webpack://chrono/./src/options.js","webpack://chrono/./src/chrono.js"],"names":["dayjs","require","exports","Parser","config","strictMode","strict","isStrictMode","pattern","extract","text","ref","match","opt","execute","results","regex","remainingText","exec","index","length","result","substring","hasPossibleDates","push","refiners","forEach","refiner","refine","options","findYearClosestToRef","day","month","refMoment","dateMoment","date","year","nextYear","add","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","NLMonthNameParser","NLMonthNameLittleEndianParser","NLSlashDateFormatParser","NLWeekdayParser","NLTimeExpressionParser","NLCasualDateParser","NLCasualTimeParser","ParsedResult","tags","start","ParsedComponents","end","JSON","parse","stringify","clone","isPossibleDate","isOnlyWeekdayComponent","isOnlyDayMonthComponent","components","knownValues","impliedValues","key","imply","component","value","isCertain","adjustTimezoneOffset","get","utcOffset","toDate","hour","minute","second","millisecond","currentTimezoneOffset","targetTimezoneOffset","undefined","Refiner","Filter","call","isValid","filteredResult","i","OverlapRemovalRefiner","ExtractTimezoneOffsetRefiner","ExtractTimezoneAbbrRefiner","ForwardDateRefiner","UnlikelyFormatFilter","ENMergeDateTimeRefiner","ENMergeDateRangeRefiner","ENPrioritizeSpecificDateRefiner","JPMergeDateRangeRefiner","FRMergeDateRangeRefiner","FRMergeDateTimeRefiner","DEMergeDateRangeRefiner","DEMergeDateTimeRefiner","NLMergeDateRangeRefiner","NLMergeDateTimeRefiner","WEEKDAY_OFFSET","MONTH_OFFSET","MONTH_PATTERN","Object","keys","join","replace","INTEGER_WORDS","INTEGER_WORDS_PATTERN","ORDINAL_WORDS","ORDINAL_WORDS_PATTERN","TIME_UNIT","TIME_UNIT_STRICT","PATTERN_TIME_UNIT","RegExp","TIME_UNIT_PATTERN","TIME_UNIT_STRICT_PATTERN","extractDateTimeUnitFragments","timeunitText","fragments","collectDateTimeFragment","num","toLowerCase","parseFloat","PATTERN","isDateOnly","isTimeOnly","isAbleToMerge","prevResult","curResult","textBetween","mergeDateTimeComponent","dateComponent","timeComponent","dateTimeComponent","assign","mergeResult","dateResult","timeResult","beginDate","beginTime","beginDateTime","endDate","endTime","endDateTime","getTime","startIndex","min","endIndex","max","tag","mergedResult","currResult","DAYS_OFFSET","PREFIX_GROUP","WEEKDAY_GROUP","POSTFIX_GROUP","updateParsedComponent","offset","modifier","startMoment","startMomentFixed","refOffset","apply","arguments","substr","dayOfWeek","prefix","postfix","norm","NUMBER","zhStringToNumber","number","char","zhStringToYear","string","parseInt","result1","result2","begin","fromResult","toResult","isOnlyWeekday","timeKeys","fromMoment","toMoment","isBefore","isAfter","tmp","constructor","name","WEEKDAY_PATTERN","YEAR_NUMBER_GROUP","MONTH_NUMBER_GROUP","DATE_NUMBER_GROUP","HOUR_NUMBER_GROUP","MINUTE_NUMBER_GROUP","SECOND_NUMBER_GROUP","MILLISECOND_NUMBER_GROUP","TZD_HOUR_OFFSET_GROUP","TZD_MINUTE_OFFSET_GROUP","minuteOffset","hourOffset","util","STRICT_PATTERN","MODIFIER_WORD_GROUP","MULTIPLIER_WORD_GROUP","RELATIVE_WORD_GROUP","parser","DATE_GROUP","DATE_NUM_GROUP","DATE_TO_GROUP","DATE_TO_NUM_GROUP","MONTH_NAME_GROUP","YEAR_GROUP","trim","test","weekday","YEAR_BE_GROUP","YEAR_GROUP2","YEAR_BE_GROUP2","yearBE","monthName","OPENNING_GROUP","ENDING_GROUP","FIRST_NUMBERS_GROUP","SECOND_NUMBERS_GROUP","littleEndian","MONTH_GROUP","DAY_GROUP","indexOf","tday","argument","FIRST_REG_PATTERN","SECOND_REG_PATTERN","HOUR_GROUP","MINUTE_GROUP","SECOND_GROUP","MILLI_SECOND_GROUP","AM_PM_HOUR_GROUP","meridiem","ampm","startAtPM","suffix","preamble","lowerText","TIME_MATCH","SPECIAL_YEAR_GROUP","TYPICAL_YEAR_GROUP","ERA_GROUP","toHankaku","moment","String","fromCharCode","alphaNum","token","charCodeAt","toZenkaku","secondMatch","firstMatch","isNaN","quarterOfYear","extend","MULTIPLIER_GROUP","MODIFIER_1_GROUP","MODIFIER_2_GROUP","multiplier","modifierFactor","total","dateFrom","dateTo","relative","startOf","dateTmp","endOf","patternString1","patternString2","DAY_GROUP_1","ZH_AM_PM_HOUR_GROUP_1","ZH_AM_PM_HOUR_GROUP_2","DAY_GROUP_3","ZH_AM_PM_HOUR_GROUP_3","ZHTimeExpressionParser","day1","day3","zhAMPMString1","zhAMPM1","zhAMPMString2","zhAMPM2","zhAMPMString3","zhAMPM3","endMoment","NOW_GROUP","TIME_GROUP_1","TIME_GROUP_2","TIME_GROUP_3","time1","timeString2","time2","timeString3","time3","NUMBER_GROUP","UNIT_GROUP","unit","unitAbbr","forwardDate","filteredResults","TIMEZONE_OFFSET_PATTERN","TIMEZONE_OFFSET_SIGN_GROUP","TIMEZONE_OFFSET_HOUR_OFFSET_GROUP","TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP","timezoneOffset","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","timezones","timezoneAbbr","toUpperCase","isMoreSpecific","moreSpecific","includesRelativeResult","referToSameDate","specificResult","nonSpecificResult","specificDate","nonSpecificDate","isWeekdayResult","mergeOptions","addedTypes","mergedOption","parsers","option","p","r","commonPostProcessing","strictOption","strictConfig","en","de","nl","pt","es","fr","ja","zh","casualOption","casual","unshift","en_GB","Chrono","refDate","Date","allResults","concat","sort","a","b","_options","_parser","_refiner","_result","parseDate"],"mappings":"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","file":"chrono.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 = 87);\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\nexports.NLMonthNameParser = require('./nl/NLMonthNameParser').Parser;\nexports.NLMonthNameLittleEndianParser = require('./nl/NLMonthNameLittleEndianParser').Parser;\nexports.NLSlashDateFormatParser = require('./nl/NLSlashDateFormatParser').Parser;\nexports.NLWeekdayParser = require('./nl/NLWeekdayParser').Parser;\nexports.NLTimeExpressionParser = require('./nl/NLTimeExpressionParser').Parser;\nexports.NLCasualDateParser = require('./nl/NLCasualDateParser').Parser;\nexports.NLCasualTimeParser = require('./nl/NLCasualTimeParser').Parser;\n","import dayjs from 'dayjs';\n\nexport class ParsedResult {\n\n constructor(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\n if(result.end){\n this.end = new ParsedComponents(result.end, result.ref);\n }\n }\n\n clone() {\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\n date() {\n return this.start.date();\n }\n\n hasPossibleDates() {\n return this.start.isPossibleDate() && (!this.end || this.end.isPossibleDate());\n }\n\n isOnlyWeekday() {\n return this.start.isOnlyWeekdayComponent();\n }\n\n isOnlyDayMonth() {\n return this.start.isOnlyDayMonthComponent();\n }\n}\n\nexport class ParsedComponents {\n\n constructor(components, ref) {\n this.knownValues = {};\n this.impliedValues = {};\n\n if (components) {\n for (let 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\n get(component) {\n if (component in this.knownValues) return this.knownValues[component];\n if (component in this.impliedValues) return this.impliedValues[component];\n }\n\n isCertain(component) {\n return component in this.knownValues;\n }\n\n imply(component, value) {\n if (component in this.knownValues) return;\n this.impliedValues[component] = value;\n }\n\n assign(component, value) {\n this.knownValues[component] = value;\n delete this.impliedValues[component];\n }\n\n clone() {\n const 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\n isOnlyWeekdayComponent() {\n return this.isCertain('weekday') && !this.isCertain('day') && !this.isCertain('month');\n }\n\n isOnlyDayMonthComponent() {\n return this.isCertain('day') && this.isCertain('month') && !this.isCertain('year');\n }\n\n isPossibleDate() {\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\n date() {\n const result = this.dayjs();\n return result.toDate();\n }\n\n dayjs() {\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\n moment() {\n // Keep for compatibility\n return this.dayjs();\n }\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){\"use strict\";var t=\"millisecond\",e=\"second\",n=\"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,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-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,D:\"date\",h:r,m:n,s:e,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,e,n){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$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 e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?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(e)}(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,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)<this.startOf(e)},d.isBefore=function(t,e){return this.endOf(e)<g(t)},d.$g=function(t,e,n){return D.u(t)?this[e]:this.set(n,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\",n)},d.second=function(t){return this.$g(t,\"$s\",e)},d.millisecond=function(e){return this.$g(e,\"$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,e){var n=D.w(h.$u?Date.UTC(h.$y,e,t):new Date(h.$y,e,t),h);return f?n:n.endOf(i)},$=function(t,e){return D.w(h.toDate()[t].apply(h.toDate(\"s\"),(f?[0,0,0,0]:[23,59,59,999]).slice(e)),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 n:return $(M+\"Seconds\",2);case e: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[n]=c+\"Minutes\",h[e]=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,e){return this.clone().$set(t,e)},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(e){var n=g(f);return D.w(n.date(n.date()+Math.round(e*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[n]=6e4,h[r]=36e5,h[e]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,e){return this.add(-1*t,e)},d.format=function(t){var e=this;if(!this.isValid())return\"Invalid Date\";var n=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(e,n))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,\"0\")},$=i.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?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:c(h,o),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 n.replace(f,function(t,e){return e||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[n]=m/6e4,c[e]=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,e){if(!t)return this.$L;var n=this.clone(),r=M(t,e,!0);return r&&(n.$L=r),n},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,e){return t(e,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\n// nl refiners\nexports.NLMergeDateRangeRefiner = require('./nl/NLMergeDateRangeRefiner').Refiner;\nexports.NLMergeDateTimeRefiner = require('./nl/NLMergeDateTimeRefiner').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?|h(?:r|rs|our|ours)?|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(/^h/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}","/*\n \n*/\nvar ParsedComponents = require('../../result').ParsedComponents;\nvar Refiner = require('../refiner').Refiner;\n\nvar PATTERN = new RegExp(\"^[ ]*(T|at|after|before|on|of|,|-)?[ ]*$\");\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}","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","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","/*\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","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","exports.WEEKDAY_OFFSET = {\n 'zondag': 0,\n 'zo': 0,\n 'zo.': 0,\n 'maandag': 1,\n 'ma': 1,\n 'ma.': 1,\n 'dinsdag': 2,\n 'di':2,\n 'di.':2,\n 'woensdag': 3,\n 'wo': 3,\n 'wo.': 3,\n 'donderdag': 4,\n 'do': 4,\n 'do.': 4,\n 'vrijdag': 5,\n 'vr': 5,\n 'vr.': 5,\n 'zaterdag': 6,\n 'za': 6,\n 'za.': 6\n};\n\nexports.WEEKDAY_PATTERN = '(?:'\n + Object.keys(exports.WEEKDAY_OFFSET).join('|').replace(/\\./g, '\\\\.')\n + ')';\n\nexports.MONTH_OFFSET = {\n 'januari': 1,\n 'jan': 1,\n 'jan.': 1,\n 'februari': 2,\n 'feb': 2,\n 'feb.': 2,\n 'maart': 3,\n 'mrt': 3,\n 'mrt.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'mei': 5,\n 'juni': 6,\n 'jun': 6,\n 'jun.': 6,\n 'juli': 7,\n 'jul': 7,\n 'jul.': 7,\n 'augustus': 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 '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 'een' : 1,\n 'één' : 1,\n 'twee' : 2,\n 'drie' : 3,\n 'vier' : 4,\n 'vijf' : 5,\n 'zes' : 6,\n 'zeven' : 7,\n 'acht' : 8,\n 'negen' : 9,\n 'tien' : 10,\n 'elf' : 11,\n 'twaalf' : 12\n};\nexports.INTEGER_WORDS_PATTERN = '(?:'\n + Object.keys(exports.INTEGER_WORDS).join('|')\n +')';\n\nexports.ORDINAL_WORDS = {\n 'eerste' : 1,\n 'tweede': 2,\n 'derde': 3,\n 'vierde': 4,\n 'vijfde': 5,\n 'zesde': 6,\n 'zevende': 7,\n 'achste': 8,\n 'negende': 9,\n 'tiende': 10,\n 'elfde': 11,\n 'twaalfde': 12,\n 'dertiende': 13,\n 'veertiende': 14,\n 'vijftiende': 15,\n 'zestiende': 16,\n 'zeventiende': 17,\n 'achttiende': 18,\n 'negentiende': 19,\n 'twintigste': 20,\n 'eenentwintigste': 21,\n 'tweeëntwintigste': 22,\n 'drieëntwintigste': 23,\n 'vierentwintigste': 24,\n 'vijfentwintigste': 25,\n 'zesentwintigste': 26,\n 'zevenentwintigste': 27,\n 'achtentwintigste': 28,\n 'negenentwintigste': 29,\n 'dertigste': 30,\n 'eenendertigste': 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]+|en(?:\\\\s*few)?|half)\\\\s*' +\n '(sec(?:onde?)?|min(?:uten)?s?|(?:uur|uren)?|weken?|dagen?|maanden?|jaren?)\\\\s*';\n\nvar TIME_UNIT_STRICT =\n '(?:[0-9]+?)\\\\s*' +\n '(?:seconden?|(?:minuut|minuten)|(?:uur|uren)|(?:dag|dagen))\\\\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.match(/half/)) {\n num = 0.5;\n } else {\n num = parseFloat(num);\n }\n\n if (match[2].match(/^(?:uur|uren)/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(/dag/i)) {\n fragments['d'] = num;\n } else if (match[2].match(/maand/i)) {\n fragments['month'] = num;\n } else if (match[2].match(/jaar/i)) {\n fragments['year'] = num;\n }\n\n return fragments;\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 '[5-9][0-9]' +\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 if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\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 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 const day = 1;\n const monthName = match[MONTH_NAME_GROUP];\n const month = util.MONTH_OFFSET[monthName.toLowerCase()];\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 if (result.text.match(/^\\w{3}$/)) {\n return false;\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 let 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|de|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 let 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 let 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 var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\r\n if(ampm == \"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(ampm == \"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\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 } else {\r\n var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == 1;\r\n if (startAtPM && result.start.get('hour') > hour) {\r\n // 10pm - 1 (am)\r\n result.end.imply('meridiem', 0);\r\n\r\n } else if (hour > 12) {\r\n result.end.imply('meridiem', 1);\r\n }\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 if (this.isStrictMode() && result.text.match(/^\\w+$/)) {\n return false;\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 let 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].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].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 The parser for parsing month name and year.\n\n EX.\n - januari\n - januari 2012\n - januari, 2012\n*/\nvar parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp('(^|\\\\D\\\\s+|[^\\\\w\\\\s])' +\n '('+ util.MONTH_PATTERN +')' +\n '\\\\s*' +\n '(?:' +\n '[,-]?\\\\s*([0-9]{4})(\\\\s*BE|n\\.Chr\\.|v\\.Chr\\.)?' +\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 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 const day = 1;\n const monthName = match[MONTH_NAME_GROUP];\n const month = util.MONTH_OFFSET[monthName.toLowerCase()];\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(/v\\.Chr\\./)) {\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 if (result.text.match(/^\\w{3}$/)) {\n return false;\n }\n\n result.tags['NLMonthNameParser'] = true;\n return result;\n }\n}\n","const parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:op\\\\s*?)?' +\n '(?:'+ '(' + util.WEEKDAY_PATTERN + ')' + '\\\\s*,?\\\\s*)?' +\n '([0-9]{1,2})\\.?' +\n '(?:\\\\s*(?:tot|\\\\-|\\\\–|tot en met|t\\\\/m)\\\\s*([0-9]{1,2})\\.?)?\\\\s*' +\n '(' + util.MONTH_PATTERN + ')' +\n '(?:' +\n '(?:-|\\/|,?\\\\s*)' +\n '((?:' +\n '[1-9][0-9]{0,3}\\\\s*(?:BE|n\\.Chr\\.|v\\.Chr\\.)|' +\n '[1-2][0-9]{3}|' +\n '[5-9][0-9]' +\n ')(?![^\\\\s]\\\\d))' +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\nvar WEEKDAY_GROUP = 2;\nvar DATE_GROUP = 3;\nvar DATE_TO_GROUP = 4;\nvar MONTH_NAME_GROUP = 5;\nvar YEAR_GROUP = 6;\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_GROUP];\n day = parseInt(day);\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 (/v\\.Chr\\./i.test(year)){\n // Before Christ\n year = year.replace(/v\\.Chr\\./i, '');\n year = -parseInt(year);\n } else if (/n\\.Chr\\./i.test(year)){\n year = year.replace(/n\\.Chr\\./i, '');\n year = parseInt(year);\n } else {\n year = parseInt(year);\n if (year < 100){\n if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\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 januari 2012'\n if (match[DATE_TO_GROUP]) {\n var endDate = parseInt(match[DATE_TO_GROUP]);\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n result.tags['NLMonthNameLittleEndianParser'] = true;\n return result;\n };\n};\n","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - dinsdag 11/3/2015\n - 11/3/2015\n - 11/3\n - dinsdag 11.mrt.15\n*/\nvar dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp(\n '(\\\\W|^)' +\n '(?:' +\n '(?:op\\\\s*?)?' +\n '(' + util.WEEKDAY_PATTERN + ')' +\n '\\\\s*\\\\,?\\\\s*' +\n '(?:de\\\\s*)?' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-1]{0,1}[0-9]{1}|' +\n util.MONTH_PATTERN +\n ')' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\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 let 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 let year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n let month = match[MONTH_GROUP];\n let day = match[DAY_GROUP];\n\n month = parseInt(month);\n if(!month) {\n month = util.MONTH_OFFSET[match[MONTH_GROUP].trim().toLowerCase()];\n }\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', util.WEEKDAY_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['NLSlashDateFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar DAYS_OFFSET = {\n 'zondag': 0, 'zo': 0,\n 'maandag': 1, 'ma': 1,\n 'dinsdag': 2, 'di': 2,\n 'woensdag': 3, 'wo': 3,\n 'donderdag': 4, 'do': 4,\n 'vrijdag': 5, 'vr': 5,\n 'zaterdag': 6, 'za': 6\n};\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:on\\\\s*?)?' +\n '(?:(deze|afgelopen|vorige|volgende|komende)\\\\s*(?:week)?\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(deze|afgelopen|vorige|volgende|komende)\\\\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 == 'afgelopen' || modifier == 'vorige') {\n startMoment =startMoment.day(offset - 7);\n startMomentFixed = true;\n } else if(modifier == 'volgende') {\n startMoment = startMoment.day(offset + 7);\n startMomentFixed = true;\n } else if(modifier == 'deze' || modifier == 'komende') {\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 NLWeekdayParser() {\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['NLWeekdayParser'] = true;\n\n return result;\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 \"(?:(?:om|van)\\\\s*)?\" +\n \"(\\\\d{1,4}|tussen de middag|middernachts?)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*uur)?\" +\n \"(?:\\\\s*(\\'s morgens|\\'s ochtends|in de ochtend|\\'s middags|in de middag|\\'s avonds|in de avond|\\'s nachts))?\" +\n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|tot|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(\\'s morgens|\\'s ochtends|in de ochtend|\\'s middags|in de middag|\\'s avonds|in de avond|\\'s 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 NLTimeExpressionParser() {\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['NLTimeExpressionParser'] = 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 (/tussen de middag/i.test(match[HOUR_GROUP])) {\n meridiem = 1;\n hour = 12;\n } else if (/middernachts?/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].toLowerCase();\n if (ampm === \"'s ochtends\" || ampm === 'in de ochtend' || ampm === \"'s morgens\") {\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].toLowerCase();\n if (ampm === '\\'s ochtends' || ampm === 'in de ochtend' || ampm === '\\'s morgens') {\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","var dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp(\n '(\\\\W|^)(' +\n 'nu|' +\n 'vroeg in de ochtend|'+\n '(?:van|deze)\\\\s*(morgen|ochtend|middag|avond)|' +\n '\\'s morgens|\\'s ochtends|tussen de middag|\\'s middags|\\'s avonds|'+\n '(?:deze|van)\\\\s*nacht|' +\n 'vandaag|' +\n '(?:over)?morgen(?:\\\\s*(ochtend|middag|avond|nacht))?|' +\n '(?:eer)?gister(?:\\\\s*(ochtend|middag|avond|nacht))?|' +\n 'afgelopen\\\\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 (/(?:van|deze)\\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 (/^overmorgen/.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 (/^gisteren/.test(lowerText)) {\n startMoment = startMoment.add(-1, 'day');\n } else if (/^eergisteren/.test(lowerText)) {\n startMoment = startMoment.add(-2, 'day');\n } else if (/afgelopen\\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 === 'nu') {\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 'vroeg in de ochtend':\n result.start.imply('hour', 6);\n break;\n case 'ochtend':\n case 'morgen':\n case '\\'s ochtends':\n case '\\'s morgends':\n result.start.imply('hour', 9);\n break;\n case 'tussen de middag':\n result.start.imply('hour', 12);\n break;\n case 'middag':\n case 'in de middag':\n case '\\'s middags':\n result.start.imply('hour', 15);\n result.start.imply('meridiem', 1);\n break;\n case 'avond':\n case \"'s avonds\":\n result.start.imply('hour', 18);\n result.start.imply('meridiem', 1);\n break;\n case 'nacht':\n case \"'s nachts\":\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['NLCasualDateParser'] = true;\n return result;\n }\n}\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)((deze)?\\s*('s morgens|'s ochtends|in de ochtend|'s middags|in de middag|'s avonds|in de avond|'s nachts|ochtend|tussen de middag|middag|avond|nacht))/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 case 'middag':\n case 'in de middag':\n case '\\'s middags':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 15);\n break;\n\n case 'avond':\n case 'in de avond':\n case '\\'s avonds':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 20);\n break;\n\n case 'middernacht':\n case 'nacht':\n case '\\'s nachts':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 0);\n break;\n\n case 'ochtend':\n case '\\s morgens':\n case '\\s ochtends':\n case 'in de ochtend':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 9);\n break;\n\n case 'tussen de middag':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 12);\n break;\n }\n\n result.tags['NLCasualTimeParser'] = 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['ENCasualTimeParser'] &&\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}","/*\n\n*/\nvar ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;\n\nexports.Refiner = function NLMergeDateRangeRefiner() {\n ENMergeDateRangeRefiner.call(this);\n\n this.pattern = function () {\n return /^\\s*(tot|t\\/m|tot en met|\\\\-)\\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|op|om|voor|na|van|,|-)\\\\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['NLMergeDateAndTimeRefiner'] = true;\n return dateResult;\n}\n\nexports.Refiner = function NLMergeDateTimeRefiner() {\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 if (isDateOnly(currResult) && isTimeOnly(prevResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n\n prevResult = mergeResult(text, currResult, prevResult);\n currResult = null;\n i += 1;\n mergedResult.push(prevResult);\n } else {\n mergedResult.push(prevResult);\n }\n\n }\n\n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n return mergedResult;\n }\n}\n","import * as parser from './parsers/parser';\nimport * as refiner from './refiners/refiner';\n\nexport function mergeOptions(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\nexport function commonPostProcessing() {\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\nexport function strictOption() {\n var strictConfig = {\n strict: true\n };\n\n return exports.mergeOptions([\n exports.en(strictConfig),\n exports.de(strictConfig),\n exports.nl(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\nexport function casualOption() {\n return exports.mergeOptions([\n exports.en.casual,\n // Some German abbriviate overlap with common English\n exports.de({ strict: true }),\n exports.nl,\n exports.pt,\n exports.es,\n exports.fr,\n exports.ja,\n exports.zh,\n exports.commonPostProcessing\n ]);\n}\n\n// -------------------------------------------------------------\n\nexport const 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\nde.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\nexport const nl = function(config) {\n return {\n parsers: [\n new parser.NLMonthNameLittleEndianParser(config),\n new parser.NLMonthNameParser(config),\n new parser.NLSlashDateFormatParser(config),\n new parser.NLTimeExpressionParser(config),\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n new refiner.NLMergeDateTimeRefiner(),\n new refiner.NLMergeDateRangeRefiner()\n ]\n }\n};\n\nnl.casual = function() {\n var option = exports.nl({\n strict: false\n });\n option.parsers.unshift(new parser.NLCasualDateParser());\n option.parsers.unshift(new parser.NLCasualTimeParser());\n option.parsers.unshift(new parser.NLWeekdayParser());\n return option;\n};\n\n\n\n// -------------------------------------------------------------\n\n\nexport const 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\nen.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\nexport const en_GB = function(config) {\n config = config || {};\n config.littleEndian = true;\n return exports.en(config);\n};\n\nen_GB.casual = function(config) {\n config = config || {};\n config.littleEndian = true;\n return exports.en.casual(config);\n};\n\n// -------------------------------------------------------------\n\nexport const 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\nja.casual = function() {\n var option = exports.ja();\n option.parsers.unshift(new parser.JPCasualDateParser());\n return option;\n};\n\n// -------------------------------------------------------------\n\n\nexport const 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\npt.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\nexport const 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\nes.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\nexport const 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\nfr.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\nexport const 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","export class Chrono {\n\n constructor(option) {\n option = option || exports.options.casualOption();\n this.parsers = new Object(option.parsers);\n this.refiners = new Object(option.refiners);\n }\n\n parse(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 parseDate(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}\n\nimport * as _options from './options';\nimport * as _parser from './parsers/parser';\nimport * as _refiner from './refiners/refiner';\nimport * as _result from './result';\n\nexport const options = _options;\nexport const parser = _parser;\nexport const refiner = _refiner;\n\nexport const Parser = parser.Parser;\nexport const Refiner = refiner.Refiner;\nexport const Filter = refiner.Filter;\n\nexport const ParsedResult = _result.ParsedResult;\nexport const ParsedComponents = _result.ParsedComponents;\n\nexport const strict = new Chrono( options.strictOption() );\nexport const casual = new Chrono( options.casualOption() );\n\nexport const en = new Chrono( options.mergeOptions([\n options.en.casual, options.commonPostProcessing]));\n\nexport const en_GB = new Chrono( options.mergeOptions([\n options.en_GB.casual, options.commonPostProcessing]));\n\nexport const de = new Chrono( options.mergeOptions([\n options.de.casual, options.en, options.commonPostProcessing]));\n\nexport const nl = new Chrono( options.mergeOptions([\n options.nl.casual, options.en, options.commonPostProcessing]));\n\nexport const pt = new Chrono( options.mergeOptions([\n options.pt.casual, options.en, options.commonPostProcessing]));\n\nexport const es = new Chrono( options.mergeOptions([\n options.es.casual, options.en, options.commonPostProcessing]));\n\nexport const fr = new Chrono( options.mergeOptions([\n options.fr.casual, options.en, options.commonPostProcessing]));\n\nexport const ja = new Chrono( options.mergeOptions([\n options.ja.casual, options.en, options.commonPostProcessing]));\n\n\nexport function parse () {\n return casual.parse.apply(casual, arguments);\n}\n\nexport function parseDate() {\n return casual.parseDate.apply(casual, arguments);\n}\n\n\n\n\n"],"sourceRoot":""}
|
|
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/refiners/en/ENMergeDateTimeRefiner.js","webpack://chrono/./src/parsers/en/ENWeekdayParser.js","webpack://chrono/./src/utils/ZH-Hant.js","webpack://chrono/./src/utils/DE.js","webpack://chrono/./src/refiners/en/ENMergeDateRangeRefiner.js","webpack://chrono/./src/utils/FR.js","webpack://chrono/./src/utils/NL.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/parsers/nl/NLMonthNameParser.js","webpack://chrono/./src/parsers/nl/NLMonthNameLittleEndianParser.js","webpack://chrono/./src/parsers/nl/NLSlashDateFormatParser.js","webpack://chrono/./src/parsers/nl/NLWeekdayParser.js","webpack://chrono/./src/parsers/nl/NLTimeExpressionParser.js","webpack://chrono/./src/parsers/nl/NLCasualDateParser.js","webpack://chrono/./src/parsers/nl/NLCasualTimeParser.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","webpack://chrono/./src/refiners/nl/NLMergeDateRangeRefiner.js","webpack://chrono/./src/refiners/nl/NLMergeDateTimeRefiner.js"],"names":["dayjs","require","ParsedResult","result","ref","index","text","tags","start","ParsedComponents","end","prototype","clone","JSON","parse","stringify","date","hasPossibleDates","isPossibleDate","isOnlyWeekday","isOnlyWeekdayComponent","isOnlyDayMonth","isOnlyDayMonthComponent","components","knownValues","impliedValues","key","imply","month","year","component","get","value","assign","isCertain","dateMoment","adjustTimezoneOffset","utcOffset","add","toDate","hour","minute","second","millisecond","currentTimezoneOffset","targetTimezoneOffset","undefined","moment","exports","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","NLMonthNameParser","NLMonthNameLittleEndianParser","NLSlashDateFormatParser","NLWeekdayParser","NLTimeExpressionParser","NLCasualDateParser","NLCasualTimeParser","Refiner","Filter","call","isValid","filteredResult","i","OverlapRemovalRefiner","ExtractTimezoneOffsetRefiner","ExtractTimezoneAbbrRefiner","ForwardDateRefiner","UnlikelyFormatFilter","ENMergeDateTimeRefiner","ENMergeDateRangeRefiner","ENPrioritizeSpecificDateRefiner","JPMergeDateRangeRefiner","FRMergeDateRangeRefiner","FRMergeDateTimeRefiner","DEMergeDateRangeRefiner","DEMergeDateTimeRefiner","NLMergeDateRangeRefiner","NLMergeDateTimeRefiner","WEEKDAY_OFFSET","MONTH_OFFSET","MONTH_PATTERN","Object","keys","join","replace","INTEGER_WORDS","INTEGER_WORDS_PATTERN","ORDINAL_WORDS","ORDINAL_WORDS_PATTERN","TIME_UNIT","TIME_UNIT_STRICT","PATTERN_TIME_UNIT","RegExp","TIME_UNIT_PATTERN","TIME_UNIT_STRICT_PATTERN","extractDateTimeUnitFragments","timeunitText","fragments","collectDateTimeFragment","num","toLowerCase","parseFloat","PATTERN","isDateOnly","isTimeOnly","isAbleToMerge","prevResult","curResult","textBetween","mergeDateTimeComponent","dateComponent","timeComponent","dateTimeComponent","mergeResult","dateResult","timeResult","beginDate","beginTime","beginDateTime","endDate","endTime","endDateTime","getTime","startIndex","min","endIndex","max","tag","mergedResult","currResult","DAYS_OFFSET","PREFIX_GROUP","WEEKDAY_GROUP","POSTFIX_GROUP","updateParsedComponent","offset","modifier","startMoment","startMomentFixed","refOffset","apply","arguments","substr","dayOfWeek","prefix","postfix","norm","NUMBER","zhStringToNumber","number","char","zhStringToYear","string","parseInt","result1","result2","begin","fromResult","toResult","timeKeys","fromMoment","toMoment","isBefore","isAfter","tmp","constructor","name","WEEKDAY_PATTERN","parser","Chrono","option","casualOption","parsers","refDate","Date","forwardDate","allResults","concat","sort","a","b","parseDate","strictOption","casual","en","mergeOptions","commonPostProcessing","en_GB","de","nl","pt","es","fr","ja","addedTypes","mergedOption","p","r","strictConfig","zh","unshift","littleEndian","YEAR_NUMBER_GROUP","MONTH_NUMBER_GROUP","DATE_NUMBER_GROUP","HOUR_NUMBER_GROUP","MINUTE_NUMBER_GROUP","SECOND_NUMBER_GROUP","MILLISECOND_NUMBER_GROUP","TZD_HOUR_OFFSET_GROUP","TZD_MINUTE_OFFSET_GROUP","minuteOffset","hourOffset","util","STRICT_PATTERN","MODIFIER_WORD_GROUP","MULTIPLIER_WORD_GROUP","RELATIVE_WORD_GROUP","DATE_GROUP","DATE_NUM_GROUP","DATE_TO_GROUP","DATE_TO_NUM_GROUP","MONTH_NAME_GROUP","YEAR_GROUP","trim","test","weekday","YEAR_BE_GROUP","YEAR_GROUP2","YEAR_BE_GROUP2","yearBE","monthName","OPENNING_GROUP","ENDING_GROUP","FIRST_NUMBERS_GROUP","SECOND_NUMBERS_GROUP","MONTH_GROUP","DAY_GROUP","indexOf","tday","argument","FIRST_REG_PATTERN","SECOND_REG_PATTERN","HOUR_GROUP","MINUTE_GROUP","SECOND_GROUP","MILLI_SECOND_GROUP","AM_PM_HOUR_GROUP","meridiem","ampm","startAtPM","suffix","preamble","lowerText","TIME_MATCH","SPECIAL_YEAR_GROUP","TYPICAL_YEAR_GROUP","ERA_GROUP","toHankaku","String","fromCharCode","alphaNum","token","charCodeAt","toZenkaku","secondMatch","firstMatch","isNaN","quarterOfYear","extend","MULTIPLIER_GROUP","MODIFIER_1_GROUP","MODIFIER_2_GROUP","multiplier","modifierFactor","total","dateFrom","dateTo","relative","startOf","dateTmp","endOf","patternString1","patternString2","DAY_GROUP_1","ZH_AM_PM_HOUR_GROUP_1","ZH_AM_PM_HOUR_GROUP_2","DAY_GROUP_3","ZH_AM_PM_HOUR_GROUP_3","ZHTimeExpressionParser","day1","day3","zhAMPMString1","zhAMPM1","zhAMPMString2","zhAMPM2","zhAMPMString3","zhAMPM3","endMoment","NOW_GROUP","TIME_GROUP_1","TIME_GROUP_2","TIME_GROUP_3","time1","timeString2","time2","timeString3","time3","NUMBER_GROUP","UNIT_GROUP","unit","unitAbbr","filteredResults","TIMEZONE_OFFSET_PATTERN","TIMEZONE_OFFSET_SIGN_GROUP","TIMEZONE_OFFSET_HOUR_OFFSET_GROUP","TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP","timezoneOffset","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","timezones","timezoneAbbr","toUpperCase","isMoreSpecific","moreSpecific","includesRelativeResult","referToSameDate","specificResult","nonSpecificResult","specificDate","nonSpecificDate","isWeekdayResult"],"mappings":"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","file":"chrono.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 = 12);\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 (let 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\nexports.NLMonthNameParser = require('./nl/NLMonthNameParser').Parser;\nexports.NLMonthNameLittleEndianParser = require('./nl/NLMonthNameLittleEndianParser').Parser;\nexports.NLSlashDateFormatParser = require('./nl/NLSlashDateFormatParser').Parser;\nexports.NLWeekdayParser = require('./nl/NLWeekdayParser').Parser;\nexports.NLTimeExpressionParser = require('./nl/NLTimeExpressionParser').Parser;\nexports.NLCasualDateParser = require('./nl/NLCasualDateParser').Parser;\nexports.NLCasualTimeParser = require('./nl/NLCasualTimeParser').Parser;\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){\"use strict\";var t=\"millisecond\",e=\"second\",n=\"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,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-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,D:\"date\",h:r,m:n,s:e,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,e,n){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$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 e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?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(e)}(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,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)<this.startOf(e)},d.isBefore=function(t,e){return this.endOf(e)<g(t)},d.$g=function(t,e,n){return D.u(t)?this[e]:this.set(n,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\",n)},d.second=function(t){return this.$g(t,\"$s\",e)},d.millisecond=function(e){return this.$g(e,\"$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,e){var n=D.w(h.$u?Date.UTC(h.$y,e,t):new Date(h.$y,e,t),h);return f?n:n.endOf(i)},$=function(t,e){return D.w(h.toDate()[t].apply(h.toDate(\"s\"),(f?[0,0,0,0]:[23,59,59,999]).slice(e)),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 n:return $(M+\"Seconds\",2);case e: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[n]=c+\"Minutes\",h[e]=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,e){return this.clone().$set(t,e)},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(e){var n=g(f);return D.w(n.date(n.date()+Math.round(e*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[n]=6e4,h[r]=36e5,h[e]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,e){return this.add(-1*t,e)},d.format=function(t){var e=this;if(!this.isValid())return\"Invalid Date\";var n=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(e,n))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,\"0\")},$=i.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?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:c(h,o),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 n.replace(f,function(t,e){return e||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[n]=m/6e4,c[e]=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,e){if(!t)return this.$L;var n=this.clone(),r=M(t,e,!0);return r&&(n.$L=r),n},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,e){return t(e,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\n// nl refiners\nexports.NLMergeDateRangeRefiner = require('./nl/NLMergeDateRangeRefiner').Refiner;\nexports.NLMergeDateTimeRefiner = require('./nl/NLMergeDateTimeRefiner').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?|h(?:r|rs|our|ours)?|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(/^h/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}","/*\n \n*/\nvar ParsedComponents = require('../../result').ParsedComponents;\nvar Refiner = require('../refiner').Refiner;\n\nvar PATTERN = new RegExp(\"^[ ]*(T|at|after|before|on|of|,|-)?[ ]*$\");\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}","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","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","/*\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","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","exports.WEEKDAY_OFFSET = {\n 'zondag': 0,\n 'zo': 0,\n 'zo.': 0,\n 'maandag': 1,\n 'ma': 1,\n 'ma.': 1,\n 'dinsdag': 2,\n 'di':2,\n 'di.':2,\n 'woensdag': 3,\n 'wo': 3,\n 'wo.': 3,\n 'donderdag': 4,\n 'do': 4,\n 'do.': 4,\n 'vrijdag': 5,\n 'vr': 5,\n 'vr.': 5,\n 'zaterdag': 6,\n 'za': 6,\n 'za.': 6\n};\n\nexports.WEEKDAY_PATTERN = '(?:'\n + Object.keys(exports.WEEKDAY_OFFSET).join('|').replace(/\\./g, '\\\\.')\n + ')';\n\nexports.MONTH_OFFSET = {\n 'januari': 1,\n 'jan': 1,\n 'jan.': 1,\n 'februari': 2,\n 'feb': 2,\n 'feb.': 2,\n 'maart': 3,\n 'mrt': 3,\n 'mrt.': 3,\n 'april': 4,\n 'apr': 4,\n 'apr.': 4,\n 'mei': 5,\n 'juni': 6,\n 'jun': 6,\n 'jun.': 6,\n 'juli': 7,\n 'jul': 7,\n 'jul.': 7,\n 'augustus': 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 '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 'een' : 1,\n 'één' : 1,\n 'twee' : 2,\n 'drie' : 3,\n 'vier' : 4,\n 'vijf' : 5,\n 'zes' : 6,\n 'zeven' : 7,\n 'acht' : 8,\n 'negen' : 9,\n 'tien' : 10,\n 'elf' : 11,\n 'twaalf' : 12\n};\nexports.INTEGER_WORDS_PATTERN = '(?:'\n + Object.keys(exports.INTEGER_WORDS).join('|')\n +')';\n\nexports.ORDINAL_WORDS = {\n 'eerste' : 1,\n 'tweede': 2,\n 'derde': 3,\n 'vierde': 4,\n 'vijfde': 5,\n 'zesde': 6,\n 'zevende': 7,\n 'achste': 8,\n 'negende': 9,\n 'tiende': 10,\n 'elfde': 11,\n 'twaalfde': 12,\n 'dertiende': 13,\n 'veertiende': 14,\n 'vijftiende': 15,\n 'zestiende': 16,\n 'zeventiende': 17,\n 'achttiende': 18,\n 'negentiende': 19,\n 'twintigste': 20,\n 'eenentwintigste': 21,\n 'tweeëntwintigste': 22,\n 'drieëntwintigste': 23,\n 'vierentwintigste': 24,\n 'vijfentwintigste': 25,\n 'zesentwintigste': 26,\n 'zevenentwintigste': 27,\n 'achtentwintigste': 28,\n 'negenentwintigste': 29,\n 'dertigste': 30,\n 'eenendertigste': 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]+|en(?:\\\\s*few)?|half)\\\\s*' +\n '(sec(?:onde?)?|min(?:uten)?s?|(?:uur|uren)?|weken?|dagen?|maanden?|jaren?)\\\\s*';\n\nvar TIME_UNIT_STRICT =\n '(?:[0-9]+?)\\\\s*' +\n '(?:seconden?|(?:minuut|minuten)|(?:uur|uren)|(?:dag|dagen))\\\\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.match(/half/)) {\n num = 0.5;\n } else {\n num = parseFloat(num);\n }\n\n if (match[2].match(/^(?:uur|uren)/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(/dag/i)) {\n fragments['d'] = num;\n } else if (match[2].match(/maand/i)) {\n fragments['month'] = num;\n } else if (match[2].match(/jaar/i)) {\n fragments['year'] = num;\n }\n\n return fragments;\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.nl = new Chrono( options.mergeOptions([\n options.nl.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.nl(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.nl,\n exports.pt,\n exports.es,\n exports.fr,\n exports.ja,\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\nexports.nl = function(config) {\n return {\n parsers: [\n new parser.NLMonthNameLittleEndianParser(config),\n new parser.NLMonthNameParser(config),\n new parser.NLSlashDateFormatParser(config),\n new parser.NLTimeExpressionParser(config),\n ],\n refiners: [\n new refiner.OverlapRemovalRefiner(),\n new refiner.ForwardDateRefiner(),\n new refiner.NLMergeDateTimeRefiner(),\n new refiner.NLMergeDateRangeRefiner()\n ]\n }\n};\n\nexports.nl.casual = function() {\n var option = exports.nl({\n strict: false\n });\n option.parsers.unshift(new parser.NLCasualDateParser());\n option.parsers.unshift(new parser.NLCasualTimeParser());\n option.parsers.unshift(new parser.NLWeekdayParser());\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","/*\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.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 (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.assign('year', date.year());\n result.start.assign('month', date.month() + 1);\n result.start.assign('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['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 '[5-9][0-9]' +\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 if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\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 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 const day = 1;\n const monthName = match[MONTH_NAME_GROUP];\n const month = util.MONTH_OFFSET[monthName.toLowerCase()];\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 if (result.text.match(/^\\w{3}$/)) {\n return false;\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 let 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|de|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 let 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 let 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 var ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();\r\n if(ampm == \"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(ampm == \"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\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 } else {\r\n var startAtPM = result.start.isCertain('meridiem') && result.start.get('meridiem') == 1;\r\n if (startAtPM && result.start.get('hour') > hour) {\r\n // 10pm - 1 (am)\r\n result.end.imply('meridiem', 0);\r\n\r\n } else if (hour > 12) {\r\n result.end.imply('meridiem', 1);\r\n }\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 if (this.isStrictMode() && result.text.match(/^\\w+$/)) {\n return false;\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 let 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].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].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 The parser for parsing month name and year.\n\n EX.\n - januari\n - januari 2012\n - januari, 2012\n*/\nvar parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp('(^|\\\\D\\\\s+|[^\\\\w\\\\s])' +\n '('+ util.MONTH_PATTERN +')' +\n '\\\\s*' +\n '(?:' +\n '[,-]?\\\\s*([0-9]{4})(\\\\s*BE|n\\.Chr\\.|v\\.Chr\\.)?' +\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 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 const day = 1;\n const monthName = match[MONTH_NAME_GROUP];\n const month = util.MONTH_OFFSET[monthName.toLowerCase()];\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(/v\\.Chr\\./)) {\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 if (result.text.match(/^\\w{3}$/)) {\n return false;\n }\n\n result.tags['NLMonthNameParser'] = true;\n return result;\n }\n}\n","const parser = require('../parser');\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:op\\\\s*?)?' +\n '(?:'+ '(' + util.WEEKDAY_PATTERN + ')' + '\\\\s*,?\\\\s*)?' +\n '([0-9]{1,2})\\.?' +\n '(?:\\\\s*(?:tot|\\\\-|\\\\–|tot en met|t\\\\/m)\\\\s*([0-9]{1,2})\\.?)?\\\\s*' +\n '(' + util.MONTH_PATTERN + ')' +\n '(?:' +\n '(?:-|\\/|,?\\\\s*)' +\n '((?:' +\n '[1-9][0-9]{0,3}\\\\s*(?:BE|n\\.Chr\\.|v\\.Chr\\.)|' +\n '[1-2][0-9]{3}|' +\n '[5-9][0-9]' +\n ')(?![^\\\\s]\\\\d))' +\n ')?' +\n '(?=\\\\W|$)', 'i'\n );\nvar WEEKDAY_GROUP = 2;\nvar DATE_GROUP = 3;\nvar DATE_TO_GROUP = 4;\nvar MONTH_NAME_GROUP = 5;\nvar YEAR_GROUP = 6;\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_GROUP];\n day = parseInt(day);\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 (/v\\.Chr\\./i.test(year)){\n // Before Christ\n year = year.replace(/v\\.Chr\\./i, '');\n year = -parseInt(year);\n } else if (/n\\.Chr\\./i.test(year)){\n year = year.replace(/n\\.Chr\\./i, '');\n year = parseInt(year);\n } else {\n year = parseInt(year);\n if (year < 100){\n if (year > 50) {\n year = year + 1900;\n } else {\n year = year + 2000;\n }\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 januari 2012'\n if (match[DATE_TO_GROUP]) {\n var endDate = parseInt(match[DATE_TO_GROUP]);\n result.end = result.start.clone();\n result.end.assign('day', endDate);\n }\n\n result.tags['NLMonthNameLittleEndianParser'] = true;\n return result;\n };\n};\n","/*\n Date format with slash \"/\" (also \"-\" and \".\") between numbers\n - dinsdag 11/3/2015\n - 11/3/2015\n - 11/3\n - dinsdag 11.mrt.15\n*/\nvar dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\nvar util = require('../../utils/NL');\n\nvar PATTERN = new RegExp(\n '(\\\\W|^)' +\n '(?:' +\n '(?:op\\\\s*?)?' +\n '(' + util.WEEKDAY_PATTERN + ')' +\n '\\\\s*\\\\,?\\\\s*' +\n '(?:de\\\\s*)?' +\n ')?' +\n '([0-3]{0,1}[0-9]{1})[\\\\/\\\\.\\\\-]([0-1]{0,1}[0-9]{1}|' +\n util.MONTH_PATTERN +\n ')' +\n '(?:' +\n '[\\\\/\\\\.\\\\-]' +\n '([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)' +\n ')?' +\n '(\\\\W|$)', 'i');\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 let 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 let year = match[YEAR_GROUP] || dayjs(ref).year() + '';\n let month = match[MONTH_GROUP];\n let day = match[DAY_GROUP];\n\n month = parseInt(month);\n if(!month) {\n month = util.MONTH_OFFSET[match[MONTH_GROUP].trim().toLowerCase()];\n }\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', util.WEEKDAY_OFFSET[match[WEEKDAY_GROUP].toLowerCase()]);\n }\n\n result.tags['NLSlashDateFormatParser'] = true;\n return result;\n };\n};\n","const dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar DAYS_OFFSET = {\n 'zondag': 0, 'zo': 0,\n 'maandag': 1, 'ma': 1,\n 'dinsdag': 2, 'di': 2,\n 'woensdag': 3, 'wo': 3,\n 'donderdag': 4, 'do': 4,\n 'vrijdag': 5, 'vr': 5,\n 'zaterdag': 6, 'za': 6\n};\n\nvar PATTERN = new RegExp('(\\\\W|^)' +\n '(?:(?:\\\\,|\\\\(|\\\\()\\\\s*)?' +\n '(?:on\\\\s*?)?' +\n '(?:(deze|afgelopen|vorige|volgende|komende)\\\\s*(?:week)?\\\\s*)?' +\n '(' + Object.keys(DAYS_OFFSET).join('|') + ')' +\n '(?:\\\\s*(?:\\\\,|\\\\)|\\\\)))?' +\n '(?:\\\\s*(deze|afgelopen|vorige|volgende|komende)\\\\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 == 'afgelopen' || modifier == 'vorige') {\n startMoment =startMoment.day(offset - 7);\n startMomentFixed = true;\n } else if(modifier == 'volgende') {\n startMoment = startMoment.day(offset + 7);\n startMomentFixed = true;\n } else if(modifier == 'deze' || modifier == 'komende') {\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 NLWeekdayParser() {\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['NLWeekdayParser'] = true;\n\n return result;\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 \"(?:(?:om|van)\\\\s*)?\" +\n \"(\\\\d{1,4}|tussen de middag|middernachts?)\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\:|\\\\:)(\\\\d{2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*uur)?\" +\n \"(?:\\\\s*(\\'s morgens|\\'s ochtends|in de ochtend|\\'s middags|in de middag|\\'s avonds|in de avond|\\'s nachts))?\" +\n \"(?=\\\\W|$)\", 'i');\n\n\nvar SECOND_REG_PATTERN = new RegExp(\"^\\\\s*\" +\n \"(\\\\-|\\\\–|\\\\~|\\\\〜|tot|\\\\?)\\\\s*\" +\n \"(\\\\d{1,4})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \"(?:\" +\n \"(?:\\\\.|\\\\:|\\\\:)(\\\\d{1,2})\" +\n \")?\" +\n \")?\" +\n \"(?:\\\\s*(\\'s morgens|\\'s ochtends|in de ochtend|\\'s middags|in de middag|\\'s avonds|in de avond|\\'s 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 NLTimeExpressionParser() {\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['NLTimeExpressionParser'] = 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 (/tussen de middag/i.test(match[HOUR_GROUP])) {\n meridiem = 1;\n hour = 12;\n } else if (/middernachts?/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].toLowerCase();\n if (ampm === \"'s ochtends\" || ampm === 'in de ochtend' || ampm === \"'s morgens\") {\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].toLowerCase();\n if (ampm === '\\'s ochtends' || ampm === 'in de ochtend' || ampm === '\\'s morgens') {\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","var dayjs = require('dayjs');\nvar Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = new RegExp(\n '(\\\\W|^)(' +\n 'nu|' +\n 'vroeg in de ochtend|'+\n '(?:van|deze)\\\\s*(morgen|ochtend|middag|avond)|' +\n '\\'s morgens|\\'s ochtends|tussen de middag|\\'s middags|\\'s avonds|'+\n '(?:deze|van)\\\\s*nacht|' +\n 'vandaag|' +\n '(?:over)?morgen(?:\\\\s*(ochtend|middag|avond|nacht))?|' +\n '(?:eer)?gister(?:\\\\s*(ochtend|middag|avond|nacht))?|' +\n 'afgelopen\\\\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 (/(?:van|deze)\\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 (/^overmorgen/.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 (/^gisteren/.test(lowerText)) {\n startMoment = startMoment.add(-1, 'day');\n } else if (/^eergisteren/.test(lowerText)) {\n startMoment = startMoment.add(-2, 'day');\n } else if (/afgelopen\\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 === 'nu') {\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 'vroeg in de ochtend':\n result.start.imply('hour', 6);\n break;\n case 'ochtend':\n case 'morgen':\n case '\\'s ochtends':\n case '\\'s morgends':\n result.start.imply('hour', 9);\n break;\n case 'tussen de middag':\n result.start.imply('hour', 12);\n break;\n case 'middag':\n case 'in de middag':\n case '\\'s middags':\n result.start.imply('hour', 15);\n result.start.imply('meridiem', 1);\n break;\n case 'avond':\n case \"'s avonds\":\n result.start.imply('hour', 18);\n result.start.imply('meridiem', 1);\n break;\n case 'nacht':\n case \"'s nachts\":\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['NLCasualDateParser'] = true;\n return result;\n }\n}\n","var Parser = require('../parser').Parser;\nvar ParsedResult = require('../../result').ParsedResult;\n\nvar PATTERN = /(\\W|^)((deze)?\\s*('s morgens|'s ochtends|in de ochtend|'s middags|in de middag|'s avonds|in de avond|'s nachts|ochtend|tussen de middag|middag|avond|nacht))/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 case 'middag':\n case 'in de middag':\n case '\\'s middags':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 15);\n break;\n\n case 'avond':\n case 'in de avond':\n case '\\'s avonds':\n result.start.imply('meridiem', 1);\n result.start.imply('hour', 20);\n break;\n\n case 'middernacht':\n case 'nacht':\n case '\\'s nachts':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 0);\n break;\n\n case 'ochtend':\n case '\\s morgens':\n case '\\s ochtends':\n case 'in de ochtend':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 9);\n break;\n\n case 'tussen de middag':\n result.start.imply('meridiem', 0);\n result.start.imply('hour', 12);\n break;\n }\n\n result.tags['NLCasualTimeParser'] = 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['ENCasualTimeParser'] &&\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}","/*\n\n*/\nvar ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;\n\nexports.Refiner = function NLMergeDateRangeRefiner() {\n ENMergeDateRangeRefiner.call(this);\n\n this.pattern = function () {\n return /^\\s*(tot|t\\/m|tot en met|\\\\-)\\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|op|om|voor|na|van|,|-)\\\\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['NLMergeDateAndTimeRefiner'] = true;\n return dateResult;\n}\n\nexports.Refiner = function NLMergeDateTimeRefiner() {\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 if (isDateOnly(currResult) && isTimeOnly(prevResult)\n && isAbleToMerge(text, prevResult, currResult)) {\n\n prevResult = mergeResult(text, currResult, prevResult);\n currResult = null;\n i += 1;\n mergedResult.push(prevResult);\n } else {\n mergedResult.push(prevResult);\n }\n\n }\n\n if (currResult != null) {\n mergedResult.push(currResult);\n }\n\n return mergedResult;\n }\n}\n"],"sourceRoot":""}
|