aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-02-16 11:43:57 +0000
committerMichael Williamson <mike@zwobble.org>2017-02-16 11:43:57 +0000
commitc626ef8e1047fb9f27fc4db8c17783a711bd566a (patch)
treea05304ee03c8277df9b04584f72eed8e92464eeb
parent82d37396cdb2c9dce47fd1686e1219d67db03faf (diff)
Hide state in body reader from callers
-rw-r--r--lib/docx/body-reader.js39
-rw-r--r--lib/docx/docx-reader.js4
-rw-r--r--test/docx/body-reader.tests.js20
-rw-r--r--test/docx/comments-reader.tests.js4
-rw-r--r--test/docx/notes-reader.tests.js4
5 files changed, 38 insertions, 33 deletions
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js
index a0a90fd..e92f8b4 100644
--- a/lib/docx/body-reader.js
+++ b/lib/docx/body-reader.js
@@ -1,4 +1,5 @@
-exports.BodyReader = BodyReader;
+exports.createBodyReader = createBodyReader;
+exports._readNumberingProperties = readNumberingProperties;
var _ = require("underscore");
@@ -7,6 +8,16 @@ var Result = require("../results").Result;
var warning = require("../results").warning;
var uriToZipEntryName = require("./uris").uriToZipEntryName;
+function createBodyReader(options) {
+ return {
+ readXmlElement: function(element) {
+ return new BodyReader(options).readXmlElement(element);
+ },
+ readXmlElements: function(elements) {
+ return new BodyReader(options).readXmlElements(elements);
+ }
+ };
+}
function BodyReader(options) {
var fieldHyperlink = null;
@@ -126,7 +137,7 @@ function BodyReader(options) {
styleId: style.styleId,
styleName: style.name,
alignment: element.firstOrEmpty("w:jc").attributes["w:val"],
- numbering: readNumberingProperties(element.firstOrEmpty("w:numPr"))
+ numbering: readNumberingProperties(element.firstOrEmpty("w:numPr"), numbering)
};
});
},
@@ -227,21 +238,12 @@ function BodyReader(options) {
"wp:anchor": readDrawingElement,
"v:imagedata": readImageData
};
+
return {
readXmlElement: readXmlElement,
- readXmlElements: readXmlElements,
- _readNumberingProperties: readNumberingProperties
+ readXmlElements: readXmlElements
};
- function readNumberingProperties(element) {
- var level = element.firstOrEmpty("w:ilvl").attributes["w:val"];
- var numId = element.firstOrEmpty("w:numId").attributes["w:val"];
- if (level === undefined || numId === undefined) {
- return null;
- } else {
- return numbering.findLevel(numId, level);
- }
- }
function readTable(element) {
return readXmlElements(element.children)
@@ -396,6 +398,17 @@ function BodyReader(options) {
type + " style with ID " + styleId + " was referenced but not defined in the document");
}
}
+
+
+function readNumberingProperties(element, numbering) {
+ var level = element.firstOrEmpty("w:ilvl").attributes["w:val"];
+ var numId = element.firstOrEmpty("w:numId").attributes["w:val"];
+ if (level === undefined || numId === undefined) {
+ return null;
+ } else {
+ return numbering.findLevel(numId, level);
+ }
+}
var supportedImageTypes = {
"image/png": true,
diff --git a/lib/docx/docx-reader.js b/lib/docx/docx-reader.js
index 0c7d57f..5aa95ca 100644
--- a/lib/docx/docx-reader.js
+++ b/lib/docx/docx-reader.js
@@ -7,7 +7,7 @@ var documents = require("../documents");
var Result = require("../results").Result;
var readXmlFromZipFile = require("./office-xml-reader").readXmlFromZipFile;
-var BodyReader = require("./body-reader").BodyReader;
+var createBodyReader = require("./body-reader").createBodyReader;
var DocumentXmlReader = require("./document-xml-reader").DocumentXmlReader;
var relationshipsReader = require("./relationships-reader");
var contentTypesReader = require("./content-types-reader");
@@ -95,7 +95,7 @@ function readXmlFileWithBody(name, options, func) {
});
return readRelationshipsFromZipFile(options.docxFile).then(function(relationships) {
- var bodyReader = new BodyReader({
+ var bodyReader = new createBodyReader({
relationships: relationships,
contentTypes: options.contentTypes,
docxFile: options.docxFile,
diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js
index 2528812..ab4995c 100644
--- a/test/docx/body-reader.tests.js
+++ b/test/docx/body-reader.tests.js
@@ -17,7 +17,8 @@ var isHyperlink = documentMatchers.isHyperlink;
var isRun = documentMatchers.isRun;
var isText = documentMatchers.isText;
-var BodyReader = require("../../lib/docx/body-reader").BodyReader;
+var createBodyReader = require("../../lib/docx/body-reader").createBodyReader;
+var _readNumberingProperties = require("../../lib/docx/body-reader")._readNumberingProperties;
var documents = require("../../lib/documents");
var xml = require("../../lib/xml");
var XmlElement = xml.Element;
@@ -32,7 +33,7 @@ var createFakeDocxFile = testing.createFakeDocxFile;
function readXmlElement(element, options) {
options = Object.create(options || {});
options.styles = options.styles || new Styles({}, {});
- return new BodyReader(options).readXmlElement(element);
+ return createBodyReader(options).readXmlElement(element);
}
function readXmlElementValue(element, options) {
@@ -113,10 +114,7 @@ test("numbering properties are converted to numbering at specified level", funct
var numbering = new Numbering({"42": {"1": {isOrdered: true, level: "1"}}});
- var reader = new BodyReader({
- numbering: numbering
- });
- var numberingLevel = reader._readNumberingProperties(numberingPropertiesXml);
+ var numberingLevel = _readNumberingProperties(numberingPropertiesXml, numbering);
assert.deepEqual(numberingLevel, {level: "1", isOrdered: true});
});
@@ -127,10 +125,7 @@ test("numbering properties are ignored if w:ilvl is missing", function() {
var numbering = new Numbering({"42": {"1": {isOrdered: true, level: "1"}}});
- var reader = new BodyReader({
- numbering: numbering
- });
- var numberingLevel = reader._readNumberingProperties(numberingPropertiesXml);
+ var numberingLevel = _readNumberingProperties(numberingPropertiesXml, numbering);
assert.equal(numberingLevel, null);
});
@@ -141,10 +136,7 @@ test("numbering properties are ignored if w:numId is missing", function() {
var numbering = new Numbering({"42": {"1": {isOrdered: true, level: "1"}}});
- var reader = new BodyReader({
- numbering: numbering
- });
- var numberingLevel = reader._readNumberingProperties(numberingPropertiesXml);
+ var numberingLevel = _readNumberingProperties(numberingPropertiesXml, numbering);
assert.equal(numberingLevel, null);
});
diff --git a/test/docx/comments-reader.tests.js b/test/docx/comments-reader.tests.js
index 4bb0e9b..0b3c0ce 100644
--- a/test/docx/comments-reader.tests.js
+++ b/test/docx/comments-reader.tests.js
@@ -1,14 +1,14 @@
var assert = require("assert");
var createCommentsReader = require("../../lib/docx/comments-reader").createCommentsReader;
-var BodyReader = require("../../lib/docx/body-reader").BodyReader;
+var createBodyReader = require("../../lib/docx/body-reader").createBodyReader;
var documents = require("../../lib/documents");
var xml = require("../../lib/xml");
var test = require("../test")(module);
function readComment(element) {
- var bodyReader = new BodyReader({});
+ var bodyReader = createBodyReader({});
var commentsReader = createCommentsReader(bodyReader);
var comments = commentsReader(element);
assert.equal(comments.value.length, 1);
diff --git a/test/docx/notes-reader.tests.js b/test/docx/notes-reader.tests.js
index 1d4cf9c..71bb794 100644
--- a/test/docx/notes-reader.tests.js
+++ b/test/docx/notes-reader.tests.js
@@ -1,14 +1,14 @@
var assert = require("assert");
var createFootnotesReader = require("../../lib/docx/notes-reader").createFootnotesReader;
-var BodyReader = require("../../lib/docx/body-reader").BodyReader;
+var createBodyReader = require("../../lib/docx/body-reader").createBodyReader;
var documents = require("../../lib/documents");
var XmlElement = require("../../lib/xml").Element;
var test = require("../test")(module);
test('ID and body of footnote are read', function() {
- var bodyReader = new BodyReader({});
+ var bodyReader = new createBodyReader({});
var footnoteBody = [new XmlElement("w:p", {}, [])];
var footnotes = createFootnotesReader(bodyReader)(
new XmlElement("w:footnotes", {}, [