chrono-node
Advanced tools
Comparing version 0.1.8 to 0.1.10
@@ -26,6 +26,14 @@ // chrono.js | ||
chrono.parse = function(text, referrenceDate) { | ||
chrono.parse = function(text, referrenceDate, option) { | ||
var results = this.integratedParse(text, referrenceDate); | ||
var results = this.integratedRefine(text, results); | ||
option = option || {} | ||
if(typeof(referrenceDate) === 'string'){ | ||
var _ref = moment(referrenceDate).zone(referrenceDate); | ||
option.timezoneOffset = _ref.zone(); | ||
referrenceDate = _ref.toDate(); | ||
} | ||
var results = this.integratedParse(text, referrenceDate, option); | ||
var results = this.integratedRefine(text, results, option); | ||
@@ -45,3 +53,3 @@ return results; | ||
//Browser Code | ||
var moment = moment || window.moment; | ||
moment = moment || window.moment; | ||
window.chrono = chrono; | ||
@@ -51,4 +59,4 @@ } | ||
//Node JS | ||
if(typeof moment == 'undefined') eval("var moment = require('./moment');"); | ||
var fs = require('fs'); | ||
var moment = require('./moment'); | ||
@@ -55,0 +63,0 @@ function loadModuleDirs(dir){ |
@@ -9,5 +9,5 @@ { | ||
}, | ||
"version": "0.1.8", | ||
"version": "0.1.10", | ||
"directories": { | ||
"improvers": "./improvers", | ||
"refiners": "./refiners", | ||
"parsers": "./parsers", | ||
@@ -14,0 +14,0 @@ "test-nodeunit": "./test-nodeunit", |
/* | ||
*/ | ||
(function () { | ||
if(typeof chrono == 'undefined') | ||
throw 'Cannot find the chrono main module'; | ||
var PATTERN = /([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4}|[0-9]{2})(\W|$)/i; | ||
/** | ||
@@ -19,14 +19,14 @@ * InternationalStandartParser - Create a parser object | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
* @return { CNParser } | ||
*/ | ||
function DEAllNumericFormParser(text, ref, opt){ | ||
opt = opt || {}; | ||
ref = ref || new Date(); | ||
var parser = chrono.Parser(text, ref, opt); | ||
parser.pattern = function() { return PATTERN; } | ||
parser.extract = function(text,index){ | ||
parser.extract = function(text,index){ | ||
var matchedTokens = text.substr(index).match(PATTERN); | ||
@@ -40,3 +40,3 @@ if(matchedTokens == null){ | ||
text = matchedTokens[0].substr(0, matchedTokens[0].length - matchedTokens[4].length); | ||
var days = parseInt(matchedTokens[1]); | ||
@@ -46,7 +46,7 @@ var months = parseInt(matchedTokens[2]) - 1; //JS month | ||
if(years < 100){ | ||
if(years < 100){ | ||
if(years > 50) years = years + 1900; //01 - 20 | ||
else years = years + 2000; | ||
} | ||
var date = moment([years, months, days]); | ||
@@ -56,6 +56,5 @@ | ||
if(date.date() != days || date.month() != months || date.year() != years){ | ||
console.log('out') | ||
return null; | ||
} | ||
} | ||
return new chrono.ParseResult({ | ||
@@ -73,8 +72,7 @@ referenceDate:ref, | ||
}; | ||
return parser; | ||
} | ||
chrono.parsers.DEAllNumericFormParser = DEAllNumericFormParser; | ||
})(); | ||
@@ -16,11 +16,2 @@ /* | ||
/** | ||
* DayOfWeekParser - Create a parser object | ||
* | ||
* @param { String } text - Orginal text to be parsed | ||
* @param { Date, Optional } ref - Referenced date | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
*/ | ||
function DayOfWeekParser(text, ref, opt){ | ||
@@ -27,0 +18,0 @@ |
@@ -13,10 +13,2 @@ /* | ||
/** | ||
* GeneralDateParser - Create a parser object | ||
* | ||
* @param { String } text - Orginal text to be parsed | ||
* @param { Date, Optional } ref - Referenced date | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
*/ | ||
function GeneralDateParser(text, ref, opt){ | ||
@@ -42,19 +34,23 @@ | ||
var ref_moment = moment(ref); | ||
if(opt.timezoneOffset !== undefined) | ||
ref_moment = ref_moment.zone(opt.timezoneOffset) | ||
var date = null; | ||
var lowercase_text = text.toLowerCase(); | ||
if(lowercase_text == 'today' || lowercase_text == 'tonight'){ | ||
date = moment(ref).clone(); | ||
date = ref_moment.clone(); | ||
} | ||
else if(lowercase_text == 'tomorrow'){ | ||
if(moment(ref).hour() < 4) date = moment(ref).clone().hour(6); | ||
else date = moment(ref).clone().add('d',1); | ||
if(ref_moment.hour() < 4) date = ref_moment.clone().hour(6); | ||
else date = ref_moment.clone().add('d',1); | ||
} | ||
else if(lowercase_text == 'yesterday') | ||
date = moment(ref).clone().add('d',-1); | ||
date = ref_moment.clone().add('d',-1); | ||
else if(lowercase_text.match('last')) | ||
date = moment(ref).clone().add('d',-1); | ||
date = ref_moment.clone().add('d',-1); | ||
else if(lowercase_text.match('ago')){ | ||
var days_ago = matchedTokens[2]; | ||
days_ago = parseInt(days_ago); | ||
date = moment(ref).clone().add('d',-days_ago); | ||
date = ref_moment.clone().add('d',-days_ago); | ||
}else{ | ||
@@ -67,3 +63,3 @@ if(full_text.charAt(index-1).match(/\d/)) return null; | ||
impliedComponents = ['year', 'month', 'day']; | ||
date = moment(ref).clone(); | ||
date = ref_moment.clone(); | ||
text = ''; | ||
@@ -73,3 +69,3 @@ } | ||
var result = new chrono.ParseResult({ | ||
referenceDate:ref, | ||
referenceDate:ref_moment.toDate(), | ||
text:text, | ||
@@ -76,0 +72,0 @@ index:index, |
@@ -13,10 +13,2 @@ /* | ||
/** | ||
* InternationalStandartParser - Create a parser object | ||
* | ||
* @param { String } text - Orginal text to be parsed | ||
* @param { Date, Optional } ref - Referenced date | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
*/ | ||
function InternationalStandardParser(text, ref, opt){ | ||
@@ -23,0 +15,0 @@ |
@@ -14,3 +14,3 @@ /* | ||
var regPattern = /(\W|^)((Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s*,?\s*)?([0-9]{1,2})(st|nd|rd|th)?(\s*(to|\-|\s)\s*([0-9]{1,2})(st|nd|rd|th)?)?\s*(January|Jan|February|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec)((\s*[0-9]{2,4})(\s*BE)?)?(\W|$)/i; | ||
var regPattern = /(\W|^)((Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s*,?\s*)?([0-9]{1,2})(st|nd|rd|th)?(\s*(to|\-|\s)\s*([0-9]{1,2})(st|nd|rd|th)?)?\s*(?:of)?\s*(January|Jan|February|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec)((\s*[0-9]{2,4})(\s*BE)?)?(\W|$)/i; | ||
@@ -17,0 +17,0 @@ function MonthNameLittleEndianParser(text, ref, opt){ |
@@ -16,4 +16,3 @@ /* | ||
opt.timezoneMap = opt.timezoneMap || this.timezoneMap; | ||
opt.timezoneMap = opt.timezoneMap || this.timezoneMap; | ||
var currentParserIndex = 0; | ||
@@ -20,0 +19,0 @@ var parsers = []; |
@@ -13,10 +13,2 @@ /* | ||
/** | ||
* GeneralDateParser - Create a parser object | ||
* | ||
* @param { String } text - Orginal text to be parsed | ||
* @param { Date, Optional } ref - Referenced date | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
*/ | ||
function JPGeneralDateParser(text, ref, opt){ | ||
@@ -23,0 +15,0 @@ |
@@ -29,11 +29,2 @@ /* | ||
/** | ||
* JPStandardDateParser - Create a parser object | ||
* | ||
* @param { String } text - Orginal text to be parsed | ||
* @param { Date, Optional } ref - Referenced date | ||
* @param { Object, Optional } opt - Parsing option | ||
* @return { CNParser } | ||
*/ | ||
function JPStandardDateParser(text, ref, opt){ | ||
@@ -40,0 +31,0 @@ |
@@ -279,2 +279,3 @@ /* | ||
}else if(hour > 100){ | ||
if(!matchedTokens[10]) return null; | ||
@@ -341,8 +342,9 @@ minute = hour%100; | ||
var PATTERN = /^\s*(GMT|UTC)(\+|\-)(\d{1,2})(\d{2})/; | ||
var PATTERN = /^\s*(GMT|UTC)?(\+|\-)(\d{1,2}):?(\d{2})/; | ||
if(text.length <= result.index + result.text.length) return null; | ||
text = text.substr(result.index + result.text.length); | ||
var matchedTokens = text.match(PATTERN); | ||
if(matchedTokens){ | ||
var timezoneOffset = parseInt(matchedTokens[3])*60 + parseInt(matchedTokens[4]) | ||
@@ -441,4 +443,16 @@ var timezoneOffset = parseInt(matchedTokens[2] + timezoneOffset)*(-1); | ||
result = resultWithTimezone || result; | ||
if(opt.timezoneOffset){ //Fallback to opt.timezoneOffset | ||
if(result.start.timezoneOffset === undefined){ | ||
result.start.imply('timezoneOffset', opt.timezoneOffset); | ||
} | ||
if(result.end && result.end.timezoneOffset === undefined){ | ||
result.end.imply('timezoneOffset', opt.timezoneOffset); | ||
} | ||
} | ||
} | ||
// Try merging overlap results | ||
@@ -445,0 +459,0 @@ if(searchingResults.length > 0){ |
@@ -68,8 +68,11 @@ /* | ||
if(this.timezoneOffset === undefined || this.timezoneOffset === null){ | ||
if(timezoneOffset === undefined || timezoneOffset === null) | ||
timezoneOffset = new Date().getTimezoneOffset() | ||
if(timezoneOffset === undefined || timezoneOffset === null){ | ||
timezoneOffset = this.timezoneOffset; | ||
}else{ | ||
timezoneOffset = this.timezoneOffset; | ||
if(this.isCertain('timezoneOffset')) | ||
timezoneOffset = this.timezoneOffset; | ||
} | ||
if(timezoneOffset === undefined || timezoneOffset === null) | ||
timezoneOffset = new Date().getTimezoneOffset() | ||
@@ -76,0 +79,0 @@ var dateMoment = moment(new Date(this.year,this.month,this.day)); |
@@ -391,1 +391,30 @@ test("Test - Module Status", function() { | ||
test("Test - Obj Instanciate 3", function() { | ||
var _chrono = new chrono(); | ||
var result = _chrono.parseDate('Thursday', new Date(2013,11,2)) | ||
var expectDate = new Date(2013, 11, 5, 12); | ||
ok(result.getTime() == expectDate.getTime(), result); | ||
_chrono.refiners.PreferPastLastWeekRefiner = { | ||
refine: function(text, results) { | ||
results.forEach(function(result){ | ||
if(result.start.isCertain('dayOfWeek') && !result.start.isCertain('day')){ | ||
result.start.imply('day', result.start.day - 7) | ||
} | ||
}) | ||
return results; | ||
} | ||
} | ||
var result = _chrono.parseDate('Thursday', new Date(2013,11,2)) | ||
var expectDate = new Date(2013, 10, 28, 12); | ||
ok(result.getTime() == expectDate.getTime(), result); | ||
}); | ||
test("Test - All-numeric form parser", function() { | ||
var text = "Let's finish this before this 2.7.2012."; | ||
var parser = chrono.parsers.DEAllNumericFormParser(text, new Date(2012,7,8)); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
@@ -17,3 +17,3 @@ ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
ok(result.start.day == 2, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == '2.7.2012', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
@@ -25,9 +25,9 @@ | ||
} | ||
var text = "Let's finish this before this 12.1.2012."; | ||
var parser = chrono.parsers.DEAllNumericFormParser(text, new Date(2012,7,8)); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
@@ -42,3 +42,3 @@ ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
ok(result.start.day == 12, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == '12.1.2012', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
@@ -55,3 +55,3 @@ | ||
ok(parser, parser) | ||
parser.execAll(); | ||
@@ -66,3 +66,3 @@ ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
ok(result.start.day == 7, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == '07.01.03', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
@@ -74,3 +74,25 @@ | ||
} | ||
var text = "Let's finish this before this 30.11.2013."; | ||
var parser = chrono.parsers.DEAllNumericFormParser(text, new Date(2012,7,8)); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
var result = parser.results()[0]; | ||
if(result){ | ||
ok(result.start, JSON.stringify(result.start) ) | ||
ok(result.start.year == 2013, 'Test Result - (Year) ' + JSON.stringify(result.start) ) | ||
ok(result.start.month == 10, 'Test Result - (Month) ' + JSON.stringify(result.start) ) | ||
ok(result.start.day == 30, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == '30.11.2013', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
var resultDate = (result.startDate); | ||
var expectDate = (new Date(2013,10,30,12)); | ||
ok(Math.abs(expectDate.getTime() - resultDate.getTime()) < 100000, 'Test result.startDate ' + resultDate +'/' +expectDate) | ||
} | ||
}); | ||
@@ -81,7 +103,7 @@ | ||
test("Test - Month name little endian parser", function() { | ||
var text = "Die Antwort kam am Freitag, den 12. August 2011"; | ||
var parser = chrono.parsers.DEMonthNameLittleEndianParser(text, new Date(2012,7,8)); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
@@ -96,3 +118,3 @@ ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
ok(result.start.day == 12, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == 'Freitag, den 12. August 2011', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
@@ -104,8 +126,8 @@ | ||
} | ||
var text = "Die Antwort kam am Freitag, den 20. Mai."; | ||
var parser = chrono.parsers.DEMonthNameLittleEndianParser(text, new Date(2012,7,8)); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
@@ -120,3 +142,3 @@ ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
ok(result.start.day == 20, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
ok(result.text == 'Freitag, den 20. Mai', 'Test Result - (Text) ' + JSON.stringify(result.text) ) | ||
@@ -128,4 +150,39 @@ | ||
} | ||
}); | ||
test("Test - Weekday parsing", function() { | ||
var refDate = new Date(2014, 0, 3); | ||
testWeekDayParsing("Der Termin ist diesen Montag.", refDate, 2013, 11, 30); | ||
testWeekDayParsing("Der Termin ist nächsten Montag.", refDate, 2014, 0, 6); | ||
testWeekDayParsing("Das wäre der nächste Montag.", refDate, 2014, 0, 6); | ||
testWeekDayParsing("Der Termin war letzten Montag.", refDate, 2013, 11, 23); | ||
testWeekDayParsing("Der Termin ist diesen Donnerstag.", refDate, 2014, 0, 2); | ||
testWeekDayParsing("Der Termin ist nächsten Donnerstag.", refDate, 2014, 0, 9); | ||
testWeekDayParsing("Das wäre der nächste Donnerstag.", refDate, 2014, 0, 9); | ||
testWeekDayParsing("Der Termin war letzten Donnerstag.", refDate, 2013, 11, 26); | ||
testWeekDayParsing("Der Termin ist diesen Freitag.", refDate, 2014, 0, 3); | ||
testWeekDayParsing("Der Termin ist nächsten Freitag.", refDate, 2014, 0, 10); | ||
testWeekDayParsing("Das wäre der nächste Freitag.", refDate, 2014, 0, 10); | ||
testWeekDayParsing("Der Termin war letzten Freitag.", refDate, 2013, 11, 27); | ||
}); | ||
var testWeekDayParsing = function(stringToBeParsed, referenceDate, expectedYear, expectedMonth, expectedDate) { | ||
var parser = chrono.parsers.DEDayOfWeekParser(stringToBeParsed, referenceDate); | ||
ok(parser, parser) | ||
parser.execAll(); | ||
ok(parser.results().length == 1, JSON.stringify( parser.results() ) ) | ||
var result = parser.results()[0]; | ||
if(result){ | ||
ok(result.start, JSON.stringify(result.start) ) | ||
ok(result.start.year == expectedYear, 'Test Result - (Year) ' + JSON.stringify(result.start) ) | ||
ok(result.start.month == expectedMonth, 'Test Result - (Month) ' + JSON.stringify(result.start) ) | ||
ok(result.start.day == expectedDate, 'Test Result - (Day) ' + JSON.stringify(result.start) ) | ||
} | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
532880
50
8521
14