aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java10
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/TableMatcher.java30
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java17
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java5
6 files changed, 71 insertions, 4 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());
+ }
+}
diff --git a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
index 7b12085..123bd8e 100644
--- a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
@@ -258,6 +258,23 @@ public class DocumentToHtmlTests {
}
@Test
+ public void tableStyleMappingsCanBeUsedToMapTables() {
+ assertThat(
+ convertToHtml(
+ table(list(), withStyle(new Style("TableNormal", Optional.of("Normal Table")))),
+ StyleMap.builder()
+ .mapTable(
+ TableMatcher.styleName("Normal Table"),
+ HtmlPath.element("table", map("class", "normal-table"))
+ )
+ .build()
+ ),
+
+ deepEquals(list(Html.element("table", map("class", "normal-table"))))
+ );
+ }
+
+ @Test
public void headerRowsAreWrappedInThead() {
assertThat(
convertToHtml(table(list(
diff --git a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
index 0289bdb..f206640 100644
--- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
+++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
@@ -122,8 +122,9 @@ public class DocumentElementMakers {
return run(withChildren(new Text(text)));
}
- public static Table table(List<DocumentElement> rows) {
- return new Table(Optional.empty(), rows);
+ public static Table table(List<DocumentElement> rows, Object... args) {
+ Arguments arguments = new Arguments(args);
+ return new Table(arguments.get(STYLE, Optional.empty()), rows);
}
public static TableRow tableRow(List<DocumentElement> cells, Object... args) {