1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
var q = require("q");
var styles = require("./styles");
var HtmlGenerator = require("./html-generator").HtmlGenerator;
exports.DocumentConverter = DocumentConverter;
exports.Document = Document;
exports.Paragraph = Paragraph;
exports.Run = Run;
exports.Text = Text;
function DocumentConverter(options) {
options = options || {};
options.paragraphStyleMap = options.paragraphStyleMap || {};
var paragraphStyleMap = options.paragraphStyleMap;
function convertToHtml(document) {
var html = new HtmlGenerator();
convertElements(document.children, html);
return q.when({
html: html.asString()
});
}
function convertElements(elements, html) {
elements.forEach(function(element) {
elementToHtml(element, html);
});
}
function elementToHtml(element, html) {
var handler = elementConverters[element.type];
if (handler) {
handler(element, html);
}
}
function convertParagraph(element, html) {
html.style(styleForParagraph(element));
convertElements(element.children, html);
}
function styleForParagraph(element) {
return paragraphStyleMap[element.properties.styleName] || styles.topLevelElement("p");
}
var elementConverters = {
"paragraph": convertParagraph,
"run": function(element, html) {
convertElements(element.children, html);
},
"text": function(element, html) {
html.text(element.value);
}
};
return {
convertToHtml: convertToHtml
}
}
function Document(children) {
return {
type: "document",
children: children
};
}
function Paragraph(children, properties) {
return {
type: "paragraph",
children: children,
properties: properties || {}
};
}
function Run(children) {
return {
type: "run",
children: children
};
}
function Text(value) {
return {
type: "text",
value: value
};
}
|