edtfy
Version:
Javascript date parser, transforms user input into the edtf format.
69 lines (65 loc) • 1.86 kB
JavaScript
const fs = require('fs');
const sep = require('path').sep;
const edtfy = require('../dist/edtfy.js');
edtfy.locale = 'en';
fs.readFile(__dirname + sep + 'gedcom_dates.csv', 'utf8', (err, data) => {
const dates = data.replace(/"""/g, '').split('\n');
const unparsed = [];
let total = 0;
let errors = 0;
let revolution = 0;
let julian = 0;
console.time('Total time');
dates.forEach(date => {
if (date.indexOf('@#DFRENCH R@') >= 0) {
revolution += 1;
} else if (date.indexOf('@#DJULIAN@') >= 0) {
julian += 1;
} else {
total += 1;
try {
edtfy(date);
} catch (e) {
try {
edtfy(date, {locale: 'fr'});
} catch (e) {
errors += 1;
unparsed.push(date);
}
}
}
});
const unparsed2 = [];
unparsed.forEach(date => {
let transformedDate = date;
if (/^0(0|\.)? ___ \d+$/.test(date)) {
errors -= 1;
transformedDate = date.slice(6, date.length + 1);
} else if (/^0(0|\.)? \w+ \d+$/.test(date)) {
errors -= 1;
transformedDate = date.slice(2, date.length + 1);
} else if (/^___ \w+ \d+$/.test(date)) {
errors -= 1;
transformedDate = date.slice(3, date.length + 1);
}
if (transformedDate !== date) {
try {
edtfy(transformedDate);
} catch (e) {
try {
edtfy(transformedDate, {locale: 'fr'});
} catch (e) {
console.log('error on: %s, was: %s', transformedDate, date);
errors += 1;
}
}
} else {
console.log('could not be parsed: %s', date);
unparsed2.push(date);
}
});
console.timeEnd('Total time');
console.log('Total: %d, success: %d, errors: %d', total, total - errors, errors);
console.log('Revolution: %d, Julian: %d', revolution, julian);
// console.log(unparsed2);
});