aboutsummaryrefslogtreecommitdiff
path: root/lib/docx/body-reader.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/docx/body-reader.js')
-rw-r--r--lib/docx/body-reader.js31
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js
index a4a6c0c..2726b76 100644
--- a/lib/docx/body-reader.js
+++ b/lib/docx/body-reader.js
@@ -7,6 +7,7 @@ var _ = require("underscore");
var documents = require("../documents");
var Result = require("../results").Result;
var warning = require("../results").warning;
+var xml = require("../xml");
var uris = require("./uris");
function createBodyReader(options) {
@@ -157,21 +158,26 @@ function BodyReader(options) {
return elementResultWithMessages({styleId: styleId, name: name}, messages);
}
- var unknownComplexField = {type: "unknown"};
-
function readFldChar(element) {
var type = element.attributes["w:fldCharType"];
if (type === "begin") {
- complexFieldStack.push(unknownComplexField);
+ complexFieldStack.push({type: "begin", fldChar: element});
currentInstrText = [];
} else if (type === "end") {
var complexFieldEnd = complexFieldStack.pop();
if (complexFieldEnd.type === "checkbox") {
- return elementResult(documents.checkbox({checked: false}));
+ return elementResult(documents.checkbox({
+ checked: complexFieldEnd.checked
+ }));
}
} else if (type === "separate") {
- var complexField = parseInstrText(currentInstrText.join(''));
- complexFieldStack.pop();
+ var complexFieldSeparate = complexFieldStack.pop();
+ var complexField = parseInstrText(
+ currentInstrText.join(''),
+ complexFieldSeparate.type === "begin"
+ ? complexFieldSeparate.fldChar
+ : xml.emptyElement
+ );
complexFieldStack.push(complexField);
}
return emptyResult();
@@ -184,7 +190,7 @@ function BodyReader(options) {
return topHyperlink ? topHyperlink.options : null;
}
- function parseInstrText(instrText) {
+ function parseInstrText(instrText, fldChar) {
var externalLinkResult = /\s*HYPERLINK "(.*)"/.exec(instrText);
if (externalLinkResult) {
return {type: "hyperlink", options: {href: externalLinkResult[1]}};
@@ -197,10 +203,17 @@ function BodyReader(options) {
var checkboxResult = /\s*FORMCHECKBOX\s*/.exec(instrText);
if (checkboxResult) {
- return {type: "checkbox"};
+ var checkboxElement = fldChar
+ .firstOrEmpty("w:ffData")
+ .firstOrEmpty("w:checkBox");
+ var defaultValue = readBooleanElement(
+ checkboxElement.first("w:default")
+ );
+ var checked = defaultValue;
+ return {type: "checkbox", checked: checked};
}
- return unknownComplexField;
+ return {type: "unknown"};
}
function readInstrText(element) {