aboutsummaryrefslogtreecommitdiff
path: root/lib/index.js
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/index.js
parent500261b4dc62024ead038bbda6a0d3325e657573 (diff)
Split out docx reading into separate module
Diffstat (limited to 'lib/index.js')
-rw-r--r--lib/index.js70
1 files changed, 5 insertions, 65 deletions
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);
+ });
}