diff options
Diffstat (limited to 'src/main/java')
4 files changed, 51 insertions, 2 deletions
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<HtmlNode> visit(Table table, Context context) { - List<HtmlNode> 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<HtmlNode> 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<HtmlPath> commentReference; private final List<StyleMapping<Paragraph>> paragraphStyles; private final List<StyleMapping<Run>> runStyles; + private final List<StyleMapping<Table>> tableStyles; private final List<StyleMapping<Break>> breakStyles; public StyleMap( @@ -52,6 +55,7 @@ public class StyleMap { Optional<HtmlPath> commentReference, List<StyleMapping<Paragraph>> paragraphStyles, List<StyleMapping<Run>> runStyles, + List<StyleMapping<Table>> tableStyles, List<StyleMapping<Break>> 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<HtmlPath> getTableHtmlPath(Table table) { + return tryFind(tableStyles, styleMapping -> styleMapping.matches(table)) + .map(StyleMapping::getHtmlPath); + } + public Optional<HtmlPath> 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<HtmlPath> commentReference; private final List<StyleMapping<Paragraph>> paragraphStyles = new ArrayList<>(); private final List<StyleMapping<Run>> runStyles = new ArrayList<>(); + private final List<StyleMapping<Table>> tableStyles = new ArrayList<>(); private final List<StyleMapping<Break>> 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<Table> { + 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<String> styleId; + private final Optional<StringMatcher> styleName; + + public TableMatcher(Optional<String> styleId, Optional<StringMatcher> styleName) { + this.styleId = styleId; + this.styleName = styleName; + } + + @Override + public boolean matches(Table table) { + return DocumentElementMatching.matchesStyle(styleId, styleName, table.getStyle()); + } +} |
