79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
/**
|
|
* convertir un fichier .org vers des données structurées en json
|
|
* @type {*}
|
|
*/
|
|
// const fileToParse = process.argv[0]
|
|
import fs from 'node-fs';
|
|
|
|
const sourceFilePath = './sources/demo.org';
|
|
|
|
console.log('parse some org file', sourceFilePath)
|
|
if (!sourceFilePath) {
|
|
console.error('pas de fichier à ouvrir')
|
|
}
|
|
let headers = []
|
|
let headersByKind = {}
|
|
|
|
|
|
fs.stat(sourceFilePath, function (err, stat) {
|
|
if (err == null) {
|
|
console.log(`File ${sourceFilePath} exists`);
|
|
|
|
} else if (err.code === 'ENOENT') {
|
|
// file does not exist
|
|
console.error(`le fichier ${sourceFilePath} est introuvable. Impossible d en extraire des infos.`, err);
|
|
} else {
|
|
console.log('Some other error: ', err.code);
|
|
}
|
|
});
|
|
|
|
|
|
let keyword = 'SOMEDAY';
|
|
let keywordList = ['SOMEDAY', 'NEXT','TODO', 'CANCELLED','DONE', 'WAITING'];
|
|
|
|
fs.readFile(sourceFilePath, 'utf8', function (err, data) {
|
|
if (err) {
|
|
return console.log(err);
|
|
}
|
|
console.log(" parsing...")
|
|
// parcourir chaque ligne du fichier org
|
|
let everyline = data.split('\n');
|
|
|
|
// trouver les entêtes toutes les lignes qui commencent par * et espace.
|
|
|
|
everyline.forEach((line) => {
|
|
|
|
|
|
if (line.match(/^\*+? /)) {
|
|
headers.push(line)
|
|
keywordList.forEach(keyword => lookForKeywordInLine(line, keyword))
|
|
// TODO gérer la création d'objets définissant les tâches et leurs propriétés
|
|
}
|
|
})
|
|
console.log('headers', headers)
|
|
console.log(" parsing fini")
|
|
console.log('nombre de lignes', everyline.length)
|
|
console.log('nombre de headers', headers.length)
|
|
keywordList.forEach(keyword => console.log('nombre de headers',keyword, headersByKind[keyword]?.length))
|
|
|
|
return;
|
|
})
|
|
|
|
function lookForKeywordInLine(line, keyword='TODO') {
|
|
|
|
// const regexp = new RegExp("(^\*+? "+ keyword+"", "gi")
|
|
// const regexp = new RegExp("^{\*}+? "+keyword+".*?", "gi")
|
|
|
|
// if ( line.match(regexp)) {
|
|
if ( line.indexOf('* '+keyword) !== -1) {
|
|
// console.log('ligne trouvée', keyword)
|
|
createNewHeaderKind(keyword)
|
|
headersByKind[keyword].push(line);
|
|
}
|
|
}
|
|
|
|
function createNewHeaderKind(keyword) {
|
|
if (!headersByKind[keyword]) {
|
|
headersByKind[keyword] = [];
|
|
}
|
|
} |