From 1dca829f94b394a4a63e71b125f25cc609d06235 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 16 Feb 2016 22:42:53 +0000 Subject: Allow preservation of empty paragraphs --- .../java/org/zwobble/mammoth/DocumentConverter.java | 18 ++++++++++-------- src/main/java/org/zwobble/mammoth/Mammoth.java | 14 ++++++++++---- 2 files changed, 20 insertions(+), 12 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java index a6029e0..cbcade5 100644 --- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java @@ -15,13 +15,12 @@ import java.util.Base64; import java.util.List; import java.util.Map; -import static org.zwobble.mammoth.util.MammothLists.eagerFlatMap; -import static org.zwobble.mammoth.util.MammothLists.list; +import static org.zwobble.mammoth.util.MammothLists.*; import static org.zwobble.mammoth.util.MammothMaps.map; public class DocumentConverter { - public static List convertToHtml(String idPrefix, Document document) { - DocumentConverter documentConverter = new DocumentConverter(idPrefix); + public static List convertToHtml(String idPrefix, boolean preserveEmptyParagraphs, Document document) { + DocumentConverter documentConverter = new DocumentConverter(idPrefix, preserveEmptyParagraphs); List mainBody = documentConverter.convertChildrenToHtml(document); // TODO: can you have note references inside a note? List notes = findNotes(document, documentConverter.noteReferences); @@ -42,15 +41,17 @@ public class DocumentConverter { reference -> document.getNotes().findNote(reference.getNoteType(), reference.getNoteId()).get())); } - public static List convertToHtml(String idPrefix, DocumentElement element) { - return new DocumentConverter(idPrefix).convertToHtml(element); + public static List convertToHtml(String idPrefix, boolean preserveEmptyParagraphs, DocumentElement element) { + return new DocumentConverter(idPrefix, preserveEmptyParagraphs).convertToHtml(element); } private final String idPrefix; + private final boolean preserveEmptyParagraphs; private final List noteReferences = new ArrayList<>(); - private DocumentConverter(String idPrefix) { + private DocumentConverter(String idPrefix, boolean preserveEmptyParagraphs) { this.idPrefix = idPrefix; + this.preserveEmptyParagraphs = preserveEmptyParagraphs; } private HtmlNode convertToHtml(Note note) { @@ -81,7 +82,8 @@ public class DocumentConverter { @Override public List visit(Paragraph paragraph) { List content = convertChildrenToHtml(paragraph); - return list(Html.element("p", content)); + List children = preserveEmptyParagraphs ? cons(Html.FORCE_WRITE, content) : content; + return list(Html.element("p", children)); } @Override diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index d0c4aff..6960027 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -17,16 +17,22 @@ import static org.zwobble.mammoth.util.MammothLists.list; public class Mammoth { public static class Options { // TODO: what default prefix? - public static final Options DEFAULT = new Options("document"); + public static final Options DEFAULT = new Options("document", false); private final String idPrefix; + private final boolean preserveEmptyParagraphs; - public Options(String idPrefix) { + public Options(String idPrefix, boolean preserveEmptyParagraphs) { this.idPrefix = idPrefix; + this.preserveEmptyParagraphs = preserveEmptyParagraphs; } public Options idPrefix(String prefix) { - return new Options(prefix); + return new Options(prefix, preserveEmptyParagraphs); + } + + public Options preserveEmptyParagraphs() { + return new Options(idPrefix, true); } } @@ -56,7 +62,7 @@ public class Mammoth { DocumentXmlReader reader = new DocumentXmlReader(bodyReaders.forName("document"), notes); return reader.readElement(parseOfficeXml(zipFile, "word/document.xml")); }) - .map(nodes -> DocumentConverter.convertToHtml(options.idPrefix, nodes)) + .map(nodes -> DocumentConverter.convertToHtml(options.idPrefix, options.preserveEmptyParagraphs, nodes)) .map(Html::stripEmpty) .map(Html::collapse) .map(Html::write); -- cgit v1.2.3