summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-05-17 16:20:43 +0100
committerMichael Williamson <mike@zwobble.org>2015-05-17 16:20:43 +0100
commitfc5b5a22f9b9be138da18d38a67224171663c2f9 (patch)
tree1eeba35c07a1713908f0935cdc3c8c4e903541fd
parent969d80c62e7d5d5ed41a3dc7ec8f5f8bdec59a91 (diff)
Add ignoreEmptyParagraphs option
-rw-r--r--README.md3
-rw-r--r--lib/document-to-html.js10
-rw-r--r--lib/html-generator.js1
-rw-r--r--tests/mammoth.tests.js16
-rw-r--r--tests/test-data/empty.docxbin0 -> 3306 bytes
5 files changed, 28 insertions, 2 deletions
diff --git a/README.md b/README.md
index 04fcfc6..238685f 100644
--- a/README.md
+++ b/README.md
@@ -301,6 +301,9 @@ Converts the source document to HTML.
* `convertUnderline`: by default, the underlining of any text is ignored.
Set this option to [`mammoth.underline.element(name)`](#underline) to override the default behaviour.
+
+ * `ignoreEmptyParagraphs`: by default, empty paragraphs are ignored.
+ Set this option to `false` to preserve empty paragraphs in the output.
* Returns a promise containing a result.
This result has the following properties:
diff --git a/lib/document-to-html.js b/lib/document-to-html.js
index e9d35b9..220ae2b 100644
--- a/lib/document-to-html.js
+++ b/lib/document-to-html.js
@@ -1,6 +1,7 @@
-var promises = require("./promises");
var async = require("async");
+var _ = require("underscore");
+var promises = require("./promises");
var documents = require("./documents");
var htmlPaths = require("./html-paths");
var HtmlGenerator = require("./html-generator").HtmlGenerator;
@@ -32,7 +33,7 @@ function DocumentConversion(options) {
var noteReferences = [];
- options = options || {};
+ options = _.extend({ignoreEmptyParagraphs: true}, options);
var idPrefix = options.idPrefix === undefined ?
Math.floor(Math.random() * 1000000000000000) :
options.idPrefix;
@@ -76,6 +77,11 @@ function DocumentConversion(options) {
function convertParagraph(element, html, messages, callback) {
html.satisfyPath(styleForParagraph(element, messages));
+
+ if (!options.ignoreEmptyParagraphs) {
+ html.writeAll();
+ }
+
setImmediate(function() {
convertElements(element.children, html, messages, callback);
});
diff --git a/lib/html-generator.js b/lib/html-generator.js
index be1ebd2..a071a5e 100644
--- a/lib/html-generator.js
+++ b/lib/html-generator.js
@@ -90,6 +90,7 @@ function HtmlGenerator(options) {
open: open,
close: close,
closeAll: closeAll,
+ writeAll: writeAll,
asString: asString,
append: append,
selfClosing: selfClosing
diff --git a/tests/mammoth.tests.js b/tests/mammoth.tests.js
index 247ef17..6395afd 100644
--- a/tests/mammoth.tests.js
+++ b/tests/mammoth.tests.js
@@ -40,6 +40,22 @@ describe('mammoth', function() {
});
});
+ test('empty paragraphs are ignored by default', function() {
+ var docxPath = path.join(__dirname, "test-data/empty.docx");
+ return mammoth.convertToHtml({path: docxPath}).then(function(result) {
+ assert.equal(result.value, "");
+ assert.deepEqual(result.messages, []);
+ });
+ });
+
+ test('empty paragraphs are preserved if ignoreEmptyParagraphs is false', function() {
+ var docxPath = path.join(__dirname, "test-data/empty.docx");
+ return mammoth.convertToHtml({path: docxPath}, {ignoreEmptyParagraphs: false}).then(function(result) {
+ assert.equal(result.value, "<p></p>");
+ assert.deepEqual(result.messages, []);
+ });
+ });
+
test('style map can be expressed as string', function() {
var docxFile = createFakeDocxFile({
"word/document.xml": testData("simple/word/document.xml")
diff --git a/tests/test-data/empty.docx b/tests/test-data/empty.docx
new file mode 100644
index 0000000..e10b869
--- /dev/null
+++ b/tests/test-data/empty.docx
Binary files differ