diff options
-rw-r--r-- | lib/utils/fs.js | 58 | ||||
-rw-r--r-- | lib/utils/images.js | 51 | ||||
-rw-r--r-- | lib/utils/page.js | 2 | ||||
-rw-r--r-- | package.json | 1 |
4 files changed, 68 insertions, 44 deletions
diff --git a/lib/utils/fs.js b/lib/utils/fs.js index e434953..21956a0 100644 --- a/lib/utils/fs.js +++ b/lib/utils/fs.js @@ -8,8 +8,8 @@ var Ignore = require("fstream-ignore"); var fsUtils = { tmp: { - file: function() { - return Q.nfcall(tmp.file.bind(tmp)).get(0) + file: function(opt) { + return Q.nfcall(tmp.file.bind(tmp), opt).get(0) }, dir: function() { return Q.nfcall(tmp.dir.bind(tmp)).get(0) @@ -19,19 +19,8 @@ var fsUtils = { stat: Q.denodeify(fs.stat), readdir: Q.denodeify(fs.readdir), readFile: Q.denodeify(fs.readFile), - writeFile: function(filename, data, options) { - var d = Q.defer(); - - try { - fs.writeFileSync(filename, data, options) - } catch(err) { - d.reject(err); - } - d.resolve(); - - - return d.promise; - }, + writeFile: writeFile, + writeStream: writeStream, mkdirp: Q.denodeify(fsExtra.mkdirp), copy: Q.denodeify(fsExtra.copy), remove: Q.denodeify(fsExtra.remove), @@ -44,7 +33,40 @@ var fsUtils = { existsSync: fs.existsSync.bind(fs), readFileSync: fs.readFileSync.bind(fs), clean: cleanFolder, - getUniqueFilename: getUniqueFilename + getUniqueFilename: getUniqueFilename, +} + +// Write a file +function writeFile(filename, data, options) { + var d = Q.defer(); + + try { + fs.writeFileSync(filename, data, options) + } catch(err) { + d.reject(err); + } + d.resolve(); + + + return d.promise; +} + +// Write a stream to a file +function writeStream(filename, st) { + var d = Q.defer(); + + var wstream = fs.createWriteStream(filename); + + wstream.on('finish', function () { + d.resolve(); + }); + wstream.on('error', function (err) { + d.reject(err); + }); + + st.pipe(wstream); + + return d.promise; } // Find a filename available @@ -62,7 +84,7 @@ function getUniqueFilename(base) { } return filename; -}; +} // List files in a directory @@ -145,6 +167,6 @@ function cleanFolder(root) { return d.promise; }); -}; +} module.exports = fsUtils; diff --git a/lib/utils/images.js b/lib/utils/images.js index ebe9043..0d37a0f 100644 --- a/lib/utils/images.js +++ b/lib/utils/images.js @@ -1,46 +1,49 @@ var _ = require("lodash"); var Q = require("q"); -var fs = require("fs"); -var gm = require("gm"); +var fs = require("./fs"); +var exec = require('child_process').exec; var request = require("request"); var links = require("./links"); -// Convert a file -var convertFile = function(source, dest, options) { +// Convert a svg file +var convertSVGFile = function(source, dest, options) { var d = Q.defer(); + options = _.defaults(options || {}, { - resize: null - }); - var img = gm(source) - .options({ - imageMagick: true }); - if (options.resize) img = img.resize(options.resize.w, options.resize.h); - - img.noProfile() - .write(dest, function(err) { - if (!err) return d.resolve(); + var command = "svgexport "+source+" "+dest; - if (err.code == "ENOENT") { - err = new Error("Need to install 'ImageMagick'"); - } - d.reject(err); - }); + var child = exec(command, function (error, stdout, stderr) { + if (error) { + if (error.code == "ENOENT") error = new Error("Need to install 'svgexport' using 'npm install svgexport -g'"); + return d.reject(error); + } + d.resolve(); + }); return d.promise; }; -// Convert a file or url -var convert = function(source, dest, options) { - if (links.isExternal(source)) source = request(source); +// Convert a svg file or url +var convertSVG = function(source, dest, options) { + if (!links.isExternal(source)) return convertSVGFile(source, dest, options); + + return fs.tmp.file({ postfix: '.svg' }) - return convertFile(source, dest, options); + // Download file + .then(function(tmpfile) { + return fs.writeStream(tmpfile, request(source)) + .thenResolve(tmpfile); + }) + .then(function(tmpfile) { + return convertSVGFile(tmpfile, dest, options); + }); }; module.exports = { - convert: convert, + convertSVG: convertSVG, INVALID: [".svg"] }; diff --git a/lib/utils/page.js b/lib/utils/page.js index 8cb8eb9..2f56a52 100644 --- a/lib/utils/page.js +++ b/lib/utils/page.js @@ -158,7 +158,7 @@ function convertImages(images, options) { var imgout = path.resolve(options.book.options.output, image.dest); options.book.log.debug("convert image", image.source, "to", image.dest, "..."); - return imgUtils.convert(imgin, imgout) + return imgUtils.convertSVG(imgin, imgout) .then(function() { options.book.log.debug.ok(); }, function(err) { diff --git a/package.json b/package.json index 870dc16..638a0f1 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "crc": "3.2.1", "bash-color": "0.0.3", "URIjs": "1.14.1", - "gm": "1.17.0", "request": "2.51.0" }, "devDependencies": { |