mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-21 01:53:26 +00:00
Use svgexport instead of imagemagick
This commit is contained in:
+40
-18
@@ -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;
|
||||
|
||||
+28
-25
@@ -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
|
||||
});
|
||||
var command = "svgexport "+source+" "+dest;
|
||||
|
||||
if (options.resize) img = img.resize(options.resize.w, options.resize.h);
|
||||
|
||||
img.noProfile()
|
||||
.write(dest, function(err) {
|
||||
if (!err) return d.resolve();
|
||||
|
||||
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 convertFile(source, dest, options);
|
||||
return fs.tmp.file({ postfix: '.svg' })
|
||||
|
||||
// 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"]
|
||||
};
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user