summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-04-13 21:57:00 +0100
committerMichael Williamson <mike@zwobble.org>2017-04-13 21:57:00 +0100
commitb2bccab123b94b53b4789974ce41125e8e7735fa (patch)
treeb645fe9cf71a59bb43b88ec7188a48c2b3b2ef75
parent96b8496dc47880693b646f81cfd440de8aa5f9ae (diff)
Add transforms.run
-rw-r--r--NEWS4
-rw-r--r--README.md6
-rw-r--r--lib/documents.js2
-rw-r--r--lib/transforms.js6
-rw-r--r--test/transforms.tests.js75
5 files changed, 92 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index f484479..57de2e1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+# 1.3.5
+
+* Add transforms.run.
+
# 1.3.4
* Read children of w:object elements.
diff --git a/README.md b/README.md
index 5257760..678e846 100644
--- a/README.md
+++ b/README.md
@@ -571,6 +571,12 @@ Returns a function that can be used as the `transformDocument` option.
This will apply the function `transformParagraph` to each paragraph element.
`transformParagraph` should return the new paragraph.
+#### `mammoth.transforms.run(transformRun)`
+
+Returns a function that can be used as the `transformDocument` option.
+This will apply the function `transformRun` to each run element.
+`transformRun` should return the new run.
+
#### `mammoth.transforms.getDescendants(element)`
Gets all descendants of an element.
diff --git a/lib/documents.js b/lib/documents.js
index cf56174..d4f4e3c 100644
--- a/lib/documents.js
+++ b/lib/documents.js
@@ -188,7 +188,7 @@ exports.document = exports.Document = Document;
exports.paragraph = exports.Paragraph = Paragraph;
exports.run = exports.Run = Run;
exports.Text = Text;
-exports.Tab = Tab;
+exports.tab = exports.Tab = Tab;
exports.Hyperlink = Hyperlink;
exports.noteReference = exports.NoteReference = NoteReference;
exports.Notes = Notes;
diff --git a/lib/transforms.js b/lib/transforms.js
index 5d45153..01ba0d8 100644
--- a/lib/transforms.js
+++ b/lib/transforms.js
@@ -1,6 +1,8 @@
var _ = require("underscore");
exports.paragraph = paragraph;
+exports.run = run;
+exports._elements = elements;
exports.getDescendantsOfType = getDescendantsOfType;
exports.getDescendants = getDescendants;
@@ -8,6 +10,10 @@ function paragraph(transform) {
return elementsOfType("paragraph", transform);
}
+function run(transform) {
+ return elementsOfType("run", transform);
+}
+
function elementsOfType(elementType, transform) {
return elements(function(element) {
if (element.type === elementType) {
diff --git a/test/transforms.tests.js b/test/transforms.tests.js
index c6656dd..d9112b2 100644
--- a/test/transforms.tests.js
+++ b/test/transforms.tests.js
@@ -1,9 +1,84 @@
var assert = require("assert");
+var _ = require("underscore");
+
+var documents = require("../lib/documents");
var transforms = require("../lib/transforms");
var test = require("./test")(module);
+test("paragraph()", {
+ "paragraph is transformed": function() {
+ var paragraph = documents.paragraph([]);
+ var result = transforms.paragraph(function() {
+ return documents.tab();
+ })(paragraph);
+ assert.deepEqual(result, documents.tab());
+ },
+
+ "non-paragraph elements are not transformed": function() {
+ var run = documents.run([]);
+ var result = transforms.paragraph(function() {
+ return documents.tab();
+ })(run);
+ assert.deepEqual(result, documents.run([]));
+ }
+});
+
+
+test("run()", {
+ "run is transformed": function() {
+ var run = documents.run([]);
+ var result = transforms.run(function() {
+ return documents.tab();
+ })(run);
+ assert.deepEqual(result, documents.tab());
+ },
+
+ "non-run elements are not transformed": function() {
+ var paragraph = documents.paragraph([]);
+ var result = transforms.run(function() {
+ return documents.tab();
+ })(paragraph);
+ assert.deepEqual(result, documents.paragraph([]));
+ }
+});
+
+
+test("elements()", {
+ "all descendants are transformed": function() {
+ var root = {
+ children: [
+ {
+ children: [
+ {}
+ ]
+ }
+ ]
+ };
+ var currentCount = 0;
+ function setCount(node) {
+ currentCount++;
+ return _.extend(node, {count: currentCount});
+ }
+
+ var result = transforms._elements(setCount)(root);
+
+ assert.deepEqual(result, {
+ count: 3,
+ children: [
+ {
+ count: 2,
+ children: [
+ {count: 1}
+ ]
+ }
+ ]
+ });
+ }
+});
+
+
test("getDescendants()", {
"returns nothing if element has no children property": function() {
assert.deepEqual(transforms.getDescendants({}), []);