diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-08-12 21:57:45 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-08-12 21:57:45 +0100 |
| commit | 4b4ec85bc4f49e72244f7219539124b45b876d8e (patch) | |
| tree | 0aa4c2005526fa5130bccbfd26f3a9cab6f8d4cb /lib | |
| parent | 5f5217a4e16f7be697b24a46cf58e47753967d95 (diff) | |
Open zip file before passing to readers
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/docx/docx-reader.js | 14 | ||||
| -rw-r--r-- | lib/docx/style-map.js | 28 | ||||
| -rw-r--r-- | lib/index.js | 35 | ||||
| -rw-r--r-- | lib/unzip.js | 4 |
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")); } |
