aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-08-12 21:57:45 +0100
committerMichael Williamson <mike@zwobble.org>2015-08-12 21:57:45 +0100
commit4b4ec85bc4f49e72244f7219539124b45b876d8e (patch)
tree0aa4c2005526fa5130bccbfd26f3a9cab6f8d4cb /lib
parent5f5217a4e16f7be697b24a46cf58e47753967d95 (diff)
Open zip file before passing to readers
Diffstat (limited to 'lib')
-rw-r--r--lib/docx/docx-reader.js14
-rw-r--r--lib/docx/style-map.js28
-rw-r--r--lib/index.js35
-rw-r--r--lib/unzip.js4
4 files changed, 41 insertions, 40 deletions
diff --git a/lib/docx/docx-reader.js b/lib/docx/docx-reader.js
index a976ef3..9b1ec9a 100644
--- a/lib/docx/docx-reader.js
+++ b/lib/docx/docx-reader.js
@@ -1,7 +1,6 @@
exports.read = read;
var promises = require("../promises");
-var unzip = require("../unzip");
var documents = require("../documents");
var Result = require("../results").Result;
@@ -15,15 +14,12 @@ var stylesReader = require("./styles-reader");
var notesReader = require("./notes-reader");
-function read(options) {
+function read(docxFile) {
return promises.props({
- docxFile: unzip.openZip(options)
- }).also(function(result) {
- return {
- contentTypes: readContentTypesFromZipFile(result.docxFile),
- numbering: readNumberingFromZipFile(result.docxFile),
- styles: readStylesFromZipFile(result.docxFile)
- };
+ contentTypes: readContentTypesFromZipFile(docxFile),
+ numbering: readNumberingFromZipFile(docxFile),
+ styles: readStylesFromZipFile(docxFile),
+ docxFile: docxFile
}).also(function(result) {
return {
footnotes: readXmlFileWithBody("footnotes", result, function(bodyReader, xml) {
diff --git a/lib/docx/style-map.js b/lib/docx/style-map.js
index dcc9f66..5020a87 100644
--- a/lib/docx/style-map.js
+++ b/lib/docx/style-map.js
@@ -1,5 +1,4 @@
var promises = require("../promises");
-var unzip = require("../unzip");
exports.writeStyleMap = writeStyleMap;
exports.readStyleMap = readStyleMap;
@@ -7,25 +6,14 @@ exports.readStyleMap = readStyleMap;
var styleMapPath = "mammoth/style-map";
-function writeStyleMap(options) {
- return promises.when(unzip.openZip(options))
- .then(function(zipFile) {
-
- zipFile.write(styleMapPath, options.styleMap);
-
- return {
- toBuffer: zipFile.toBuffer
- };
- });
+function writeStyleMap(docxFile, styleMap) {
+ docxFile.write(styleMapPath, styleMap);
}
-function readStyleMap(options) {
- return promises.when(unzip.openZip(options))
- .then(function(zipFile) {
- if (zipFile.exists(styleMapPath)) {
- return zipFile.read(styleMapPath, "utf8");
- } else {
- return promises.when(null);
- }
- });
+function readStyleMap(docxFile) {
+ if (docxFile.exists(styleMapPath)) {
+ return docxFile.read(styleMapPath, "utf8");
+ } else {
+ return promises.resolve(null);
+ }
}
diff --git a/lib/index.js b/lib/index.js
index a7afed7..a988745 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,7 +1,9 @@
var docxReader = require("./docx/docx-reader");
+var docxStyleMap = require("./docx/style-map");
var DocumentConverter = require("./document-to-html").DocumentConverter;
var readStyle = require("./style-reader").readStyle;
var readOptions = require("./options-reader").readOptions;
+var unzip = require("./unzip");
exports.convertToHtml = convertToHtml;
exports.convertToMarkdown = convertToMarkdown;
@@ -10,8 +12,7 @@ exports.extractRawText = extractRawText;
exports.images = require("./images");
exports.transforms = require("./transforms");
exports.underline = require("./underline");
-var docxStyleMap = require("./docx/style-map");
-exports.writeStyleMapToDocx = docxStyleMap.writeStyleMap;
+exports.writeStyleMapToDocx = writeStyleMapToDocx;
function convertToHtml(input, options) {
return convert(input, options);
@@ -25,15 +26,18 @@ function convertToMarkdown(input, options) {
function convert(input, options) {
options = options || {};
- return docxStyleMap.readStyleMap(input)
- .then(function(styleMap) {
- if (!options.styleMap && styleMap) {
- options.styleMap = styleMap;
+
+ return unzip.openZip(input)
+ .tap(function(docxFile) {
+ if (!options.styleMap) {
+ return docxStyleMap.readStyleMap(docxFile).then(function(styleMap) {
+ options.styleMap = styleMap || "";
+ });
}
})
- .then(function() {
+ .then(function(docxFile) {
var fullOptions = readOptions(options);
- return docxReader.read(input)
+ return docxReader.read(docxFile)
.then(function(documentResult) {
return documentResult.map(fullOptions.transformDocument);
})
@@ -41,6 +45,7 @@ function convert(input, options) {
return convertDocumentToHtml(documentResult, fullOptions);
});
});
+
}
function convertDocumentToHtml(documentResult, options) {
@@ -54,7 +59,8 @@ function convertDocumentToHtml(documentResult, options) {
function extractRawText(input) {
- return docxReader.read(input)
+ return unzip.openZip(input)
+ .then(docxReader.read)
.then(function(documentResult) {
return documentResult.map(convertElementToRawText);
});
@@ -69,6 +75,17 @@ function convertElementToRawText(element) {
}
}
+function writeStyleMapToDocx(input, styleMap) {
+ return unzip.openZip(input)
+ .then(function(docxFile) {
+ docxStyleMap.writeStyleMap(docxFile, styleMap);
+
+ return {
+ toBuffer: docxFile.toBuffer
+ };
+ });
+}
+
exports.styleMapping = function() {
throw new Error('Use a raw string instead of mammoth.styleMapping e.g. "p[style-name=\'Title\'] => h1" instead of mammoth.styleMapping("p[style-name=\'Title\'] => h1")');
};
diff --git a/lib/unzip.js b/lib/unzip.js
index 51c34a3..ada19f3 100644
--- a/lib/unzip.js
+++ b/lib/unzip.js
@@ -13,9 +13,9 @@ function openZip(options) {
if (options.path) {
return readFile(options.path).then(zipfile.openArrayBuffer);
} else if (options.buffer) {
- return zipfile.openArrayBuffer(options.buffer);
+ return promises.resolve(zipfile.openArrayBuffer(options.buffer));
} else if (options.file) {
- return options.file;
+ return promises.resolve(options.file);
} else {
return promises.reject(new Error("Could not find file in options"));
}