diff options
| author | Michael Williamson <mike@zwobble.org> | 2021-01-09 13:12:32 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2021-01-09 13:12:32 +0000 |
| commit | 83431a6feb6c4bb402b5c4f7c5f6e9b6d7123426 (patch) | |
| tree | bbb693a8371ead102be0ac48c7d136724fa717b0 /lib/docx/numbering-xml.js | |
| parent | 9e7ca2e4a9020a488a1d7b9f371cf09f7aa69c02 (diff) | |
Support numbering defined by paragraph style
Diffstat (limited to 'lib/docx/numbering-xml.js')
| -rw-r--r-- | lib/docx/numbering-xml.js | 27 |
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 }; }); |
