UNPKG

edtfy

Version:

Javascript date parser, transforms user input into the edtf format.

91 lines (83 loc) 3.44 kB
(function() { var locale = 'en'; var parser = require('./tmp/edtfy.js'); var fr = require('./locales/fr'); var en = require('./locales/en'); var i18n = function(string, localeData) { localeData.months.forEach(function(month, i){ i++; i = i >9 ? i : '0' + i; string = string.replace(new RegExp('\\b' + month + '\\b', 'g'), 'M' + i); }); localeData.seasons.forEach(function(season, i){ i++; i = '2' + i; string = string.replace(new RegExp('\\b' + season + '\\b', 'g'), 'S' + i); }); string = string.replace(new RegExp('\\b' + localeData.century + '\\b', 'g'), 'C'); string = string.replace(new RegExp('\\b' + localeData.around + '\\b', 'g'), '~'); string = string.replace(new RegExp('\\b' + localeData.between1 + '\\b', 'g'), 'B1'); string = string.replace(new RegExp('\\b' + localeData.between2 + '\\b', 'g'), 'B2'); string = string.replace(new RegExp('\\b' + localeData.and + '\\b', 'g'), 'A'); string = string.replace(new RegExp('\\b' + localeData.or + '\\b', 'g'), 'O'); string = string.replace(new RegExp('\\b' + localeData.unknown + '\\b', 'g'), 'U'); string = string.replace(new RegExp('\\b' + localeData.open + '\\b', 'g'), 'OP'); string = string.replace(new RegExp(' ?(' + localeData.negative + ')\\b', 'g'), ' BCE'); string = string.replace(new RegExp(' ?(' + localeData.positive + ')\\b', 'g'), ''); string = string.replace(new RegExp('\\b' + localeData.before, 'g'), 'BF '); string = string.replace(new RegExp('\\b' + localeData.after, 'g'), 'AF '); string = string.replace(new RegExp('\\b' + localeData.days + '\\b', 'g'), ''); return string; }; module.exports = function(string, options) { options = options || {}; options.locale = options.locale || locale; var localeData = options.locale === 'en' ? en : fr; string = string.trim() .toLowerCase() .replace(/[,.]/g, ' ') .replace(/ +/g, ' ') .replace(/–/g, '-') // fr .replace(/[àáâãäå]/g,"a") .replace(/ç/g,"c") .replace(/[èéêë]/g,"e") .replace(/[ìíîï]/g,"i") .replace(/[òóôõö]/g,"o") .replace(/[ùúûü]/g,"u") .replace(/[ýÿ]/g,"y") .replace(/\ble\b/g, '').replace(/\ben\b\s*(\d)/g, '$1').replace(/\bl'\b/g, '').replace(/\bl'an\b/g, '') .replace(/(\d+)\s?eme\b/g, '$1').replace(/(\d+)\s?er\b/g, '$1').replace(/(\d+)\s?e\b/g, '$1') // en .replace(/\bthe\b/g, '').replace(/\bin\b/g, '') .replace(/(\d+)\s?st\b/g, '$1').replace(/(\d+)\s?nd\b/g, '$1').replace(/(\d+)\s?rd\b/g, '$1').replace(/(\d+)\s?th\b/g, '$1') .replace(/ +/g, ' '); string = i18n(string, localeData).trim() // fr .replace(/([ivxlcdm]+)\s?eme C/g, '$1 C').replace(/([ivxlcdm]+)\s?er C/g, '$1 C').replace(/([ivxlcdm]+)\s?e C/g, '$1 C') // en .replace(/([ivxlcdm]+)\s?st C/g, '$1 C').replace(/([ivxlcdm]+)\s?nd C/g, '$1 C').replace(/([ivxlcdm]+)\s?rd C/g, '$1 C').replace(/([ivxlcdm]+)\s?th C/g, '$1 C'); var result; // we need this one because of > and < in '< 1988' and '<1988' string = string.replace(/ +/g, ' '); localeData.format.forEach(function(format, i) { try { if (!result) { result = parser.parse(string, {format: format}); } } catch (e) { if (i === localeData.format.length - 1) { throw e; } } }); return result; } module.exports.locale = function(newLocale) { if (newLocale) { locale = newLocale; } else { return locale; } } })();