/** * 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] = []; } }