summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-20 19:05:26 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-20 19:05:26 +0000
commit2f693566b23e24933492574aea5be2be1fd6706c (patch)
tree17eee94c7c099076d38a13bbbf40447f7780a12f
parent59a6ddc8938915f17fb4df4d6ff27451af79c6ad (diff)
Prefer numbering properties to numbering from paragraph style
-rw-r--r--NEWS4
-rw-r--r--lib/docx/body-reader.js14
-rw-r--r--test/docx/body-reader.tests.js20
3 files changed, 29 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index cb1ab7d..69b2d21 100644
--- a/NEWS
+++ b/NEWS
@@ -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"}}, {});