aboutsummaryrefslogtreecommitdiff
path: root/lib/docx/docx-reader.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-07-03 22:31:29 +0100
committerMichael Williamson <mike@zwobble.org>2015-07-03 22:31:29 +0100
commit27f3d32cabc5fae5b163ddf5a5449d93ebd959d5 (patch)
tree373e830e2c15ad5252000c06aba70e4b144127d4 /lib/docx/docx-reader.js
parentcd3b84e15ea1a47ff8ebcca18d68ef0cdccf20b8 (diff)
Read note bodies immediately using relationships
Diffstat (limited to 'lib/docx/docx-reader.js')
-rw-r--r--lib/docx/docx-reader.js89
1 files changed, 54 insertions, 35 deletions
diff --git a/lib/docx/docx-reader.js b/lib/docx/docx-reader.js
index 80842d7..a976ef3 100644
--- a/lib/docx/docx-reader.js
+++ b/lib/docx/docx-reader.js
@@ -2,6 +2,8 @@ exports.read = read;
var promises = require("../promises");
var unzip = require("../unzip");
+var documents = require("../documents");
+var Result = require("../results").Result;
var readXmlFromZipFile = require("./office-xml-reader").readXmlFromZipFile;
var BodyReader = require("./body-reader").BodyReader;
@@ -18,32 +20,45 @@ function read(options) {
docxFile: unzip.openZip(options)
}).also(function(result) {
return {
- relationships: readRelationshipsFromZipFile(result.docxFile),
contentTypes: readContentTypesFromZipFile(result.docxFile),
numbering: readNumberingFromZipFile(result.docxFile),
styles: readStylesFromZipFile(result.docxFile)
};
}).also(function(result) {
- var bodyReader = new BodyReader({
- relationships: result.relationships,
- contentTypes: result.contentTypes,
- docxFile: result.docxFile,
- numbering: result.numbering,
- styles: result.styles
- });
return {
- documentBodyReader: bodyReader,
- footnotes: readFootnotesFromZipFile(result.docxFile),
- endnotes: readEndnotesFromZipFile(result.docxFile),
- documentXml: readXmlFromZipFile(result.docxFile, "word/document.xml")
+ footnotes: readXmlFileWithBody("footnotes", result, function(bodyReader, xml) {
+ if (xml) {
+ return notesReader.createFootnotesReader(bodyReader)(xml);
+ } else {
+ return new Result([]);
+ }
+ }),
+ endnotes: readXmlFileWithBody("endnotes", result, function(bodyReader, xml) {
+ if (xml) {
+ return notesReader.createEndnotesReader(bodyReader)(xml);
+ } else {
+ return new Result([]);
+ }
+ })
+ };
+ }).also(function(result) {
+ return {
+ notes: result.footnotes.flatMap(function(footnotes) {
+ return result.endnotes.map(function(endnotes) {
+ return new documents.Notes(footnotes.concat(endnotes));
+ });
+ })
};
}).then(function(result) {
- var reader = new DocumentXmlReader({
- bodyReader: result.documentBodyReader,
- footnotes: result.footnotes,
- endnotes: result.endnotes
+ return readXmlFileWithBody("document", result, function(bodyReader, xml) {
+ return result.notes.flatMap(function(notes) {
+ var reader = new DocumentXmlReader({
+ bodyReader: bodyReader,
+ notes: notes,
+ });
+ return reader.convertXmlToDocument(xml);
+ });
});
- return reader.convertXmlToDocument(result.documentXml);
});
}
@@ -56,18 +71,34 @@ function xmlFileReader(options) {
};
}
+function readXmlFileWithBody(name, options, func) {
+ var readRelationshipsFromZipFile = xmlFileReader({
+ filename: "word/_rels/" + name + ".xml.rels",
+ readElement: relationshipsReader.readRelationships,
+ defaultValue: {}
+ });
+
+ return readRelationshipsFromZipFile(options.docxFile).then(function(relationships) {
+ var bodyReader = new BodyReader({
+ relationships: relationships,
+ contentTypes: options.contentTypes,
+ docxFile: options.docxFile,
+ numbering: options.numbering,
+ styles: options.styles
+ });
+ return readXmlFromZipFile(options.docxFile, "word/" + name + ".xml")
+ .then(function(xml) {
+ return func(bodyReader, xml);
+ });
+ });
+}
+
var readContentTypesFromZipFile = xmlFileReader({
filename: "[Content_Types].xml",
readElement: contentTypesReader.readContentTypesFromXml,
defaultValue: contentTypesReader.defaultContentTypes
});
-var readRelationshipsFromZipFile = xmlFileReader({
- filename: "word/_rels/document.xml.rels",
- readElement: relationshipsReader.readRelationships,
- defaultValue: {}
-});
-
var readNumberingFromZipFile = xmlFileReader({
filename: "word/numbering.xml",
readElement: numberingXml.readNumberingXml,
@@ -79,15 +110,3 @@ var readStylesFromZipFile = xmlFileReader({
readElement: stylesReader.readStylesXml,
defaultValue: stylesReader.defaultStyles
});
-
-var readFootnotesFromZipFile = xmlFileReader({
- filename: "word/footnotes.xml",
- readElement: notesReader.readFootnotesXml,
- defaultValue: undefined
-});
-
-var readEndnotesFromZipFile = xmlFileReader({
- filename: "word/endnotes.xml",
- readElement: notesReader.readEndnotesXml,
- defaultValue: undefined
-});