summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-05-03 21:27:00 +0100
committerMichael Williamson <mike@zwobble.org>2013-05-03 21:27:00 +0100
commitce01e3ec266ca3cbd96832766174e49337db98f8 (patch)
tree60a6bec29909354bd95ecac7319f94f9bbde1d1e
parent23438dd97f93b86115cc4196c88d12e5168acbd5 (diff)
Replace paragraphStyleMap with more general styleMap
-rw-r--r--lib/document-matchers.js17
-rw-r--r--lib/document-to-html.js13
-rw-r--r--lib/index.js36
-rw-r--r--tests/document-to-html.tests.js19
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>");