From d6f00b6a57a19349de058ee17e1f963c0a972cf6 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 4 Nov 2017 11:45:06 +0000 Subject: Use table style mappings during document conversion --- .../internal/conversion/DocumentToHtml.java | 5 ++-- .../zwobble/mammoth/internal/styles/StyleMap.java | 10 ++++++++ .../mammoth/internal/styles/StyleMapBuilder.java | 8 ++++++ .../mammoth/internal/styles/TableMatcher.java | 30 ++++++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/internal/styles/TableMatcher.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java index 8b15106..3f3576f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java @@ -226,8 +226,9 @@ public class DocumentToHtml { @Override public List visit(Table table, Context context) { - List children = generateTableChildren(table, context); - return list(Html.element("table", children)); + HtmlPath mapping = styleMap.getTableHtmlPath(table) + .orElse(HtmlPath.element("table")); + return mapping.wrap(() -> generateTableChildren(table, context)).get(); } private List generateTableChildren(Table table, Context context) { diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java index 7959acb..2b1d19a 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java @@ -3,6 +3,7 @@ package org.zwobble.mammoth.internal.styles; import org.zwobble.mammoth.internal.documents.Break; import org.zwobble.mammoth.internal.documents.Paragraph; import org.zwobble.mammoth.internal.documents.Run; +import org.zwobble.mammoth.internal.documents.Table; import org.zwobble.mammoth.internal.util.Lists; import org.zwobble.mammoth.internal.util.Optionals; @@ -27,6 +28,7 @@ public class StyleMap { Optionals.first(high.commentReference, low.commentReference), Lists.eagerConcat(high.paragraphStyles, low.paragraphStyles), Lists.eagerConcat(high.runStyles, low.runStyles), + Lists.eagerConcat(high.tableStyles, low.tableStyles), Lists.eagerConcat(high.breakStyles, low.breakStyles) ); } @@ -41,6 +43,7 @@ public class StyleMap { private final Optional commentReference; private final List> paragraphStyles; private final List> runStyles; + private final List> tableStyles; private final List> breakStyles; public StyleMap( @@ -52,6 +55,7 @@ public class StyleMap { Optional commentReference, List> paragraphStyles, List> runStyles, + List> tableStyles, List> breakStyles ) { @@ -63,6 +67,7 @@ public class StyleMap { this.commentReference = commentReference; this.paragraphStyles = paragraphStyles; this.runStyles = runStyles; + this.tableStyles = tableStyles; this.breakStyles = breakStyles; } @@ -105,6 +110,11 @@ public class StyleMap { .map(StyleMapping::getHtmlPath); } + public Optional getTableHtmlPath(Table table) { + return tryFind(tableStyles, styleMapping -> styleMapping.matches(table)) + .map(StyleMapping::getHtmlPath); + } + public Optional getBreakHtmlPath(Break breakElement) { return tryFind(breakStyles, styleMapping -> styleMapping.matches(breakElement)) .map(StyleMapping::getHtmlPath); diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java index 4e6e27b..dbd4fa8 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java @@ -3,6 +3,7 @@ package org.zwobble.mammoth.internal.styles; import org.zwobble.mammoth.internal.documents.Break; import org.zwobble.mammoth.internal.documents.Paragraph; import org.zwobble.mammoth.internal.documents.Run; +import org.zwobble.mammoth.internal.documents.Table; import java.util.ArrayList; import java.util.List; @@ -17,6 +18,7 @@ public class StyleMapBuilder { private Optional commentReference; private final List> paragraphStyles = new ArrayList<>(); private final List> runStyles = new ArrayList<>(); + private final List> tableStyles = new ArrayList<>(); private final List> breakStyles = new ArrayList<>(); public StyleMapBuilder() { @@ -68,6 +70,11 @@ public class StyleMapBuilder { return this; } + public StyleMapBuilder mapTable(TableMatcher matcher, HtmlPath path) { + tableStyles.add(new StyleMapping<>(matcher, path)); + return this; + } + public StyleMapBuilder mapBreak(BreakMatcher matcher, HtmlPath path) { breakStyles.add(new StyleMapping<>(matcher, path)); return this; @@ -83,6 +90,7 @@ public class StyleMapBuilder { commentReference, paragraphStyles, runStyles, + tableStyles, breakStyles ); } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/TableMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/TableMatcher.java new file mode 100644 index 0000000..7dbba82 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/TableMatcher.java @@ -0,0 +1,30 @@ +package org.zwobble.mammoth.internal.styles; + +import org.zwobble.mammoth.internal.documents.Table; + +import java.util.Optional; + +public class TableMatcher implements DocumentElementMatcher { + public static final TableMatcher ANY = new TableMatcher(Optional.empty(), Optional.empty()); + + public static TableMatcher styleId(String styleId) { + return new TableMatcher(Optional.of(styleId), Optional.empty()); + } + + public static TableMatcher styleName(String styleName) { + return new TableMatcher(Optional.empty(), Optional.of(new EqualToStringMatcher(styleName))); + } + + private final Optional styleId; + private final Optional styleName; + + public TableMatcher(Optional styleId, Optional styleName) { + this.styleId = styleId; + this.styleName = styleName; + } + + @Override + public boolean matches(Table table) { + return DocumentElementMatching.matchesStyle(styleId, styleName, table.getStyle()); + } +} -- cgit v1.2.3