From f61e177abb96034353572e5c32df0a8ae671a4d5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 20 Feb 2016 15:39:19 +0000 Subject: Produce warnings for unrecognised styles --- src/main/java/org/zwobble/mammoth/DocumentConverter.java | 11 ++++++++++- src/main/java/org/zwobble/mammoth/Mammoth.java | 12 +++++++++++- src/main/java/org/zwobble/mammoth/documents/Style.java | 5 +++++ src/main/java/org/zwobble/mammoth/styles/StyleMap.java | 9 +++++---- 4 files changed, 31 insertions(+), 6 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 294e403..5cf8c9d 100644 --- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java @@ -9,6 +9,7 @@ import org.zwobble.mammoth.html.Html; import org.zwobble.mammoth.html.HtmlNode; import org.zwobble.mammoth.results.Result; import org.zwobble.mammoth.results.Warning; +import org.zwobble.mammoth.styles.HtmlPath; import org.zwobble.mammoth.styles.StyleMap; import org.zwobble.mammoth.util.MammothLists; @@ -18,6 +19,7 @@ import java.util.Base64; import java.util.List; import java.util.Map; +import static org.zwobble.mammoth.results.Warning.warning; import static org.zwobble.mammoth.util.MammothLists.*; import static org.zwobble.mammoth.util.MammothMaps.map; @@ -98,7 +100,14 @@ public class DocumentConverter { public List visit(Paragraph paragraph) { List content = convertChildrenToHtml(paragraph); List children = preserveEmptyParagraphs ? cons(Html.FORCE_WRITE, content) : content; - return styleMap.getParagraphStyleMapping(paragraph).wrap(children); + HtmlPath mapping = styleMap.getParagraphHtmlPath(paragraph) + .orElseGet(() -> { + if (paragraph.getStyle().isPresent()) { + warnings.add(warning("Unrecognised paragraph style: " + paragraph.getStyle().get().describe())); + } + return HtmlPath.element("p"); + }); + return mapping.wrap(children); } @Override diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index b6bba55..4421a17 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -10,6 +10,8 @@ import org.zwobble.mammoth.docx.DocxFile; import org.zwobble.mammoth.docx.ZippedDocxFile; import org.zwobble.mammoth.html.Html; import org.zwobble.mammoth.results.Result; +import org.zwobble.mammoth.styles.HtmlPath; +import org.zwobble.mammoth.styles.ParagraphMatcher; import org.zwobble.mammoth.styles.StyleMap; import org.zwobble.mammoth.util.Casts; @@ -42,6 +44,14 @@ public class Mammoth { } } + private static final StyleMap DEFAULT_STYLE_MAP = StyleMap.builder() + .mapParagraph(ParagraphMatcher.styleName("footnote text"), HtmlPath.element("p")) + .mapParagraph(ParagraphMatcher.styleName("endnote text"), HtmlPath.element("p")) + .mapParagraph(ParagraphMatcher.styleName("Footnote"), HtmlPath.element("p")) + .mapParagraph(ParagraphMatcher.styleName("Endnote"), HtmlPath.element("p")) + .mapParagraph(ParagraphMatcher.styleName("Normal"), HtmlPath.element("p")) + .build(); + public static Result convertToHtml(File file) { return convertToHtml(file, Options.DEFAULT); } @@ -49,7 +59,7 @@ public class Mammoth { public static Result convertToHtml(File file, Options options) { return withDocxFile(file, zipFile -> readDocument(zipFile) - .flatMap(nodes -> DocumentConverter.convertToHtml(options.idPrefix, options.preserveEmptyParagraphs, StyleMap.EMPTY, nodes)) + .flatMap(nodes -> DocumentConverter.convertToHtml(options.idPrefix, options.preserveEmptyParagraphs, DEFAULT_STYLE_MAP, nodes)) .map(Html::stripEmpty) .map(Html::collapse) .map(Html::write)); diff --git a/src/main/java/org/zwobble/mammoth/documents/Style.java b/src/main/java/org/zwobble/mammoth/documents/Style.java index 82a25de..2ce6edf 100644 --- a/src/main/java/org/zwobble/mammoth/documents/Style.java +++ b/src/main/java/org/zwobble/mammoth/documents/Style.java @@ -18,4 +18,9 @@ public class Style { public Optional getName() { return name; } + + public String describe() { + String styleIdDescription = "Style ID: " + styleId; + return this.name.map(name -> name + " (" + styleIdDescription + ")").orElse(styleIdDescription); + } } diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java index e498246..7aae7df 100644 --- a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java +++ b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java @@ -4,6 +4,7 @@ import com.google.common.collect.Iterables; import org.zwobble.mammoth.documents.Paragraph; import java.util.List; +import java.util.Optional; public class StyleMap { public static StyleMapBuilder builder() { @@ -30,9 +31,9 @@ public class StyleMap { return strikethrough; } - public HtmlPath getParagraphStyleMapping(Paragraph paragraph) { - return Iterables.tryFind(paragraphStyles, styleMapping -> styleMapping.matches(paragraph)) - .transform(StyleMapping::getHtmlPath) - .or(HtmlPath.element("p")); + public Optional getParagraphHtmlPath(Paragraph paragraph) { + com.google.common.base.Optional mapping = Iterables.tryFind(paragraphStyles, styleMapping -> styleMapping.matches(paragraph)); + return Optional.ofNullable(mapping.orNull()) + .map(StyleMapping::getHtmlPath); } } -- cgit v1.2.3