aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-03-30 22:07:37 +0000
committerMichael Williamson <mike@zwobble.org>2013-03-30 22:07:37 +0000
commit6ebcdcfad1ff8584fe4ee4f49aae0e1d51dd164a (patch)
tree0f7555af1fd2099268528b984cc1bdc7f2891e49 /lib
parent500261b4dc62024ead038bbda6a0d3325e657573 (diff)
Split out docx reading into separate module
Diffstat (limited to 'lib')
-rw-r--r--lib/docx-reader.js74
-rw-r--r--lib/index.js70
2 files changed, 79 insertions, 65 deletions
diff --git a/lib/docx-reader.js b/lib/docx-reader.js
new file mode 100644
index 0000000..3078d2f
--- /dev/null
+++ b/lib/docx-reader.js
@@ -0,0 +1,74 @@
+exports.read = read;
+
+var q = require("q");
+var _ = require("underscore");
+var ZipFile = require("zipfile").ZipFile;
+
+var xmlreader = require("./xmlreader");
+var documents = require("./documents");
+
+
+function read(docxFile) {
+ if (_.isString(docxFile)) {
+ var zipFile = new ZipFile(docxFile);
+ docxFile = {
+ read: function(path) {
+ return q.ninvoke(zipFile, "readFile", path, "utf-8")
+ .then(function(value) {
+ return value.toString();
+ });
+ }
+ };
+ }
+
+ return docxFile.read("word/document.xml")
+ .then(xmlreader.read)
+ .then(convertXmlToDocument);
+}
+
+function convertXmlToDocument(documentXml) {
+ var body = documentXml.root.first("w:body");
+
+ var children = readXmlElements(body.children);
+ return new documents.Document(children);
+}
+
+function readXmlElements(elements) {
+ return elements.map(readXmlElement).filter(notNull);
+}
+
+function readXmlElement(element) {
+ if (element.type === "element") {
+ var handler = xmlElementReaders[element.name];
+ if (handler) {
+ return handler(element);
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+}
+
+var xmlElementReaders = {
+ "w:p": function(element) {
+ var children = readXmlElements(element.children);
+ return new documents.Paragraph(children);
+ },
+ "w:r": function(element) {
+ var children = readXmlElements(element.children);
+ return new documents.Run(children);
+ },
+ "w:t": function(element) {
+ return new documents.Text(element.children[0].value);
+ }
+};
+
+function parseXml(string) {
+ return xmlreader.read(string);
+}
+
+function notNull(value) {
+ return value !== null;
+}
+
diff --git a/lib/index.js b/lib/index.js
index 5db51a8..b124b81 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -2,7 +2,7 @@ var q = require("q");
var _ = require("underscore");
var ZipFile = require("zipfile").ZipFile;
-var xmlreader = require("./xmlreader");
+var docxReader = require("./docx-reader");
var documents = require("./documents");
var styles = require("./styles");
@@ -21,69 +21,9 @@ function Converter(options) {
}
Converter.prototype.convertToHtml = function(docxFile) {
- if (_.isString(docxFile)) {
- var zipFile = new ZipFile(docxFile);
- docxFile = {
- read: function(path) {
- return q.ninvoke(zipFile, "readFile", path, "utf-8")
- .then(function(value) {
- return value.toString();
- });
- }
- };
- }
-
var documentConverter = this._documentConverter;
- return docxFile.read("word/document.xml").then(function(documentXmlString) {
- return parseXml(documentXmlString);
- }).then(function(documentXml) {
- var document = convertXmlToDocument(documentXml);
- return documentConverter.convertToHtml(document);
- });
-}
-
-function convertXmlToDocument(documentXml) {
- var body = documentXml.root.first("w:body");
-
- var children = readXmlElements(body.children);
- return new documents.Document(children);
-}
-
-function readXmlElements(elements) {
- return elements.map(readXmlElement).filter(notNull);
-}
-
-function readXmlElement(element) {
- if (element.type === "element") {
- var handler = xmlElementReaders[element.name];
- if (handler) {
- return handler(element);
- } else {
- return null;
- }
- } else {
- return null;
- }
-}
-
-var xmlElementReaders = {
- "w:p": function(element) {
- var children = readXmlElements(element.children);
- return new documents.Paragraph(children);
- },
- "w:r": function(element) {
- var children = readXmlElements(element.children);
- return new documents.Run(children);
- },
- "w:t": function(element) {
- return new documents.Text(element.children[0].value);
- }
-};
-
-function parseXml(string) {
- return xmlreader.read(string);
-}
-
-function notNull(value) {
- return value !== null;
+ return docxReader.read(docxFile)
+ .then(function(document) {
+ return documentConverter.convertToHtml(document);
+ });
}