diff options
Diffstat (limited to 'lib/generate/ebook/index.js')
-rw-r--r-- | lib/generate/ebook/index.js | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/lib/generate/ebook/index.js b/lib/generate/ebook/index.js index 7416860..e3d3db4 100644 --- a/lib/generate/ebook/index.js +++ b/lib/generate/ebook/index.js @@ -7,6 +7,7 @@ var exec = require('child_process').exec; var fs = require("fs"); var parse = require("../../parse"); var BaseGenerator = require("../page"); +var stringUtils = require("../../utils/string"); /* * This generator inherits from the single page generator @@ -14,11 +15,6 @@ var BaseGenerator = require("../page"); */ var Generator = function() { BaseGenerator.apply(this, arguments); - - // Options for eBook generation - this.options = _.defaults(this.options, { - extension: "epub" - }); }; util.inherits(Generator, BaseGenerator); @@ -28,27 +24,54 @@ Generator.prototype.finish = function() { return BaseGenerator.prototype.finish.apply(this) .then(function() { var d = Q.defer(); + var format = that.options.extension || path.extname(that.options.output).replace("\.", "") || "pdf"; if (!that.options.cover && fs.existsSync(path.join(that.options.output, "cover.jpg"))) { that.options.cover = path.join(that.options.output, "cover.jpg"); } var _options = { - "--cover": that.options.cover + "--cover": that.options.cover, + "--title": that.options.title, + "--comments": that.options.description, + "--authors": that.options.author, + "--level1-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-1 ')]", + "--level2-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-2 ')]", + "--level3-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-3 ')]" }; + if (format == "pdf") { + var pdfOptions = _.defaults(that.options.pdf || {}, { + "fontSize": 12, + "toc": true, + "pageNumbers": false, + "paperSize": "a4", + "margin": { + "right": 62, + "left": 62, + "top": 36, + "bottom": 36 + } + }); + + _.extend(_options, { + "--margin-left": String(pdfOptions.margin.left), + "--margin-right": String(pdfOptions.margin.right), + "--margin-top": String(pdfOptions.margin.top), + "--margin-bottom": String(pdfOptions.margin.bottom), + "--pdf-add-toc": Boolean(pdfOptions.toc), + "--pdf-default-font-size": String(pdfOptions.fontSize), + "--pdf-mono-font-size": String(pdfOptions.fontSize), + "--paper-size": String(pdfOptions.paperSize), + "--pdf-page-numbers": Boolean(pdfOptions.pageNumbers) + }); + } + var command = [ "ebook-convert", path.join(that.options.output, "index.html"), - path.join(that.options.output, "index."+that.options.extension), - _.chain(_options) - .map(function(value, key) { - if (value == null) return null; - return key+"="+value; - }) - .compact() - .value() - .join(" ") + path.join(that.options.output, "index."+format), + stringUtils.optionsToShellArgs(_options) ].join(" "); exec(command, function (error, stdout, stderr) { |