aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-04-01 15:50:24 +0100
committerMichael Williamson <mike@zwobble.org>2013-04-01 15:50:24 +0100
commit7aecbe20f174100cdc6f72238f43ef3d96e7fb50 (patch)
tree11f826c8fef2bae26397d8374f51c94d7d336791 /lib
parent6fdee5a4b57832682e1c43156b2e075a5552f595 (diff)
Have docx-reader emit warnings when finding unrecognised elements
Diffstat (limited to 'lib')
-rw-r--r--lib/docx-reader.js71
-rw-r--r--lib/index.js4
2 files changed, 52 insertions, 23 deletions
diff --git a/lib/docx-reader.js b/lib/docx-reader.js
index 44b3393..94e5f99 100644
--- a/lib/docx-reader.js
+++ b/lib/docx-reader.js
@@ -30,12 +30,17 @@ function read(docxFile) {
function convertXmlToDocument(documentXml) {
var body = documentXml.root.first("w:body");
- var children = readXmlElements(body.children);
- return new documents.Document(children);
+ return readXmlElements(body.children)
+ .map(function(children) {
+ return new documents.Document(children);
+ });
}
function readXmlElements(elements) {
- return elements.map(readXmlElement).filter(notNull);
+ var results = elements.map(readXmlElement);
+ var values = _.pluck(results, "value").filter(notNull);
+ var messages = _.pluck(results, "messages");
+ return new Result(values, messages);
}
function readXmlElement(element) {
@@ -44,22 +49,27 @@ function readXmlElement(element) {
if (handler) {
return handler(element);
} else {
- return null;
+ return new Result(
+ null,
+ [warning("An unrecognised element was ignored: " + element.name)]
+ );
}
} else {
- return null;
+ return new Result(null);
}
}
var xmlElementReaders = {
"w:p": function(element) {
- var children = readXmlElements(element.children);
- var properties = _.find(children, isParagraphProperties);
-
- return new documents.Paragraph(
- children.filter(negate(isParagraphProperties)),
- properties
- );
+ return readXmlElements(element.children)
+ .map(function(children) {
+ var properties = _.find(children, isParagraphProperties);
+
+ return new documents.Paragraph(
+ children.filter(negate(isParagraphProperties)),
+ properties
+ );
+ });
},
"w:pPr": function(element) {
var properties = {
@@ -71,15 +81,18 @@ var xmlElementReaders = {
properties.styleName = styleElement.attributes["w:val"];
}
- return properties;
+ return new Result(properties);
},
"w:r": function(element) {
- var children = readXmlElements(element.children);
- var properties = _.find(children, isRunProperties);
- return new documents.Run(
- children.filter(negate(isRunProperties)),
- properties
- );
+ return readXmlElements(element.children)
+ .map(function(children) {
+ var properties = _.find(children, isRunProperties);
+
+ return new documents.Run(
+ children.filter(negate(isRunProperties)),
+ properties
+ );
+ });
},
"w:rPr": function(element) {
var properties = {
@@ -93,10 +106,10 @@ var xmlElementReaders = {
properties.isBold = !!element.first("w:b");
properties.isItalic = !!element.first("w:i");
- return properties;
+ return new Result(properties);
},
"w:t": function(element) {
- return new documents.Text(element.children[0].value);
+ return new Result(new documents.Text(element.children[0].value));
}
};
@@ -121,3 +134,19 @@ function negate(predicate) {
return !predicate(value);
};
}
+
+function Result(value, messages) {
+ this.value = value;
+ this.messages = messages || [];
+}
+
+Result.prototype.map = function(func) {
+ return new Result(func(this.value), this.messages);
+};
+
+function warning(message) {
+ return {
+ type: "warning",
+ message: message
+ };
+}
diff --git a/lib/index.js b/lib/index.js
index 146b507..2a5283f 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -19,7 +19,7 @@ function Converter(options) {
Converter.prototype.convertToHtml = function(docxFile) {
var documentConverter = this._documentConverter;
return docxReader.read(docxFile)
- .then(function(document) {
- return documentConverter.convertToHtml(document);
+ .then(function(result) {
+ return documentConverter.convertToHtml(result.value);
});
}