summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/utils/fs.js58
-rw-r--r--lib/utils/images.js51
-rw-r--r--lib/utils/page.js2
-rw-r--r--package.json1
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": {