import { $, chalk, echo, glob, path, fs } from "zx"; $.verbose = false; const bookDir = "publications"; const metadata = await glob([`${bookDir}/**/*.yaml`]); const books = metadata.map((name) => path.basename(name, ".yaml")); let bookData = []; for (const meta of metadata) { const book = path.basename(meta, ".yaml"); const dir = path.dirname(meta); bookData = bookData.concat({ slug: book, metadata: meta, chapters: await glob([`${dir}/*.md`]), }); } for (const book of bookData) { const chapters = book.chapters.join(" "); const wc = $`wc -w ${book.chapters}`; console.log(chalk.bold.blue(book.slug)); echo`\nWord count for ${book.slug}: \n${await wc}\n`; console.log("Building", chalk.bold(`dist/${book.slug}.pdf`)); const cssPath = (await fs.pathExists( `${bookDir}/${book.slug}/${book.slug}.css` )) ? `--css=${bookDir}/${book.slug}/${book.slug}.css` : ""; await $`pandoc ${book.chapters} -o dist/${book.slug}.pdf --css=src/pdf/style.css --resource-path=.:static:src:src/img --pdf-engine=weasyprint --toc --template=special ${cssPath}`; console.log("Building", chalk.bold(`dist/${book.slug}.epub`)); await $`pandoc ${book.chapters} ${book.metadata} -o dist/${book.slug}.epub --css=src/pdf/epub.css --resource-path=.:static:src:src/img --toc --shift-heading-level-by=-1`; console.log(book.slug, ": done\n\n"); }