diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-05-03 21:27:00 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-05-03 21:27:00 +0100 |
| commit | ce01e3ec266ca3cbd96832766174e49337db98f8 (patch) | |
| tree | 60a6bec29909354bd95ecac7319f94f9bbde1d1e | |
| parent | 23438dd97f93b86115cc4196c88d12e5168acbd5 (diff) | |
Replace paragraphStyleMap with more general styleMap
| -rw-r--r-- | lib/document-matchers.js | 17 | ||||
| -rw-r--r-- | lib/document-to-html.js | 13 | ||||
| -rw-r--r-- | lib/index.js | 36 | ||||
| -rw-r--r-- | tests/document-to-html.tests.js | 19 |
4 files changed, 65 insertions, 20 deletions
diff --git a/lib/document-matchers.js b/lib/document-matchers.js new file mode 100644 index 0000000..6a35b51 --- /dev/null +++ b/lib/document-matchers.js @@ -0,0 +1,17 @@ +exports.paragraph = paragraph; +exports.run = run; + + +function paragraph(styleName) { + return matcher("paragraph", styleName); +} + +function run(styleName) { + return matcher("run", styleName); +} + +function matcher(elementType, styleName) { + return function(element) { + return element.type === elementType && element.styleName === styleName; + }; +} diff --git a/lib/document-to-html.js b/lib/document-to-html.js index 47e7e86..896053f 100644 --- a/lib/document-to-html.js +++ b/lib/document-to-html.js @@ -12,7 +12,7 @@ function DocumentConverter(options) { options = options || {}; var defaultParagraphStyle = options.defaultParagraphStyle || htmlPaths.topLevelElement("p"); - var paragraphStyleMap = options.paragraphStyleMap || {}; + var styleMap = options.styleMap || []; var runStyleMap = options.runStyleMap || {}; function convertToHtml(document) { @@ -47,11 +47,16 @@ function DocumentConverter(options) { } function styleForParagraph(element, messages) { - var htmlPath = paragraphStyleMap[element.styleName]; - if (element.styleName && !htmlPath) { + for (var i = 0; i < styleMap.length; i++) { + if (styleMap[i].from(element)) { + return styleMap[i].to; + } + } + + if (element.styleName) { messages.push(results.warning("Unrecognised paragraph style: " + element.styleName)); } - return htmlPath || defaultParagraphStyle; + return defaultParagraphStyle; } function convertRun(run, html, messages, callback) { diff --git a/lib/index.js b/lib/index.js index d2ccabd..2d963dc 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,22 +1,38 @@ var docxReader = require("./docx-reader"); var DocumentConverter = require("./document-to-html").DocumentConverter; var htmlPaths = require("./html-paths"); +var documentMatchers = require("./document-matchers"); exports.Converter = Converter; exports.read = read; exports.convertDocumentToHtml = convertDocumentToHtml; exports.htmlPaths = htmlPaths; exports.standardOptions = { - paragraphStyleMap: { - "Heading1": htmlPaths.topLevelElement("h1"), - "Heading2": htmlPaths.topLevelElement("h2"), - "Heading3": htmlPaths.topLevelElement("h3"), - "Heading4": htmlPaths.topLevelElement("h4"), - "ListParagraph": htmlPaths.elements([ - htmlPaths.element("ul"), - htmlPaths.element("li", {}, {fresh: true}) - ]) - } + styleMap: [ + { + from: documentMatchers.paragraph("Heading1"), + to: htmlPaths.topLevelElement("h1") + }, + { + from: documentMatchers.paragraph("Heading2"), + to: htmlPaths.topLevelElement("h2") + }, + { + from: documentMatchers.paragraph("Heading3"), + to: htmlPaths.topLevelElement("h3") + }, + { + from: documentMatchers.paragraph("Heading4"), + to: htmlPaths.topLevelElement("h4") + }, + { + from: documentMatchers.paragraph("ListParagraph"), + to: htmlPaths.elements([ + htmlPaths.element("ul"), + htmlPaths.element("li", {}, {fresh: true}) + ]) + } + ] }; function Converter(options) { diff --git a/tests/document-to-html.tests.js b/tests/document-to-html.tests.js index 63eb435..7d49529 100644 --- a/tests/document-to-html.tests.js +++ b/tests/document-to-html.tests.js @@ -7,6 +7,7 @@ var test = require("./testing").test; var htmlPaths = require("../lib/html-paths"); var xmlreader = require("../lib/xmlreader"); var results = require("../lib/results"); +var documentMatchers = require("../lib/document-matchers"); describe('DocumentConverter', function() { @@ -76,9 +77,12 @@ describe('DocumentConverter', function() { paragraphOfText("Hello.", "Heading1"), ]); var converter = new DocumentConverter({ - paragraphStyleMap: { - "Heading1": htmlPaths.topLevelElement("h1") - } + styleMap: [ + { + from: documentMatchers.paragraph("Heading1"), + to: htmlPaths.topLevelElement("h1") + } + ] }); return converter.convertToHtml(document).then(function(result) { assert.equal(result.value, "<h1>Hello.</h1>"); @@ -100,9 +104,12 @@ describe('DocumentConverter', function() { paragraphOfText("Hello.", "Heading1") ]); var converter = new DocumentConverter({ - paragraphStyleMap: { - "Heading1": htmlPaths.elements(["h1", "span"]) - } + styleMap: [ + { + from: documentMatchers.paragraph("Heading1"), + to: htmlPaths.elements(["h1", "span"]) + } + ] }); return converter.convertToHtml(document).then(function(result) { assert.equal(result.value, "<h1><span>Hello.</span></h1>"); |
