From 1c582ffacd0e18d6be385285e54495945d8ec400 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 20 Dec 2015 20:40:31 +0000 Subject: Always use mc:Fallback when reading mc:AlternateContent elements --- lib/docx/office-xml-reader.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/docx/office-xml-reader.js b/lib/docx/office-xml-reader.js index 93d1d34..f9e0b8b 100644 --- a/lib/docx/office-xml-reader.js +++ b/lib/docx/office-xml-reader.js @@ -1,7 +1,10 @@ +var _ = require("underscore"); + var promises = require("../promises"); var xml = require("../xml"); +exports.read = read; exports.readXmlFromZipFile = readXmlFromZipFile; var xmlNamespaceMap = { @@ -18,7 +21,11 @@ var xmlNamespaceMap = { function read(xmlString) { - return xml.readString(xmlString, xmlNamespaceMap); + return xml.readString(xmlString, xmlNamespaceMap) + .then(function(document) { + document.root = collapseAlternateContent(document.root)[0]; + return document; + }); } @@ -36,3 +43,17 @@ function readXmlFromZipFile(docxFile, path) { function stripUtf8Bom(xmlString) { return xmlString.replace(/^\uFEFF/g, ''); } + + +function collapseAlternateContent(node) { + if (node.type === "element") { + if (node.name === "mc:AlternateContent") { + return node.first("mc:Fallback").children; + } else { + node.children = _.flatten(node.children.map(collapseAlternateContent, true)); + return [node]; + } + } else { + return [node]; + } +} -- cgit v1.2.3