diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-02-16 11:43:57 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-02-16 11:43:57 +0000 |
| commit | c626ef8e1047fb9f27fc4db8c17783a711bd566a (patch) | |
| tree | a05304ee03c8277df9b04584f72eed8e92464eeb | |
| parent | 82d37396cdb2c9dce47fd1686e1219d67db03faf (diff) | |
Hide state in body reader from callers
| -rw-r--r-- | lib/docx/body-reader.js | 39 | ||||
| -rw-r--r-- | lib/docx/docx-reader.js | 4 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 20 | ||||
| -rw-r--r-- | test/docx/comments-reader.tests.js | 4 | ||||
| -rw-r--r-- | test/docx/notes-reader.tests.js | 4 |
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", {}, [ |
