From 8377b89bfc97a85dbe90fb4cfa5dd33cd3568af4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 21 Feb 2016 10:09:47 +0000 Subject: Add style mappings for runs --- .../org/zwobble/mammoth/DocumentConverter.java | 9 ++++++- src/main/java/org/zwobble/mammoth/Mammoth.java | 11 +++++---- .../mammoth/styles/DocumentElementMatcher.java | 5 ++++ .../mammoth/styles/DocumentElementMatching.java | 26 ++++++++++++++++++++ .../zwobble/mammoth/styles/ParagraphMatcher.java | 23 +++++------------- .../org/zwobble/mammoth/styles/RunMatcher.java | 28 ++++++++++++++++++++++ .../java/org/zwobble/mammoth/styles/StyleMap.java | 26 ++++++++++++++++---- .../zwobble/mammoth/styles/StyleMapBuilder.java | 16 +++++++++---- .../org/zwobble/mammoth/styles/StyleMapping.java | 12 ++++------ 9 files changed, 119 insertions(+), 37 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/styles/DocumentElementMatcher.java create mode 100644 src/main/java/org/zwobble/mammoth/styles/DocumentElementMatching.java create mode 100644 src/main/java/org/zwobble/mammoth/styles/RunMatcher.java (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java index 154b878..0cf100c 100644 --- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java @@ -131,7 +131,14 @@ public class DocumentConverter { if (run.isBold()) { nodes = list(Html.collapsibleElement("strong", nodes)); } - return nodes; + HtmlPath mapping = styleMap.getRunHtmlPath(run) + .orElseGet(() -> { + if (run.getStyle().isPresent()) { + warnings.add(warning("Unrecognised run style: " + run.getStyle().get().describe())); + } + return HtmlPath.EMPTY; + }); + return mapping.wrap(nodes); } @Override diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index 4963c3a..e89e282 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -11,10 +11,7 @@ import org.zwobble.mammoth.docx.InMemoryDocxFile; 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.HtmlPathElement; -import org.zwobble.mammoth.styles.ParagraphMatcher; -import org.zwobble.mammoth.styles.StyleMap; +import org.zwobble.mammoth.styles.*; import org.zwobble.mammoth.util.Casts; import java.io.File; @@ -51,9 +48,14 @@ public class Mammoth { private static final StyleMap DEFAULT_STYLE_MAP = StyleMap.builder() .mapParagraph(ParagraphMatcher.styleName("footnote text"), HtmlPath.element("p")) + .mapRun(RunMatcher.styleName("footnote reference"), HtmlPath.EMPTY) .mapParagraph(ParagraphMatcher.styleName("endnote text"), HtmlPath.element("p")) + .mapRun(RunMatcher.styleName("endnote reference"), HtmlPath.EMPTY) + .mapParagraph(ParagraphMatcher.styleName("Footnote"), HtmlPath.element("p")) + .mapRun(RunMatcher.styleName("Footnote anchor"), HtmlPath.EMPTY) .mapParagraph(ParagraphMatcher.styleName("Endnote"), HtmlPath.element("p")) + .mapRun(RunMatcher.styleName("Endnote anchor"), HtmlPath.EMPTY) .mapParagraph( ParagraphMatcher.unorderedList("0"), @@ -61,6 +63,7 @@ public class Mammoth { HtmlPathElement.collapsible("ul"), HtmlPathElement.fresh("li")))) + .mapRun(RunMatcher.styleName("Hyperlink"), HtmlPath.EMPTY) .mapParagraph(ParagraphMatcher.styleName("Normal"), HtmlPath.element("p")) .build(); diff --git a/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatcher.java b/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatcher.java new file mode 100644 index 0000000..19d5be5 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatcher.java @@ -0,0 +1,5 @@ +package org.zwobble.mammoth.styles; + +public interface DocumentElementMatcher { + boolean matches(T element); +} diff --git a/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatching.java b/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatching.java new file mode 100644 index 0000000..0ed00fc --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/styles/DocumentElementMatching.java @@ -0,0 +1,26 @@ +package org.zwobble.mammoth.styles; + +import org.zwobble.mammoth.documents.Style; + +import java.util.Optional; +import java.util.function.BiPredicate; + +class DocumentElementMatching { + static boolean matchesStyle(Optional styleId, Optional styleName, Optional