chrono-node 1.4.8 → 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.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://chrono/webpack/universalModuleDefinition","webpack://chrono/webpack/bootstrap","webpack://chrono/./src/result.js","webpack://chrono/./src/parsers/parser.js","webpack://chrono/./node_modules/dayjs/dayjs.min.js","webpack://chrono/./src/refiners/refiner.js","webpack://chrono/./src/utils/EN.js","webpack://chrono/./src/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":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","dayjs","require","ParsedResult","result","ref","index","text","tags","start","ParsedComponents","end","components","knownValues","impliedValues","imply","date","month","year","clone","JSON","parse","stringify","hasPossibleDates","isPossibleDate","isOnlyWeekday","isOnlyWeekdayComponent","isOnlyDayMonth","isOnlyDayMonthComponent","component","assign","isCertain","dateMoment","adjustTimezoneOffset","utcOffset","add","toDate","currentTimezoneOffset","hour","minute","second","millisecond","undefined","moment","Parser","config","strictMode","strict","isStrictMode","pattern","extract","match","opt","execute","results","regex","remainingText","exec","length","substring","push","refiners","forEach","refiner","refine","options","findYearClosestToRef","day","refMoment","nextYear","lastYear","Math","abs","diff","ENISOFormatParser","ENDeadlineFormatParser","ENRelativeDateFormatParser","ENMonthNameLittleEndianParser","ENMonthNameMiddleEndianParser","ENMonthNameParser","ENSlashDateFormatParser","ENSlashDateFormatStartWithYearParser","ENSlashMonthFormatParser","ENTimeAgoFormatParser","ENTimeExpressionParser","ENTimeLaterFormatParser","ENWeekdayParser","ENCasualDateParser","ENCasualTimeParser","JPStandardParser","JPCasualDateParser","PTCasualDateParser","PTDeadlineFormatParser","PTMonthNameLittleEndianParser","PTSlashDateFormatParser","PTTimeAgoFormatParser","PTTimeExpressionParser","PTWeekdayParser","ESCasualDateParser","ESDeadlineFormatParser","ESTimeAgoFormatParser","ESTimeExpressionParser","ESWeekdayParser","ESMonthNameLittleEndianParser","ESSlashDateFormatParser","FRCasualDateParser","FRDeadlineFormatParser","FRMonthNameLittleEndianParser","FRSlashDateFormatParser","FRTimeAgoFormatParser","FRTimeExpressionParser","FRWeekdayParser","FRRelativeDateFormatParser","ZHHantDateParser","ZHHantWeekdayParser","ZHHantTimeExpressionParser","ZHHantCasualDateParser","ZHHantDeadlineFormatParser","DEDeadlineFormatParser","DEMonthNameLittleEndianParser","DEMonthNameParser","DESlashDateFormatParser","DETimeAgoFormatParser","DETimeExpressionParser","DEWeekdayParser","DECasualDateParser","NLMonthNameParser","NLMonthNameLittleEndianParser","NLSlashDateFormatParser","NLWeekdayParser","NLTimeExpressionParser","NLCasualDateParser","NLCasualTimeParser","e","u","a","h","f","String","Array","join","z","floor","Number","ceil","M","y","w","D","ms","Q","toLowerCase","replace","$","weekdays","split","months","v","g","args","arguments","locale","$L","utc","$u","$offset","$d","Date","NaN","test","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","apply","slice","$locale","weekStart","$set","min","daysInMonth","round","subtract","format","substr","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","toJSON","toISOString","toUTCString","extend","isDayjs","en","Ls","Refiner","Filter","filteredResult","OverlapRemovalRefiner","ExtractTimezoneOffsetRefiner","ExtractTimezoneAbbrRefiner","ForwardDateRefiner","UnlikelyFormatFilter","ENMergeDateTimeRefiner","ENMergeDateRangeRefiner","ENPrioritizeSpecificDateRefiner","JPMergeDateRangeRefiner","FRMergeDateRangeRefiner","FRMergeDateTimeRefiner","DEMergeDateRangeRefiner","DEMergeDateTimeRefiner","NLMergeDateRangeRefiner","NLMergeDateTimeRefiner","WEEKDAY_OFFSET","MONTH_OFFSET","MONTH_PATTERN","keys","INTEGER_WORDS","INTEGER_WORDS_PATTERN","ORDINAL_WORDS","ORDINAL_WORDS_PATTERN","TIME_UNIT","PATTERN_TIME_UNIT","RegExp","collectDateTimeFragment","fragments","num","parseFloat","TIME_UNIT_PATTERN","TIME_UNIT_STRICT_PATTERN","extractDateTimeUnitFragments","timeunitText","PATTERN","isDateOnly","isTimeOnly","isAbleToMerge","prevResult","curResult","mergeDateTimeComponent","dateComponent","timeComponent","dateTimeComponent","mergeResult","dateResult","timeResult","beginDate","beginTime","beginDateTime","endDate","endTime","endDateTime","startIndex","endIndex","max","tag","mergedResult","currResult","DAYS_OFFSET","updateParsedComponent","offset","modifier","startMoment","startMomentFixed","refOffset","dayOfWeek","prefix","postfix","norm","NUMBER","zhStringToNumber","number","char","zhStringToYear","string","parseInt","result1","result2","begin","fromResult","toResult","fromMoment","toMoment","tmp","constructor","WEEKDAY_PATTERN","parser","Chrono","option","casualOption","parsers","refDate","forwardDate","allResults","concat","sort","b","parseDate","strictOption","casual","mergeOptions","commonPostProcessing","en_GB","de","nl","pt","es","fr","ja","addedTypes","mergedOption","strictConfig","zh","unshift","littleEndian","minuteOffset","hourOffset","util","STRICT_PATTERN","trim","weekday","yearBE","monthName","MONTH_GROUP","DAY_GROUP","indexOf","tday","argument","FIRST_REG_PATTERN","SECOND_REG_PATTERN","ampm","suffix","preamble","lowerText","TIME_MATCH","toHankaku","fromCharCode","alphaNum","token","charCodeAt","toZenkaku","secondMatch","firstMatch","isNaN","quarterOfYear","multiplier","modifierFactor","total","dateFrom","dateTo","relative","dateTmp","quarter","patternString1","patternString2","ZHTimeExpressionParser","day1","day3","zhAMPM1","zhAMPM2","zhAMPM3","endMoment","time1","time2","timeString3","time3","unitAbbr","filteredResults","TIMEZONE_OFFSET_PATTERN","timezoneOffset","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","timezones","timezoneAbbr","toUpperCase","isMoreSpecific","moreSpecific","textBetween","includesRelativeResult","referToSameDate","specificResult","nonSpecificResult","isWeekdayResult"],"mappings":"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AM,IAAI,KAAO,EAAE,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,MAAQ,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,EAAE,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,GAAG,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,GAAG,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,EAAE,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,IA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","file":"chrono.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"chrono\"] = factory();\n\telse\n\t\troot[\"chrono\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 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.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"],"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":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","dayjs","require","ParsedResult","result","ref","index","text","tags","start","ParsedComponents","end","components","knownValues","impliedValues","imply","date","month","year","clone","JSON","parse","stringify","hasPossibleDates","isPossibleDate","isOnlyWeekday","isOnlyWeekdayComponent","isOnlyDayMonth","isOnlyDayMonthComponent","component","assign","isCertain","dateMoment","adjustTimezoneOffset","utcOffset","add","toDate","currentTimezoneOffset","hour","minute","second","millisecond","undefined","moment","Parser","config","strictMode","strict","isStrictMode","pattern","extract","match","opt","execute","results","regex","remainingText","exec","length","substring","push","refiners","forEach","refiner","refine","options","findYearClosestToRef","day","refMoment","nextYear","lastYear","Math","abs","diff","ENISOFormatParser","ENDeadlineFormatParser","ENRelativeDateFormatParser","ENMonthNameLittleEndianParser","ENMonthNameMiddleEndianParser","ENMonthNameParser","ENSlashDateFormatParser","ENSlashDateFormatStartWithYearParser","ENSlashMonthFormatParser","ENTimeAgoFormatParser","ENTimeExpressionParser","ENTimeLaterFormatParser","ENWeekdayParser","ENCasualDateParser","ENCasualTimeParser","JPStandardParser","JPCasualDateParser","PTCasualDateParser","PTDeadlineFormatParser","PTMonthNameLittleEndianParser","PTSlashDateFormatParser","PTTimeAgoFormatParser","PTTimeExpressionParser","PTWeekdayParser","ESCasualDateParser","ESDeadlineFormatParser","ESTimeAgoFormatParser","ESTimeExpressionParser","ESWeekdayParser","ESMonthNameLittleEndianParser","ESSlashDateFormatParser","FRCasualDateParser","FRDeadlineFormatParser","FRMonthNameLittleEndianParser","FRSlashDateFormatParser","FRTimeAgoFormatParser","FRTimeExpressionParser","FRWeekdayParser","FRRelativeDateFormatParser","ZHHantDateParser","ZHHantWeekdayParser","ZHHantTimeExpressionParser","ZHHantCasualDateParser","ZHHantDeadlineFormatParser","DEDeadlineFormatParser","DEMonthNameLittleEndianParser","DEMonthNameParser","DESlashDateFormatParser","DETimeAgoFormatParser","DETimeExpressionParser","DEWeekdayParser","DECasualDateParser","NLMonthNameParser","NLMonthNameLittleEndianParser","NLSlashDateFormatParser","NLWeekdayParser","NLTimeExpressionParser","NLCasualDateParser","NLCasualTimeParser","e","u","a","h","f","String","Array","join","z","floor","Number","ceil","M","y","w","D","ms","Q","toLowerCase","replace","$","weekdays","split","months","v","g","args","arguments","locale","$L","utc","$u","$offset","$d","Date","NaN","test","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","apply","slice","$locale","weekStart","$set","min","daysInMonth","round","subtract","format","substr","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","toJSON","toISOString","toUTCString","extend","isDayjs","en","Ls","Refiner","Filter","filteredResult","OverlapRemovalRefiner","ExtractTimezoneOffsetRefiner","ExtractTimezoneAbbrRefiner","ForwardDateRefiner","UnlikelyFormatFilter","ENMergeDateTimeRefiner","ENMergeDateRangeRefiner","ENPrioritizeSpecificDateRefiner","JPMergeDateRangeRefiner","FRMergeDateRangeRefiner","FRMergeDateTimeRefiner","DEMergeDateRangeRefiner","DEMergeDateTimeRefiner","NLMergeDateRangeRefiner","NLMergeDateTimeRefiner","WEEKDAY_OFFSET","MONTH_OFFSET","MONTH_PATTERN","keys","INTEGER_WORDS","INTEGER_WORDS_PATTERN","ORDINAL_WORDS","ORDINAL_WORDS_PATTERN","TIME_UNIT","PATTERN_TIME_UNIT","RegExp","collectDateTimeFragment","fragments","num","parseFloat","TIME_UNIT_PATTERN","TIME_UNIT_STRICT_PATTERN","extractDateTimeUnitFragments","timeunitText","PATTERN","isDateOnly","isTimeOnly","isAbleToMerge","prevResult","curResult","mergeDateTimeComponent","dateComponent","timeComponent","dateTimeComponent","mergeResult","dateResult","timeResult","beginDate","beginTime","beginDateTime","endDate","endTime","endDateTime","startIndex","endIndex","max","tag","mergedResult","currResult","DAYS_OFFSET","updateParsedComponent","offset","modifier","startMoment","startMomentFixed","refOffset","dayOfWeek","prefix","postfix","norm","NUMBER","zhStringToNumber","number","char","zhStringToYear","string","parseInt","result1","result2","begin","fromResult","toResult","fromMoment","toMoment","tmp","constructor","WEEKDAY_PATTERN","parser","Chrono","option","casualOption","parsers","refDate","forwardDate","allResults","concat","sort","b","parseDate","strictOption","casual","mergeOptions","commonPostProcessing","en_GB","de","nl","pt","es","fr","ja","addedTypes","mergedOption","strictConfig","zh","unshift","littleEndian","minuteOffset","hourOffset","util","STRICT_PATTERN","trim","weekday","yearBE","monthName","MONTH_GROUP","DAY_GROUP","indexOf","tday","argument","FIRST_REG_PATTERN","SECOND_REG_PATTERN","ampm","suffix","preamble","lowerText","TIME_MATCH","toHankaku","fromCharCode","alphaNum","token","charCodeAt","toZenkaku","secondMatch","firstMatch","isNaN","quarterOfYear","multiplier","modifierFactor","total","dateFrom","dateTo","relative","dateTmp","quarter","patternString1","patternString2","ZHTimeExpressionParser","day1","day3","zhAMPM1","zhAMPM2","zhAMPM3","endMoment","time1","time2","timeString3","time3","unitAbbr","filteredResults","TIMEZONE_OFFSET_PATTERN","timezoneOffset","TIMEZONE_NAME_PATTERN","DEFAULT_TIMEZONE_ABBR_MAP","timezones","timezoneAbbr","toUpperCase","isMoreSpecific","moreSpecific","textBetween","includesRelativeResult","referToSameDate","specificResult","nonSpecificResult","isWeekdayResult"],"mappings":"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O,IAAI,IAAM,IAAI,KAAO,EAAE,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,MAAQ,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,EAAE,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,GAAG,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,GAAG,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,GAAG,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,MAAQ,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,KAAO,IAAI,MAAQ,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO,IAAI,IAAM,EAAE,MAAQ,IAAI,KAAO,IAAI,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,KAA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","file":"chrono.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"chrono\"] = factory();\n\telse\n\t\troot[\"chrono\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 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":""}