diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-09 14:52:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-09 14:52:51 +0100 |
| commit | c69ea62ed5e7d5ef046d7d00772d9bb7b100daf6 (patch) | |
| tree | 29b14d35a77db9b675d49893c43c16e8773bf049 /lib/docx | |
| parent | fbf5e226ec9194ab67081cb9ecdd5f839cd87c3a (diff) | |
Ignore numbering levels that use numStyleLink to refer to themselves
Diffstat (limited to 'lib/docx')
| -rw-r--r-- | lib/docx/numbering-xml.js | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/lib/docx/numbering-xml.js b/lib/docx/numbering-xml.js index 544ba52..9c86536 100644 --- a/lib/docx/numbering-xml.js +++ b/lib/docx/numbering-xml.js @@ -17,20 +17,29 @@ function Numbering(nums, abstractNums, styles) { ); function findLevel(numId, level) { + return findLevelWithSeenNumIds(numId, level, {}); + } + + function findLevelWithSeenNumIds(numId, level, seenNumIds) { + if (seenNumIds[numId]) { + return null; + } + seenNumIds[numId] = true; + var num = nums[numId]; - if (num) { - var abstractNum = abstractNums[num.abstractNumId]; - if (!abstractNum) { - return null; - } else if (abstractNum.numStyleLink == null) { - return abstractNums[num.abstractNumId].levels[level]; - } else { - var style = styles.findNumberingStyleById(abstractNum.numStyleLink); - return findLevel(style.numId, level); - } - } else { + if (!num) { return null; } + + var abstractNum = abstractNums[num.abstractNumId]; + if (!abstractNum) { + return null; + } else if (abstractNum.numStyleLink == null) { + return abstractNums[num.abstractNumId].levels[level]; + } else { + var style = styles.findNumberingStyleById(abstractNum.numStyleLink); + return findLevelWithSeenNumIds(style.numId, level, seenNumIds); + } } function findLevelByParagraphStyleId(styleId) { |
