aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/numbering-xml.js44
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;
}