diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-03-20 19:05:26 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-03-20 19:05:26 +0000 |
| commit | 2f693566b23e24933492574aea5be2be1fd6706c (patch) | |
| tree | 17eee94c7c099076d38a13bbbf40447f7780a12f | |
| parent | 59a6ddc8938915f17fb4df4d6ff27451af79c6ad (diff) | |
Prefer numbering properties to numbering from paragraph style
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 14 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 20 |
3 files changed, 29 insertions, 9 deletions
@@ -2,6 +2,10 @@ * Handle numbering level definitions without an explicit format. +* Switch the precedence of numbering properties in paragraph properties and the + numbering in paragraph styles so that the numbering properties in paragraph + properties takes precedence. + # 1.7.0 * Support attributes in HTML paths in style mappings. diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index b9bdb57..7a00164 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -553,6 +553,12 @@ function BodyReader(options) { function readNumberingProperties(styleId, element, numbering) { + var level = element.firstOrEmpty("w:ilvl").attributes["w:val"]; + var numId = element.firstOrEmpty("w:numId").attributes["w:val"]; + if (level !== undefined && numId !== undefined) { + return numbering.findLevel(numId, level); + } + if (styleId != null) { var levelByStyleId = numbering.findLevelByParagraphStyleId(styleId); if (levelByStyleId != null) { @@ -560,13 +566,7 @@ function readNumberingProperties(styleId, element, numbering) { } } - var level = element.firstOrEmpty("w:ilvl").attributes["w:val"]; - var numId = element.firstOrEmpty("w:numId").attributes["w:val"]; - if (level === undefined || numId === undefined) { - return null; - } else { - return numbering.findLevel(numId, level); - } + return null; } var supportedImageTypes = { diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index da9501d..5623f66 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -171,7 +171,22 @@ test("paragraph has numbering properties from paragraph properties if present", assert.deepEqual(paragraph.numbering, {level: "1", isOrdered: true}); }); -test("numbering on paragraph style takes precedence over numPr", function() { +test("paragraph has numbering from paragraph style if present", function() { + var propertiesXml = new XmlElement("w:pPr", {}, [ + new XmlElement("w:pStyle", {"w:val": "List"}) + ]); + var paragraphXml = new XmlElement("w:p", {}, [propertiesXml]); + + var numbering = new NumberingMap({ + findLevelByParagraphStyleId: {"List": {isOrdered: true, level: "1"}} + }); + var styles = new Styles({"List": {name: "List"}}, {}); + + var paragraph = readXmlElementValue(paragraphXml, {numbering: numbering, styles: styles}); + assert.deepEqual(paragraph.numbering, {level: "1", isOrdered: true}); +}); + +test("numbering properties in paragraph properties takes precedence over numbering in paragraph style", function() { var numberingPropertiesXml = new XmlElement("w:numPr", {}, [ new XmlElement("w:ilvl", {"w:val": "1"}), new XmlElement("w:numId", {"w:val": "42"}) @@ -183,7 +198,8 @@ test("numbering on paragraph style takes precedence over numPr", function() { var paragraphXml = new XmlElement("w:p", {}, [propertiesXml]); var numbering = new NumberingMap({ - findLevelByParagraphStyleId: {"List": {isOrdered: true, level: "1"}} + findLevel: {"42": {"1": {isOrdered: true, level: "1"}}}, + findLevelByParagraphStyleId: {"List": {isOrdered: true, level: "2"}} }); var styles = new Styles({"List": {name: "List"}}, {}); |
