diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-05-28 20:03:21 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-05-28 20:03:21 +0100 |
| commit | ff3cfe7892c591a9c3bb79335b9571f9f4a1b4b0 (patch) | |
| tree | e300da85c3b3d7ee971719cb6c9734860840b203 | |
| parent | 5896154e69430a67a758864576c5eda8796f152a (diff) | |
Handle AlternateContent without Fallback in office-xml-reader
| -rw-r--r-- | lib/docx/office-xml-reader.js | 2 | ||||
| -rw-r--r-- | test/docx/office-xml-reader.tests.js | 49 |
2 files changed, 34 insertions, 17 deletions
diff --git a/lib/docx/office-xml-reader.js b/lib/docx/office-xml-reader.js index 43e5250..792cd7c 100644 --- a/lib/docx/office-xml-reader.js +++ b/lib/docx/office-xml-reader.js @@ -62,7 +62,7 @@ function stripUtf8Bom(xmlString) { function collapseAlternateContent(node) { if (node.type === "element") { if (node.name === "mc:AlternateContent") { - return node.first("mc:Fallback").children; + return node.firstOrEmpty("mc:Fallback").children; } else { node.children = _.flatten(node.children.map(collapseAlternateContent, true)); return [node]; diff --git a/test/docx/office-xml-reader.tests.js b/test/docx/office-xml-reader.tests.js index 9a053bc..a017315 100644 --- a/test/docx/office-xml-reader.tests.js +++ b/test/docx/office-xml-reader.tests.js @@ -5,20 +5,37 @@ var officeXmlReader = require("../../lib/docx/office-xml-reader"); var test = require("../test")(module); -test("mc:AlternateContent is replaced by contents of mc:Fallback", function() { - var xmlString = - '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + - '<numbering xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">' + - '<mc:AlternateContent>' + - '<mc:Choice Requires="w14">' + - '<choice/>' + - '</mc:Choice>' + - '<mc:Fallback>' + - '<fallback/>' + - '</mc:Fallback>' + - '</mc:AlternateContent>' + - '</numbering>'; - return officeXmlReader.read(xmlString).then(function(element) { - assert.deepEqual(element.children, [xml.element("fallback")]); - }); +test("mc:AlternateContent", { + "when mc:Fallback is present then mc:Fallback is read": function() { + var xmlString = + '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + + '<numbering xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">' + + '<mc:AlternateContent>' + + '<mc:Choice Requires="w14">' + + '<choice/>' + + '</mc:Choice>' + + '<mc:Fallback>' + + '<fallback/>' + + '</mc:Fallback>' + + '</mc:AlternateContent>' + + '</numbering>'; + return officeXmlReader.read(xmlString).then(function(element) { + assert.deepEqual(element.children, [xml.element("fallback")]); + }); + }, + + "when mc:Fallback is not present then element is ignored": function() { + var xmlString = + '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + + '<numbering xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">' + + '<mc:AlternateContent>' + + '<mc:Choice Requires="w14">' + + '<choice/>' + + '</mc:Choice>' + + '</mc:AlternateContent>' + + '</numbering>'; + return officeXmlReader.read(xmlString).then(function(element) { + assert.deepEqual(element.children, []); + }); + } }); |
