You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
/* global process */
|
|
|
|
var fs = require("fs");
|
|
var path = require("path");
|
|
|
|
var mammoth = require("./");
|
|
var promises = require("./promises");
|
|
var images = require("./images");
|
|
|
|
function main(argv) {
|
|
var docxPath = argv["docx-path"];
|
|
var outputPath = argv["output-path"];
|
|
var outputDir = argv.output_dir;
|
|
var outputFormat = argv.output_format;
|
|
var styleMapPath = argv.style_map;
|
|
|
|
readStyleMap(styleMapPath).then(function(styleMap) {
|
|
var options = {
|
|
styleMap: styleMap,
|
|
outputFormat: outputFormat
|
|
};
|
|
|
|
if (outputDir) {
|
|
var basename = path.basename(docxPath, ".docx");
|
|
outputPath = path.join(outputDir, basename + ".html");
|
|
var imageIndex = 0;
|
|
options.convertImage = images.imgElement(function(element) {
|
|
imageIndex++;
|
|
var extension = element.contentType.split("/")[1];
|
|
var filename = imageIndex + "." + extension;
|
|
|
|
return element.read().then(function(imageBuffer) {
|
|
var imagePath = path.join(outputDir, filename);
|
|
return promises.nfcall(fs.writeFile, imagePath, imageBuffer);
|
|
}).then(function() {
|
|
return {src: filename};
|
|
});
|
|
});
|
|
}
|
|
|
|
return mammoth.convert({path: docxPath}, options)
|
|
.then(function(result) {
|
|
result.messages.forEach(function(message) {
|
|
process.stderr.write(message.message);
|
|
process.stderr.write("\n");
|
|
});
|
|
|
|
var outputStream = outputPath ? fs.createWriteStream(outputPath) : process.stdout;
|
|
|
|
outputStream.write(result.value);
|
|
});
|
|
}).done();
|
|
}
|
|
|
|
function readStyleMap(styleMapPath) {
|
|
if (styleMapPath) {
|
|
return promises.nfcall(fs.readFile, styleMapPath, "utf8");
|
|
} else {
|
|
return promises.resolve(null);
|
|
}
|
|
}
|
|
|
|
module.exports = main;
|
|
|