diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-09-26 21:57:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-09-26 21:57:10 +0100 |
| commit | 671dbb6ae5738d6bf8f97d13dd08bfc0a23e0b04 (patch) | |
| tree | 275ea48c22a40f7702e6a40f0f58f46d6b39a7f3 | |
| parent | d1573743476bb99e8b9e3aba05e51ec51ae8f95f (diff) | |
Handle paragraphs and runs that have been moved and tracked as a revision
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 6 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 33 |
3 files changed, 41 insertions, 0 deletions
@@ -15,6 +15,8 @@ * Read the children of w:customXml elements. +* Handle paragraphs and runs that have been moved and tracked as a revision. + # 1.12.3 * Avoid excessive backtracking when parsing an unterminated string with many diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index f9ab168..ddc4fce 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -445,6 +445,11 @@ function BodyReader(options) { "w:customXml": readChildElements, "w:ins": readChildElements, + "w:moveFromRangeEnd": readChildElements, + "w:moveFromRangeStart": readChildElements, + "w:moveTo": readChildElements, + "w:moveToRangeEnd": readChildElements, + "w:moveToRangeStart": readChildElements, "w:object": readChildElements, "w:smartTag": readChildElements, "w:drawing": readChildElements, @@ -724,6 +729,7 @@ var ignoreElements = { "w:del": true, "w:footnoteRef": true, "w:endnoteRef": true, + "w:moveFrom": true, "w:pPr": true, "w:rPr": true, "w:tblPr": true, diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index 197f19d..a8b9c7c 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -1758,6 +1758,26 @@ test("children of w:ins are converted normally", function() { assertChildrenAreConvertedNormally("w:ins"); }); +test("children of w:moveFromRangeEnd are converted normally", function() { + assertChildrenAreConvertedNormally("w:moveFromRangeEnd"); +}); + +test("children of w:moveFromRangeStart are converted normally", function() { + assertChildrenAreConvertedNormally("w:moveFromRangeStart"); +}); + +test("children of w:moveTo are converted normally", function() { + assertChildrenAreConvertedNormally("w:moveTo"); +}); + +test("children of w:moveToRangeEnd are converted normally", function() { + assertChildrenAreConvertedNormally("w:moveToRangeEnd"); +}); + +test("children of w:moveToRangeStart are converted normally", function() { + assertChildrenAreConvertedNormally("w:moveToRangeStart"); +}); + test("children of w:object are converted normally", function() { assertChildrenAreConvertedNormally("w:object"); }); @@ -1978,6 +1998,19 @@ test("text nodes are ignored when reading children", function() { assert.deepEqual(run, new documents.Run([])); }); +test("w:moveFrom elements are ignored", function() { + assertElementIsIgnored("w:moveFrom"); +}); + +function assertElementIsIgnored(tagName) { + var runXml = new XmlElement("w:r", {}, [ + xml.element("w:t", {}, [xml.text("Blackdown")]) + ]); + var result = readXmlElement(new XmlElement(tagName, {}, [runXml])); + assert.deepEqual(result.messages, []); + assert.deepEqual(result.value, []); +} + function paragraphWithStyleId(styleId) { return new XmlElement("w:p", {}, [ new XmlElement("w:pPr", {}, [ |
