aboutsummaryrefslogtreecommitdiff
path: root/lib/docx/numbering-xml.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2021-01-09 13:12:32 +0000
committerMichael Williamson <mike@zwobble.org>2021-01-09 13:12:32 +0000
commit83431a6feb6c4bb402b5c4f7c5f6e9b6d7123426 (patch)
treebbb693a8371ead102be0ac48c7d136724fa717b0 /lib/docx/numbering-xml.js
parent9e7ca2e4a9020a488a1d7b9f371cf09f7aa69c02 (diff)
Support numbering defined by paragraph style
Diffstat (limited to 'lib/docx/numbering-xml.js')
-rw-r--r--lib/docx/numbering-xml.js27
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/docx/numbering-xml.js b/lib/docx/numbering-xml.js
index 90e479e..64c4210 100644
--- a/lib/docx/numbering-xml.js
+++ b/lib/docx/numbering-xml.js
@@ -1,8 +1,21 @@
+var _ = require("underscore");
+
exports.readNumberingXml = readNumberingXml;
exports.Numbering = Numbering;
-exports.defaultNumbering = new Numbering({});
+exports.defaultNumbering = new Numbering({}, {});
function Numbering(nums, abstractNums, styles) {
+ var allLevels = _.flatten(_.values(abstractNums).map(function(abstractNum) {
+ return _.values(abstractNum.levels);
+ }));
+
+ var levelsByParagraphStyleId = _.indexBy(
+ allLevels.filter(function(level) {
+ return level.paragraphStyleId != null;
+ }),
+ "paragraphStyleId"
+ );
+
function findLevel(numId, level) {
var num = nums[numId];
if (num) {
@@ -18,8 +31,13 @@ function Numbering(nums, abstractNums, styles) {
}
}
+ function findLevelByParagraphStyleId(styleId) {
+ return levelsByParagraphStyleId[styleId] || null;
+ }
+
return {
- findLevel: findLevel
+ findLevel: findLevel,
+ findLevelByParagraphStyleId: findLevelByParagraphStyleId
};
}
@@ -47,9 +65,12 @@ function readAbstractNum(element) {
element.getElementsByTagName("w:lvl").forEach(function(levelElement) {
var levelIndex = levelElement.attributes["w:ilvl"];
var numFmt = levelElement.first("w:numFmt").attributes["w:val"];
+ var paragraphStyleId = levelElement.firstOrEmpty("w:pStyle").attributes["w:val"];
+
levels[levelIndex] = {
isOrdered: numFmt !== "bullet",
- level: levelIndex
+ level: levelIndex,
+ paragraphStyleId: paragraphStyleId
};
});