aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/DocumentConverter.java18
-rw-r--r--src/main/java/org/zwobble/mammoth/Mammoth.java14
2 files changed, 20 insertions, 12 deletions
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<HtmlNode> convertToHtml(String idPrefix, Document document) {
- DocumentConverter documentConverter = new DocumentConverter(idPrefix);
+ public static List<HtmlNode> convertToHtml(String idPrefix, boolean preserveEmptyParagraphs, Document document) {
+ DocumentConverter documentConverter = new DocumentConverter(idPrefix, preserveEmptyParagraphs);
List<HtmlNode> mainBody = documentConverter.convertChildrenToHtml(document);
// TODO: can you have note references inside a note?
List<Note> notes = findNotes(document, documentConverter.noteReferences);
@@ -42,15 +41,17 @@ public class DocumentConverter {
reference -> document.getNotes().findNote(reference.getNoteType(), reference.getNoteId()).get()));
}
- public static List<HtmlNode> convertToHtml(String idPrefix, DocumentElement element) {
- return new DocumentConverter(idPrefix).convertToHtml(element);
+ public static List<HtmlNode> 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<NoteReference> 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<HtmlNode> visit(Paragraph paragraph) {
List<HtmlNode> content = convertChildrenToHtml(paragraph);
- return list(Html.element("p", content));
+ List<HtmlNode> 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);