const fs = require("fs"); const jsdom = require("jsdom"); const { JSDOM } = jsdom; const { window } = new JSDOM(""); global.window = window; var showdown = require("showdown"); const converterShowdown = new showdown.Converter(); const libxmljs = require("libxmljs"); const getTerm = require("./getTerm.js"); fs.readFile("../../news.xml", "utf8", (err, data) => { if (err) { console.error(err); return; } data = data.replace(//, ""); parseXML(data); }); fs.mkdir("./markdown-news/", { recursive: true }, (err) => { if (err) throw err; }); const nodeChildrenToString = (nodeChildren) => { let string = ""; for (let i = 0; i < nodeChildren.length; ++i) { if (nodeChildren[i].type() === "text") { string += nodeChildren[i]; } else { string += nodeChildren[i].toString(); } } return string; }; const parseXML = (XML) => { const xmlDoc = libxmljs.parseHtml(XML); let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes(); let currentTerm = ""; newsdefsChildren.forEach((newsItem) => { if (newsItem.type() === "element") { const author = newsItem.attr("author").value(); const date = newsItem.attr("date").value(); currentTerm = getTerm(date); const contentNodes = newsItem.childNodes(); const content = converterShowdown.makeMarkdown( nodeChildrenToString(contentNodes) ); const md = `--- author: "${author.replace(/"/g, '\\"')}" date: "${date.replace(/"/g, '\\"')}" --- ${content}`; const mdTitle = `${date}-${author}`; fs.mkdirSync( `./markdown-news/${currentTerm.year}/${currentTerm.term}`, { recursive: true }, (err) => { if (err) throw err; } ); fs.writeFileSync( `./markdown-news/${currentTerm.year}/${currentTerm.term}/${mdTitle}.news.md`, md, (err) => { if (err) throw err; } ); } }); };