2021-06-14 14:31:36 -04:00
|
|
|
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");
|
|
|
|
|
2021-06-14 17:12:09 -04:00
|
|
|
fs.readFile("./news.xml", "utf8", (err, data) => {
|
2021-06-14 14:31:36 -04:00
|
|
|
if (err) {
|
|
|
|
console.error(err);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
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 getTerm = (dateStr) => {
|
|
|
|
const date = new Date(dateStr);
|
|
|
|
let term = "";
|
|
|
|
const year = date.getUTCFullYear();
|
2021-06-14 17:12:09 -04:00
|
|
|
if (
|
|
|
|
new Date(`${year}-01-01`).getTime() <= date.getTime() &&
|
|
|
|
date.getTime() <= new Date(`${year}-04-30`).getTime()
|
|
|
|
) {
|
|
|
|
term = "Winter";
|
|
|
|
} else if (
|
|
|
|
new Date(`${year}-05-01`).getTime() <= date.getTime() &&
|
|
|
|
date.getTime() <= new Date(`${year}-08-31`).getTime()
|
|
|
|
) {
|
|
|
|
term = "Spring";
|
|
|
|
} else if (
|
|
|
|
new Date(`${year}-09-01`).getTime() <= date.getTime() &&
|
|
|
|
date.getTime() <= new Date(`${year}-12-31`).getTime()
|
|
|
|
) {
|
|
|
|
term = "Fall";
|
2021-06-14 14:31:36 -04:00
|
|
|
}
|
2021-06-14 17:12:09 -04:00
|
|
|
return `-${term}-${year}-`;
|
|
|
|
};
|
2021-06-14 14:31:36 -04:00
|
|
|
|
|
|
|
const parseXML = (XML) => {
|
|
|
|
const xmlDoc = libxmljs.parseHtml(XML);
|
|
|
|
let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes();
|
|
|
|
let currentTerm = "";
|
|
|
|
for (let i = 0; i < newsdefsChildren.length; ++i) {
|
|
|
|
if (newsdefsChildren[i].type() === "element") {
|
|
|
|
const author = newsdefsChildren[i].attr("author").value();
|
|
|
|
const date = newsdefsChildren[i].attr("date").value();
|
|
|
|
currentTerm = getTerm(date);
|
|
|
|
const contentNodes = newsdefsChildren[i].childNodes();
|
|
|
|
const content = converterShowdown.makeMarkdown(
|
|
|
|
nodeChildrenToString(contentNodes)
|
|
|
|
);
|
|
|
|
|
|
|
|
const mdx = `export const metadata = {
|
|
|
|
author: ${author},
|
|
|
|
date: new Date("${date}"),
|
|
|
|
}
|
|
|
|
|
|
|
|
${content}`;
|
|
|
|
const mdxTitle = `${date}-${author}`;
|
|
|
|
fs.mkdir(`./markdown-news/${currentTerm}`, { recursive: true }, (err) => {
|
|
|
|
if (err) throw err;
|
|
|
|
});
|
2021-06-14 17:12:09 -04:00
|
|
|
fs.writeFile(
|
|
|
|
`./markdown-news/${currentTerm}/${mdxTitle}.news.mdx`,
|
|
|
|
mdx,
|
|
|
|
(err) => {
|
|
|
|
if (err) throw err;
|
|
|
|
}
|
|
|
|
);
|
2021-06-14 14:31:36 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|