diff --git a/NEWS b/NEWS index 15677860..cb1ab7d0 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +# 1.7.1 + +* Handle numbering level definitions without an explicit format. + # 1.7.0 * Support attributes in HTML paths in style mappings. diff --git a/lib/docx/numbering-xml.js b/lib/docx/numbering-xml.js index 832e414a..7e368ac6 100644 --- a/lib/docx/numbering-xml.js +++ b/lib/docx/numbering-xml.js @@ -66,7 +66,7 @@ function readAbstractNum(element) { var levels = {}; element.getElementsByTagName("w:lvl").forEach(function(levelElement) { var levelIndex = levelElement.attributes["w:ilvl"]; - var numFmt = levelElement.first("w:numFmt").attributes["w:val"]; + var numFmt = levelElement.firstOrEmpty("w:numFmt").attributes["w:val"]; var paragraphStyleId = levelElement.firstOrEmpty("w:pStyle").attributes["w:val"]; levels[levelIndex] = { diff --git a/test/docx/numbering-xml.tests.js b/test/docx/numbering-xml.tests.js index 1a20ab0c..a648349f 100644 --- a/test/docx/numbering-xml.tests.js +++ b/test/docx/numbering-xml.tests.js @@ -45,6 +45,23 @@ test('w:num element referencing non-existent w:abstractNumId is ignored', functi duck.assertThat(numbering.findLevel("47", "0"), duck.equalTo(null)); }); +test('when level is missing w:numFmt then level is ordered', function() { + var numbering = readNumberingXml( + new XmlElement("w:numbering", {}, [ + new XmlElement("w:abstractNum", {"w:abstractNumId": "42"}, [ + new XmlElement("w:lvl", {"w:ilvl": "0"}) + ]), + new XmlElement("w:num", {"w:numId": "47"}, [ + new XmlElement("w:abstractNumId", {"w:val": "42"}) + ]) + ]), + {styles: stylesReader.defaultStyles} + ); + duck.assertThat(numbering.findLevel("47", "0"), duck.hasProperties({ + isOrdered: true + })); +}); + test('when w:abstractNum has w:numStyleLink then style is used to find w:num', function() { var numbering = readNumberingXml(