diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-05-03 17:47:50 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-05-03 17:47:50 +0100 |
| commit | 49f72cd7bf6034f646a0f0e51ffbd204d86bea54 (patch) | |
| tree | 9fe827f055c5b1c663b2b549ed705e0627d601d6 /lib | |
| parent | c770ff5fc300cdff7c961c4a222639fddb556431 (diff) | |
Read numFmt from numbering.xml
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/numbering-xml.js | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/lib/numbering-xml.js b/lib/numbering-xml.js index bc1c4d7..f983448 100644 --- a/lib/numbering-xml.js +++ b/lib/numbering-xml.js @@ -1,5 +1,47 @@ exports.readNumberingXml = readNumberingXml; function readNumberingXml(xml) { - return []; + var abstractNums = readAbstractNums(xml); + var nums = readNums(xml, abstractNums); + return { + findLevel: function(numId, level) { + var num = nums[numId]; + if (num) { + return num[level]; + } else { + return null; + } + } + }; +} + +function readAbstractNums(xml) { + var abstractNums = {}; + xml.root.getElementsByTagName("w:abstractNum").forEach(function(element) { + var id = element.attributes["w:abstractNumId"]; + abstractNums[id] = readAbstractNum(element); + }); + return abstractNums; +} + +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"]; + levels[levelIndex] = { + isOrdered: numFmt !== "bullet" + }; + }); + return levels; +} + +function readNums(xml, abstractNums) { + var nums = {}; + xml.root.getElementsByTagName("w:num").forEach(function(element) { + var id = element.attributes["w:numId"]; + var abstractNumId = element.first("w:abstractNumId").attributes["w:val"]; + nums[id] = abstractNums[abstractNumId]; + }); + return nums; } |
