mume-with-litvis
Version:
Fork of mume with added http://litvis.org/
202 lines • 6.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ebookConvert = void 0;
const mkdirp = require("mkdirp");
const path = require("path");
const child_process_1 = require("child_process");
// ebook-convert is requied (calibre), which can be got from https://calibre-ebook.com/download
// xpath http://www.w3schools.com/xsl/xpath_syntax.asp
function processMetadata(config = {}, args) {
const title = config["title"] || "No Title";
args.push("--title", title);
if (config["authors"]) {
args.push("--authors", config["authors"]);
}
if (config["cover"]) {
args.push("--cover", config["cover"]);
}
if (config["comment"]) {
args.push("--comments", config["comments"]);
}
if (config["publisher"]) {
args.push("--publisher", config["publisher"]);
}
if (config["book-producer"]) {
args.push("--book-producer", config["book-producer"]);
}
if (config["pubdate"]) {
args.push("--pubdate", config["pubdate"]);
}
if (config["language"]) {
args.push("--language", config["language"]);
}
if (config["isbn"]) {
args.push("--isbn", config["isbn"]);
}
if (config["tags"]) {
args.push("--tags", config["tags"]);
}
if (config["series"]) {
args.push("--series", config["series"]);
}
if (config["rating"]) {
args.push("--rating", config["rating"]);
}
}
function processAppearance(config = {}, args) {
if (config["asciiize"]) {
args.push("--asciiize");
}
if (config["base-font-size"]) {
args.push("--base-font-size=" + config["base-font-size"]);
}
if (config["disable-font-rescaling"]) {
args.push("--disable-font-rescaling");
}
if (config["line-height"]) {
args.push("--line-height=" + config["line-height"]);
}
let marginTop = 72;
let marginRight = 72;
let marginBottom = 72;
let marginLeft = 72;
if (config["margin"]) {
const margin = config["margin"];
if (margin instanceof Array) {
if (margin.length === 1) {
marginTop = margin[0];
marginBottom = margin[0];
marginLeft = margin[0];
marginRight = margin[0];
}
else if (margin.length === 2) {
marginTop = margin[0];
marginBottom = margin[0];
marginLeft = margin[1];
marginRight = margin[1];
}
else if (margin.length === 4) {
marginTop = margin[0];
marginRight = margin[1];
marginBottom = margin[2];
marginLeft = margin[3];
}
}
else if (typeof margin === "number") {
marginTop = margin;
marginBottom = margin;
marginLeft = margin;
marginRight = margin;
}
}
else {
if (config["margin-top"]) {
marginTop = config["margin-top"];
}
if (config["margin-right"]) {
marginRight = config["margin-right"];
}
if (config["margin-bottom"]) {
marginBottom = config["margin-bottom"];
}
if (config["margin-left"]) {
marginLeft = config["margin-left"];
}
}
args.push("--margin-top=" + marginTop);
args.push("--margin-bottom=" + marginBottom);
args.push("--margin-left=" + marginLeft);
args.push("--margin-right=" + marginRight);
}
function processEPub(config = {}, args) {
if (config["no-default-epub-cover"]) {
args.push("--no-default-epub-cover");
}
if (config["no-svg-cover"]) {
args.push("--no-svg-cover");
}
if (config["pretty-print"]) {
args.push("--pretty-print");
}
}
function processPDF(config = {}, args) {
if (config["paper-size"]) {
args.push("--paper-size", config["paper-size"]);
}
if (config["default-font-size"]) {
args.push("--pdf-default-font-size=" + config["default-font-size"]);
}
if (config["header-template"]) {
args.push("--pdf-header-template", config["header-template"]);
}
if (config["footer-template"]) {
args.push("--pdf-footer-template", config["footer-template"]);
}
if (config["page-numbers"]) {
args.push("--pdf-page-numbers");
}
if (config["pretty-print"]) {
args.push("--pretty-print");
}
}
/**
* @param src: link to .html file
* @param dest: output path
*/
function ebookConvert(src, dest, config = {}) {
return new Promise((resolve, reject) => {
const args = [
src,
dest,
"--level1-toc",
"//*[@ebook-toc-level-1]/@heading",
"--level2-toc",
"//*[@ebook-toc-level-2]/@heading",
"--level3-toc",
"//*[@ebook-toc-level-3]/@heading",
"--no-chapters-in-toc",
];
processMetadata(config, args);
processAppearance(config, args);
// output formats
const format = path.extname(dest).slice(1);
if (format === "epub") {
processEPub(config["epub"], args);
}
else if (format === "pdf") {
processPDF(config["pdf"], args);
}
// arguments
const ebookArgs = config["args"] || [];
ebookArgs.forEach((arg) => {
args.push(arg);
});
// ebook-convert will cause error if directory doesn't exist,
// therefore I will create directory first.
mkdirp(path.dirname(dest))
.then(() => {
(0, child_process_1.execFile)("ebook-convert", args, (error2) => {
if (error2) {
return reject(error2.toString());
}
else {
return resolve();
}
});
})
.catch((error) => {
if (error) {
return reject(error);
}
});
});
}
exports.ebookConvert = ebookConvert;
/*
# Example
ebookConvert('test.html', 'test.epub', {title: 'hehe', authors: 'shd101wyy'})
.then(()=> {...})
.catch((error)=> {...})
###
*/
//# sourceMappingURL=ebook-convert.js.map