diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-11-30 11:20:20 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-11-30 11:20:20 +0000 |
| commit | 3751195339954f49f525446de0795d2acad2c234 (patch) | |
| tree | fb177eed0d2ad356f438cbfb35ff045760c87f0e /lib | |
| parent | f79db6f1dd40c5ff0325e2a5ea4d99485ce18bf4 (diff) | |
Read complex field checkboxes, always unchecked
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/documents.js | 9 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 25 |
2 files changed, 25 insertions, 9 deletions
diff --git a/lib/documents.js b/lib/documents.js index c37ec05..2613a7a 100644 --- a/lib/documents.js +++ b/lib/documents.js @@ -6,6 +6,7 @@ var types = exports.types = { run: "run", text: "text", tab: "tab", + checkbox: "checkbox", hyperlink: "hyperlink", noteReference: "noteReference", image: "image", @@ -87,6 +88,13 @@ function Tab() { }; } +function Checkbox(options) { + return { + type: types.checkbox, + checked: options.checked + }; +} + function Hyperlink(children, options) { return { type: types.hyperlink, @@ -227,6 +235,7 @@ exports.paragraph = exports.Paragraph = Paragraph; exports.run = exports.Run = Run; exports.text = exports.Text = Text; exports.tab = exports.Tab = Tab; +exports.checkbox = exports.Checkbox = Checkbox; exports.Hyperlink = Hyperlink; exports.noteReference = exports.NoteReference = NoteReference; exports.Notes = Notes; diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index 28bd2ef..a4a6c0c 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -165,10 +165,12 @@ function BodyReader(options) { complexFieldStack.push(unknownComplexField); currentInstrText = []; } else if (type === "end") { - complexFieldStack.pop(); + var complexFieldEnd = complexFieldStack.pop(); + if (complexFieldEnd.type === "checkbox") { + return elementResult(documents.checkbox({checked: false})); + } } else if (type === "separate") { - var hyperlinkOptions = parseHyperlinkFieldCode(currentInstrText.join('')); - var complexField = hyperlinkOptions === null ? unknownComplexField : {type: "hyperlink", options: hyperlinkOptions}; + var complexField = parseInstrText(currentInstrText.join('')); complexFieldStack.pop(); complexFieldStack.push(complexField); } @@ -182,18 +184,23 @@ function BodyReader(options) { return topHyperlink ? topHyperlink.options : null; } - function parseHyperlinkFieldCode(code) { - var externalLinkResult = /\s*HYPERLINK "(.*)"/.exec(code); + function parseInstrText(instrText) { + var externalLinkResult = /\s*HYPERLINK "(.*)"/.exec(instrText); if (externalLinkResult) { - return {href: externalLinkResult[1]}; + return {type: "hyperlink", options: {href: externalLinkResult[1]}}; } - var internalLinkResult = /\s*HYPERLINK\s+\\l\s+"(.*)"/.exec(code); + var internalLinkResult = /\s*HYPERLINK\s+\\l\s+"(.*)"/.exec(instrText); if (internalLinkResult) { - return {anchor: internalLinkResult[1]}; + return {type: "hyperlink", options: {anchor: internalLinkResult[1]}}; + } + + var checkboxResult = /\s*FORMCHECKBOX\s*/.exec(instrText); + if (checkboxResult) { + return {type: "checkbox"}; } - return null; + return unknownComplexField; } function readInstrText(element) { |
