diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-03-29 20:42:38 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-03-29 20:42:38 +0000 |
| commit | e3891290bd3034d0ce8034387ffab1e5a9793a70 (patch) | |
| tree | 3e9ba68c93ac030c34aaee66a5929815cf037c21 /lib | |
| parent | 59421d9ef6d1521f19b83a8409934682592ccae6 (diff) | |
Add basic style mappings for paragraphs
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/documents.js | 75 |
1 files changed, 46 insertions, 29 deletions
diff --git a/lib/documents.js b/lib/documents.js index d51e604..5d2d0b7 100644 --- a/lib/documents.js +++ b/lib/documents.js @@ -1,3 +1,5 @@ +var util = require("util"); + var q = require("q"); exports.DocumentConverter = DocumentConverter; @@ -6,38 +8,52 @@ exports.Paragraph = Paragraph; exports.Run = Run; exports.Text = Text; -function DocumentConverter() { -} - -DocumentConverter.prototype.convertToHtml = function(document) { - var html = document.children.map(elementToHtml).join(""); +function DocumentConverter(options) { + options = options || {}; + options.paragraphStyleMap = options.paragraphStyleMap || {}; - return q.when({ - html: html - }); -} - -function elementToHtml(element) { - var handler = elementConverters[element.type]; - if (handler) { - return handler(element); - } else { - return ""; + var paragraphStyleMap = options.paragraphStyleMap; + + function convertToHtml(document) { + var html = document.children.map(elementToHtml).join(""); + + return q.when({ + html: html + }); } -} -var elementConverters = { - "paragraph": function(element) { + function elementToHtml(element) { + var handler = elementConverters[element.type]; + if (handler) { + return handler(element); + } else { + return ""; + } + } + + function convertParagraph(element) { var innerHtml = element.children.map(elementToHtml).join(""); - return "<p>" + innerHtml + "</p>"; - }, - "run": function(element) { - return element.children.map(elementToHtml).join(""); - }, - "text": function(element) { - return element.value; + var tagName = styleForParagraph(element); + return util.format("<%s>%s</%s>", tagName, innerHtml, tagName); } -}; + + function styleForParagraph(element) { + return paragraphStyleMap[element.properties.styleName] || "p"; + } + + var elementConverters = { + "paragraph": convertParagraph, + "run": function(element) { + return element.children.map(elementToHtml).join(""); + }, + "text": function(element) { + return element.value; + } + }; + return { + convertToHtml: convertToHtml + } +} function Document(children) { return { @@ -46,10 +62,11 @@ function Document(children) { }; } -function Paragraph(children) { +function Paragraph(children, properties) { return { type: "paragraph", - children: children + children: children, + properties: properties || {} }; } |
