From ff3cfe7892c591a9c3bb79335b9571f9f4a1b4b0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 28 May 2025 20:03:21 +0100 Subject: Handle AlternateContent without Fallback in office-xml-reader --- lib/docx/office-xml-reader.js | 2 +- 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 = - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - ''; - 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 = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + 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 = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + return officeXmlReader.read(xmlString).then(function(element) { + assert.deepEqual(element.children, []); + }); + } }); -- cgit v1.2.3