aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-05-03 18:12:21 +0100
committerMichael Williamson <mike@zwobble.org>2013-05-03 18:12:21 +0100
commit23438dd97f93b86115cc4196c88d12e5168acbd5 (patch)
tree79b37ef7b0474b64f8649d33a86d7f17b877085e /lib
parent7663d1a7e71df101f177ce5b19dade4696f753b0 (diff)
Read numbering from document.xml
Diffstat (limited to 'lib')
-rw-r--r--lib/document-xml-reader.js10
-rw-r--r--lib/docx-reader.js6
-rw-r--r--lib/numbering-xml.js24
3 files changed, 29 insertions, 11 deletions
diff --git a/lib/document-xml-reader.js b/lib/document-xml-reader.js
index 6f75745..b5e379c 100644
--- a/lib/document-xml-reader.js
+++ b/lib/document-xml-reader.js
@@ -9,7 +9,7 @@ var Result = require("./results").Result;
var warning = require("./results").warning;
-function DocumentXmlReader(relationships, contentTypes, docxFile) {
+function DocumentXmlReader(relationships, contentTypes, docxFile, numbering) {
function convertXmlToDocument(documentXml) {
var body = documentXml.root.first("w:body");
@@ -46,7 +46,6 @@ function DocumentXmlReader(relationships, contentTypes, docxFile) {
return readXmlElements(element.children)
.map(function(children) {
var properties = _.find(children, isParagraphProperties);
-
return new documents.Paragraph(
children.filter(negate(isParagraphProperties)),
properties
@@ -64,9 +63,10 @@ function DocumentXmlReader(relationships, contentTypes, docxFile) {
}
var numberingPropertiesElement = element.first("w:numPr");
if (numberingPropertiesElement) {
- properties.numbering = {
- level: numberingPropertiesElement.first("w:ilvl").attributes["w:val"]
- };
+ var levelElement = numberingPropertiesElement.first("w:ilvl");
+ var level = levelElement.attributes["w:val"];
+ var numId = numberingPropertiesElement.first("w:numId").attributes["w:val"];
+ properties.numbering = numbering.findLevel(numId, level);
}
return new Result(properties);
diff --git a/lib/docx-reader.js b/lib/docx-reader.js
index 0861758..2215b35 100644
--- a/lib/docx-reader.js
+++ b/lib/docx-reader.js
@@ -10,6 +10,7 @@ var documents = require("./documents");
var DocumentXmlReader = require("./document-xml-reader").DocumentXmlReader;
var readRelationshipsFromZipFile = require("./relationships-reader").readRelationshipsFromZipFile;
var readContentTypesFromZipFile = require("./content-types-reader").readContentTypesFromZipFile;
+var readNumberingFromZipFile = require("./numbering-xml").readNumberingFromZipFile;
var Result = require("./results").Result;
@@ -28,9 +29,10 @@ function read(options) {
return q.all([
readRelationshipsFromZipFile(docxFile),
readContentTypesFromZipFile(docxFile),
+ readNumberingFromZipFile(docxFile),
readXmlFromZipFile(docxFile, "word/document.xml")
- ]).spread(function(relationships, contentTypes, documentXml) {
- var reader = new DocumentXmlReader(relationships, contentTypes, docxFile);
+ ]).spread(function(relationships, contentTypes, numbering, documentXml) {
+ var reader = new DocumentXmlReader(relationships, contentTypes, docxFile, numbering);
return reader.convertXmlToDocument(documentXml);
});
});
diff --git a/lib/numbering-xml.js b/lib/numbering-xml.js
index f983448..7e64dc2 100644
--- a/lib/numbering-xml.js
+++ b/lib/numbering-xml.js
@@ -1,8 +1,17 @@
+var readXmlFromZipFile = require("./office-xml-reader").readXmlFromZipFile;
+
exports.readNumberingXml = readNumberingXml;
+exports.readNumberingFromZipFile = readNumberingFromZipFile;
+exports.Numbering = Numbering;
-function readNumberingXml(xml) {
- var abstractNums = readAbstractNums(xml);
- var nums = readNums(xml, abstractNums);
+function readNumberingFromZipFile(file) {
+ return readXmlFromZipFile(file, "word/numbering.xml")
+ .then(function(xml) {
+ return xml ? readNumberingXml(xml) : new Numbering({});
+ });
+}
+
+function Numbering(nums) {
return {
findLevel: function(numId, level) {
var num = nums[numId];
@@ -15,6 +24,12 @@ function readNumberingXml(xml) {
};
}
+function readNumberingXml(xml) {
+ var abstractNums = readAbstractNums(xml);
+ var nums = readNums(xml, abstractNums);
+ return new Numbering(nums);
+}
+
function readAbstractNums(xml) {
var abstractNums = {};
xml.root.getElementsByTagName("w:abstractNum").forEach(function(element) {
@@ -30,7 +45,8 @@ function readAbstractNum(element) {
var levelIndex = levelElement.attributes["w:ilvl"];
var numFmt = levelElement.first("w:numFmt").attributes["w:val"];
levels[levelIndex] = {
- isOrdered: numFmt !== "bullet"
+ isOrdered: numFmt !== "bullet",
+ level: levelIndex
};
});
return levels;