aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-04-01 12:33:12 +0100
committerMichael Williamson <mike@zwobble.org>2013-04-01 12:33:12 +0100
commite8e2652dac7f2f36158136c3c30072c801d2b1d2 (patch)
treea64955888ce7b800aa70bd43835c2006ec152f8e
parentae79414cfbedc7e630cdc5f3955bb49ee64c732e (diff)
Include run properties on run elements
-rw-r--r--lib/documents.js5
-rw-r--r--lib/docx-reader.js10
-rw-r--r--tests/docx-reader.tests.js16
3 files changed, 28 insertions, 3 deletions
diff --git a/lib/documents.js b/lib/documents.js
index 83a8106..cee1b48 100644
--- a/lib/documents.js
+++ b/lib/documents.js
@@ -76,10 +76,11 @@ function Paragraph(children, properties) {
};
}
-function Run(children) {
+function Run(children, properties) {
return {
type: "run",
- children: children
+ children: children,
+ properties: properties || {}
};
}
diff --git a/lib/docx-reader.js b/lib/docx-reader.js
index 5cc13ae..d30a822 100644
--- a/lib/docx-reader.js
+++ b/lib/docx-reader.js
@@ -75,7 +75,11 @@ var xmlElementReaders = {
},
"w:r": function(element) {
var children = readXmlElements(element.children);
- return new documents.Run(children);
+ var properties = _.find(children, isRunProperties);
+ return new documents.Run(
+ children.filter(negate(isRunProperties)),
+ properties
+ );
},
"w:rPr": function(element) {
var properties = {
@@ -106,6 +110,10 @@ function isParagraphProperties(element) {
return element.type === "paragraphProperties";
}
+function isRunProperties(element) {
+ return element.type === "runProperties";
+}
+
function negate(predicate) {
return function(value) {
return !predicate(value);
diff --git a/tests/docx-reader.tests.js b/tests/docx-reader.tests.js
index c4969be..f0a4b6e 100644
--- a/tests/docx-reader.tests.js
+++ b/tests/docx-reader.tests.js
@@ -55,4 +55,20 @@ describe("readElement", function() {
var element = docxReader.readXmlElement(runPropertiesXml);
assert.equal(element.styleName, "Emphasis");
});
+
+ test("run properties are attached to run", function() {
+ var runStyleXml = new XmlElement("w:rStyle", {"w:val": "Emphasis"});
+ var runPropertiesXml = new XmlElement("w:rPr", {}, [runStyleXml]);
+ var runXml = new XmlElement("w:r", {}, [runPropertiesXml]);
+ var element = docxReader.readXmlElement(runXml);
+ assert.equal(element.properties.styleName, "Emphasis");
+ });
+
+ test("run properties not included as child of run", function() {
+ var runStyleXml = new XmlElement("w:rStyle", {"w:val": "Emphasis"});
+ var runPropertiesXml = new XmlElement("w:rPr", {}, [runStyleXml]);
+ var runXml = new XmlElement("w:r", {}, [runPropertiesXml]);
+ var element = docxReader.readXmlElement(runXml);
+ assert.deepEqual(element.children, []);
+ });
});