/** * Load the No.6092 datasheet into the OKCMS JSON */ import { loadJSON, loadCSV, writeJSON, writeFile } from "./file_utils.js"; import { readdir } from "fs/promises"; import parseRTF from "rtf-parser"; import fs from "fs"; import sizeOf from "image-size"; async function main() { const bib = {}; await loadText("./data_store/biblio.rtf", bib); await writeFile("./biblio.html", bib.text); } /** * Load the text from an RTF */ async function loadText(path, bib) { // const warn = path.match("McCurry", "i"); return new Promise((resolve, reject) => { parseRTF.stream(fs.createReadStream(path), (err, doc) => { // Separate paragraphs from spans since this library doesn't handle // the last paragraph correctly. const paragraphs = doc.content.filter((para) => para.content); const finalParagraph = doc.content.filter((para) => !para.content); let content = ""; paragraphs.forEach((para, paragraphIndex) => { const paragraph = []; para.content.forEach((clip) => { appendClip(paragraph, clip); }); const text = paragraph.join(""); if (text) { content += "
\n" + text + "\n
\n\n"; } }); // The last paragraph is just spans for some reason const finalParagraphExtract = []; finalParagraph.forEach((clip) => { appendClip(finalParagraphExtract, clip); }); if (finalParagraphExtract.length) { content += "\n" + finalParagraphExtract.join("") + "\n
\n\n"; } bib.text = content; resolve(); }); }); } /** * Append a clip to a paragraph, adding formating (i.e. italics) */ function appendClip(paragraph, clip) { paragraph.push(getClipValue(clip)); } function getClipValue(clip) { let value = clip.value; if (clip.style.italic) { value = "" + value + ""; } else if (clip.style.bold) { value = "" + value + ""; } else if (clip.style.underline) { value = "" + value + ""; } return value; } /** * Load everything and then exit! */ main().then(() => process.exit(0));