From 05ff9e63fb5ab95e20ebe403755ebfb1f8780c25 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 24 Feb 2016 08:32:15 +0000 Subject: Turn Mammoth into a non-static class --- src/main/java/org/zwobble/mammoth/Mammoth.java | 94 +++++----------------- .../mammoth/internal/DocumentConverter.java | 16 ++-- .../mammoth/internal/DocumentToHtmlOptions.java | 41 ++++++++++ .../mammoth/internal/styles/DefaultStyles.java | 49 +++++++++++ 4 files changed, 118 insertions(+), 82 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java create mode 100644 src/main/java/org/zwobble/mammoth/internal/styles/DefaultStyles.java (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index 9e9af83..b8dac98 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -1,9 +1,9 @@ package org.zwobble.mammoth; import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import org.zwobble.mammoth.internal.DocumentConverter; +import org.zwobble.mammoth.internal.DocumentToHtmlOptions; import org.zwobble.mammoth.internal.documents.DocumentElement; import org.zwobble.mammoth.internal.documents.HasChildren; import org.zwobble.mammoth.internal.documents.Paragraph; @@ -12,10 +12,9 @@ import org.zwobble.mammoth.internal.docx.DocxFile; import org.zwobble.mammoth.internal.docx.InMemoryDocxFile; import org.zwobble.mammoth.internal.docx.ZippedDocxFile; import org.zwobble.mammoth.internal.html.Html; -import org.zwobble.mammoth.results.Result; -import org.zwobble.mammoth.internal.styles.*; -import org.zwobble.mammoth.internal.styles.parsing.StyleMapParser; +import org.zwobble.mammoth.internal.styles.DefaultStyles; import org.zwobble.mammoth.internal.util.Casts; +import org.zwobble.mammoth.results.Result; import java.io.File; import java.io.IOException; @@ -29,90 +28,37 @@ import static org.zwobble.mammoth.internal.docx.DocumentReader.readDocument; import static org.zwobble.mammoth.internal.util.MammothLists.list; public class Mammoth { - public static class Options { - public static final Options DEFAULT = new Options("", false); - - private final String idPrefix; - private final boolean preserveEmptyParagraphs; - - public Options(String idPrefix, boolean preserveEmptyParagraphs) { - this.idPrefix = idPrefix; - this.preserveEmptyParagraphs = preserveEmptyParagraphs; - } + private final DocumentToHtmlOptions options; - public Options idPrefix(String prefix) { - return new Options(prefix, preserveEmptyParagraphs); - } + public Mammoth() { + this(DocumentToHtmlOptions.DEFAULT.styleMap(DefaultStyles.DEFAULT_STYLE_MAP)); + } - public Options preserveEmptyParagraphs() { - return new Options(idPrefix, true); - } + private Mammoth(DocumentToHtmlOptions options) { + this.options = options; } - private static final StyleMap DEFAULT_STYLE_MAP = StyleMapParser.parse(ImmutableList.of( - "p.Heading1 => h1:fresh", - "p.Heading2 => h2:fresh", - "p.Heading3 => h3:fresh", - "p.Heading4 => h4:fresh", - "p[style-name='Heading 1'] => h1:fresh", - "p[style-name='Heading 2'] => h2:fresh", - "p[style-name='Heading 3'] => h3:fresh", - "p[style-name='Heading 4'] => h4:fresh", - "p[style-name='heading 1'] => h1:fresh", - "p[style-name='heading 2'] => h2:fresh", - "p[style-name='heading 3'] => h3:fresh", - "p[style-name='heading 4'] => h4:fresh", - "p[style-name='heading 4'] => h4:fresh", - - "r[style-name='Strong'] => strong", - - "p[style-name='footnote text'] => p", - "r[style-name='footnote reference'] =>", - "p[style-name='endnote text'] => p", - "r[style-name='endnote reference'] =>", - - // LibreOffice - "p[style-name='Footnote'] => p", - "r[style-name='Footnote anchor'] =>", - "p[style-name='Endnote'] => p", - "r[style-name='Endnote anchor'] =>", - - "p:unordered-list(1) => ul > li:fresh", - "p:unordered-list(2) => ul|ol > li > ul > li:fresh", - "p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh", - "p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", - "p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", - "p:ordered-list(1) => ol > li:fresh", - "p:ordered-list(2) => ul|ol > li > ol > li:fresh", - "p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh", - "p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", - "p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", - - "r[style-name='Hyperlink'] =>", - - "p[style-name='Normal'] => p:fresh")); - - public static Result convertToHtml(InputStream stream) throws IOException { - return convertToHtml(stream, Options.DEFAULT); + public Mammoth idPrefix(String idPrefix) { + return new Mammoth(options.idPrefix(idPrefix)); } - public static Result convertToHtml(InputStream stream, Options options) throws IOException { - return withDocxFile(stream, zipFile -> - convertToHtml(Optional.empty(), zipFile, options)); + public Mammoth preserveEmptyParagraphs() { + return new Mammoth(options.preserveEmptyParagraphs()); } - public static Result convertToHtml(File file) throws IOException { - return convertToHtml(file, Options.DEFAULT); + public Result convertToHtml(InputStream stream) throws IOException { + return withDocxFile(stream, zipFile -> + convertToHtml(Optional.empty(), zipFile)); } - public static Result convertToHtml(File file, Options options) throws IOException { + public Result convertToHtml(File file) throws IOException { return withDocxFile(file, zipFile -> - convertToHtml(Optional.of(file.toPath()), zipFile, options)); + convertToHtml(Optional.of(file.toPath()), zipFile)); } - private static Result convertToHtml(Optional path, DocxFile zipFile, Options options) { + private Result convertToHtml(Optional path, DocxFile zipFile) { return readDocument(path, zipFile) - .flatMap(nodes -> DocumentConverter.convertToHtml(options.idPrefix, options.preserveEmptyParagraphs, DEFAULT_STYLE_MAP, nodes)) + .flatMap(nodes -> DocumentConverter.convertToHtml(nodes, options)) .map(Html::stripEmpty) .map(Html::collapse) .map(Html::write); diff --git a/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java index 5aa3c08..ab28651 100644 --- a/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java @@ -24,8 +24,8 @@ import static org.zwobble.mammoth.internal.util.MammothLists.*; import static org.zwobble.mammoth.internal.util.MammothMaps.map; public class DocumentConverter { - public static Result> convertToHtml(String idPrefix, boolean preserveEmptyParagraphs, StyleMap styleMap, Document document) { - DocumentConverter documentConverter = new DocumentConverter(idPrefix, preserveEmptyParagraphs, styleMap); + public static Result> convertToHtml(Document document, DocumentToHtmlOptions options) { + DocumentConverter documentConverter = new DocumentConverter(options); return new Result<>( documentConverter.convertToHtml(document), documentConverter.warnings.build()); @@ -38,8 +38,8 @@ public class DocumentConverter { reference -> document.getNotes().findNote(reference.getNoteType(), reference.getNoteId()).get())); } - public static Result> convertToHtml(String idPrefix, boolean preserveEmptyParagraphs, StyleMap styleMap, DocumentElement element) { - DocumentConverter documentConverter = new DocumentConverter(idPrefix, preserveEmptyParagraphs, styleMap); + public static Result> convertToHtml(DocumentElement element, DocumentToHtmlOptions options) { + DocumentConverter documentConverter = new DocumentConverter(options); return new Result<>( documentConverter.convertToHtml(element), documentConverter.warnings.build()); @@ -51,10 +51,10 @@ public class DocumentConverter { private final List noteReferences = new ArrayList<>(); private final ImmutableList.Builder warnings = ImmutableList.builder(); - private DocumentConverter(String idPrefix, boolean preserveEmptyParagraphs, StyleMap styleMap) { - this.idPrefix = idPrefix; - this.preserveEmptyParagraphs = preserveEmptyParagraphs; - this.styleMap = styleMap; + private DocumentConverter(DocumentToHtmlOptions options) { + this.idPrefix = options.idPrefix(); + this.preserveEmptyParagraphs = options.shouldPreserveEmptyParagraphs(); + this.styleMap = options.styleMap(); } private List convertToHtml(Document document) { diff --git a/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java new file mode 100644 index 0000000..f7cbf0d --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java @@ -0,0 +1,41 @@ +package org.zwobble.mammoth.internal; + +import org.zwobble.mammoth.internal.styles.StyleMap; + +public class DocumentToHtmlOptions { + public static final DocumentToHtmlOptions DEFAULT = new DocumentToHtmlOptions("", false, StyleMap.EMPTY); + + private final String idPrefix; + private final boolean preserveEmptyParagraphs; + private final StyleMap styleMap; + + public DocumentToHtmlOptions(String idPrefix, boolean preserveEmptyParagraphs, StyleMap styleMap) { + this.idPrefix = idPrefix; + this.preserveEmptyParagraphs = preserveEmptyParagraphs; + this.styleMap = styleMap; + } + + public DocumentToHtmlOptions idPrefix(String prefix) { + return new DocumentToHtmlOptions(prefix, preserveEmptyParagraphs, styleMap); + } + + public DocumentToHtmlOptions preserveEmptyParagraphs() { + return new DocumentToHtmlOptions(idPrefix, true, styleMap); + } + + public DocumentToHtmlOptions styleMap(StyleMap styleMap) { + return new DocumentToHtmlOptions(idPrefix, preserveEmptyParagraphs, styleMap); + } + + public String idPrefix() { + return idPrefix; + } + + public boolean shouldPreserveEmptyParagraphs() { + return preserveEmptyParagraphs; + } + + public StyleMap styleMap() { + return styleMap; + } +} diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/DefaultStyles.java b/src/main/java/org/zwobble/mammoth/internal/styles/DefaultStyles.java new file mode 100644 index 0000000..4fcba76 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/DefaultStyles.java @@ -0,0 +1,49 @@ +package org.zwobble.mammoth.internal.styles; + +import com.google.common.collect.ImmutableList; +import org.zwobble.mammoth.internal.styles.parsing.StyleMapParser; + +public class DefaultStyles { + public static final StyleMap DEFAULT_STYLE_MAP = StyleMapParser.parse(ImmutableList.of( + "p.Heading1 => h1:fresh", + "p.Heading2 => h2:fresh", + "p.Heading3 => h3:fresh", + "p.Heading4 => h4:fresh", + "p[style-name='Heading 1'] => h1:fresh", + "p[style-name='Heading 2'] => h2:fresh", + "p[style-name='Heading 3'] => h3:fresh", + "p[style-name='Heading 4'] => h4:fresh", + "p[style-name='heading 1'] => h1:fresh", + "p[style-name='heading 2'] => h2:fresh", + "p[style-name='heading 3'] => h3:fresh", + "p[style-name='heading 4'] => h4:fresh", + "p[style-name='heading 4'] => h4:fresh", + + "r[style-name='Strong'] => strong", + + "p[style-name='footnote text'] => p", + "r[style-name='footnote reference'] =>", + "p[style-name='endnote text'] => p", + "r[style-name='endnote reference'] =>", + + // LibreOffice + "p[style-name='Footnote'] => p", + "r[style-name='Footnote anchor'] =>", + "p[style-name='Endnote'] => p", + "r[style-name='Endnote anchor'] =>", + + "p:unordered-list(1) => ul > li:fresh", + "p:unordered-list(2) => ul|ol > li > ul > li:fresh", + "p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh", + "p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", + "p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", + "p:ordered-list(1) => ol > li:fresh", + "p:ordered-list(2) => ul|ol > li > ol > li:fresh", + "p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh", + "p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", + "p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", + + "r[style-name='Hyperlink'] =>", + + "p[style-name='Normal'] => p:fresh")); +} -- cgit v1.2.3