diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-03-30 22:07:37 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-03-30 22:07:37 +0000 |
| commit | 6ebcdcfad1ff8584fe4ee4f49aae0e1d51dd164a (patch) | |
| tree | 0f7555af1fd2099268528b984cc1bdc7f2891e49 /lib | |
| parent | 500261b4dc62024ead038bbda6a0d3325e657573 (diff) | |
Split out docx reading into separate module
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/docx-reader.js | 74 | ||||
| -rw-r--r-- | lib/index.js | 70 |
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); + }); } |
