aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/DocumentConverter.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/HtmlPath.java11
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/HtmlPathElement.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/StyleMap.java17
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java10
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java10
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java3
7 files changed, 52 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
index c2adf4d..ac09c8b 100644
--- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java
+++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
@@ -86,7 +86,7 @@ public class DocumentConverter {
public List<HtmlNode> visit(Paragraph paragraph) {
List<HtmlNode> content = convertChildrenToHtml(paragraph);
List<HtmlNode> children = preserveEmptyParagraphs ? cons(Html.FORCE_WRITE, content) : content;
- return list(Html.element("p", children));
+ return styleMap.getParagraphStyleMapping(paragraph).wrap(children);
}
@Override
diff --git a/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java b/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java
index 99bdf55..b03d0b6 100644
--- a/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java
+++ b/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java
@@ -4,14 +4,21 @@ import com.google.common.collect.Lists;
import org.zwobble.mammoth.html.HtmlNode;
import java.util.List;
+import java.util.Map;
+
+import static org.zwobble.mammoth.util.MammothMaps.map;
public class HtmlPath {
public static HtmlPathElement element(String tagName) {
- return new HtmlPathElement(tagName, false);
+ return element(tagName, map());
+ }
+
+ public static HtmlPathElement element(String tagName, Map<String, String> attributes) {
+ return new HtmlPathElement(tagName, attributes, false);
}
public static HtmlPathElement collapsibleElement(String tagName) {
- return new HtmlPathElement(tagName, true);
+ return new HtmlPathElement(tagName, map(), true);
}
private final List<HtmlPathElement> elements;
diff --git a/src/main/java/org/zwobble/mammoth/styles/HtmlPathElement.java b/src/main/java/org/zwobble/mammoth/styles/HtmlPathElement.java
index d2d9363..f250992 100644
--- a/src/main/java/org/zwobble/mammoth/styles/HtmlPathElement.java
+++ b/src/main/java/org/zwobble/mammoth/styles/HtmlPathElement.java
@@ -4,20 +4,22 @@ import org.zwobble.mammoth.html.HtmlElement;
import org.zwobble.mammoth.html.HtmlNode;
import java.util.List;
+import java.util.Map;
import static org.zwobble.mammoth.util.MammothLists.list;
-import static org.zwobble.mammoth.util.MammothMaps.map;
public class HtmlPathElement {
private final String tagName;
+ private final Map<String, String> attributes;
private final boolean isCollapsible;
- public HtmlPathElement(String tagName, boolean isCollapsible) {
+ public HtmlPathElement(String tagName, Map<String, String> attributes, boolean isCollapsible) {
this.tagName = tagName;
+ this.attributes = attributes;
this.isCollapsible = isCollapsible;
}
public List<HtmlNode> wrap(List<HtmlNode> nodes) {
- return list(new HtmlElement(tagName, map(), nodes, isCollapsible));
+ return list(new HtmlElement(tagName, attributes, nodes, isCollapsible));
}
}
diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java
index 1db5c65..383554f 100644
--- a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java
+++ b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java
@@ -1,5 +1,12 @@
package org.zwobble.mammoth.styles;
+import org.zwobble.mammoth.documents.Paragraph;
+
+import java.util.Map;
+import java.util.Optional;
+
+import static org.zwobble.mammoth.util.MammothLists.list;
+
public class StyleMap {
public static StyleMapBuilder builder() {
return new StyleMapBuilder();
@@ -9,10 +16,12 @@ public class StyleMap {
private final HtmlPath underline;
private final HtmlPath strikethrough;
+ private final Map<String, HtmlPath> paragraphStyles;
- public StyleMap(HtmlPath underline, HtmlPath strikethrough) {
+ public StyleMap(HtmlPath underline, HtmlPath strikethrough, Map<String, HtmlPath> paragraphStyles) {
this.underline = underline;
this.strikethrough = strikethrough;
+ this.paragraphStyles = paragraphStyles;
}
public HtmlPath getUnderline() {
@@ -22,4 +31,10 @@ public class StyleMap {
public HtmlPath getStrikethrough() {
return strikethrough;
}
+
+ public HtmlPath getParagraphStyleMapping(Paragraph paragraph) {
+ return paragraph.getStyle()
+ .flatMap(style -> Optional.ofNullable(paragraphStyles.get(style.getStyleId())))
+ .orElse(new HtmlPath(list(HtmlPath.element("p"))));
+ }
}
diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java
index 93a2c8c..c815e1b 100644
--- a/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java
+++ b/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java
@@ -1,10 +1,13 @@
package org.zwobble.mammoth.styles;
+import com.google.common.collect.ImmutableMap;
+
import static org.zwobble.mammoth.util.MammothLists.list;
public class StyleMapBuilder {
private HtmlPath underline;
private HtmlPath strikethrough;
+ private final ImmutableMap.Builder<String, HtmlPath> paragraphStyles = ImmutableMap.builder();
public StyleMapBuilder() {
this.underline = new HtmlPath(list());
@@ -29,7 +32,12 @@ public class StyleMapBuilder {
return this;
}
+ public StyleMapBuilder mapParagraph(String styleId, HtmlPath path) {
+ paragraphStyles.put(styleId, path);
+ return this;
+ }
+
public StyleMap build() {
- return new StyleMap(underline, strikethrough);
+ return new StyleMap(underline, strikethrough, paragraphStyles.build());
}
}
diff --git a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
index f888f6a..8e76619 100644
--- a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
@@ -52,6 +52,16 @@ public class DocumentConverterTests {
}
@Test
+ public void styleMappingsUsingStyleIdsCanBeUsedToMapParagraphs() {
+ assertThat(
+ convertToHtml(
+ make(a(PARAGRAPH, with(STYLE, Optional.of(new Style("TipsParagraph", Optional.empty()))))),
+ StyleMap.builder().mapParagraph("TipsParagraph", new HtmlPath(list(HtmlPath.element("p", map("class", "tip"))))).build()),
+
+ deepEquals(list(Html.element("p", map("class", "tip")))));
+ }
+
+ @Test
public void boldRunsAreWrappedInStrongTags() {
assertThat(
convertToHtml(make(a(RUN, with(BOLD, true), with(CHILDREN, list(new Text("Hello")))))),
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 2fa5fea..1091ab8 100644
--- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
+++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
@@ -14,6 +14,7 @@ import static com.natpryce.makeiteasy.Property.newProperty;
import static org.zwobble.mammoth.util.MammothLists.list;
public class DocumentElementMakers {
+ public static final Property<HasChildren, Optional<Style>> STYLE = newProperty();
public static final Property<HasChildren, Boolean> BOLD = newProperty();
public static final Property<HasChildren, Boolean> ITALIC = newProperty();
public static final Property<HasChildren, Boolean> UNDERLINE = newProperty();
@@ -23,7 +24,7 @@ public class DocumentElementMakers {
public static final Instantiator<Paragraph> PARAGRAPH =
propertyLookup -> new Paragraph(
- Optional.empty(),
+ propertyLookup.valueOf(STYLE, Optional.empty()),
Optional.empty(),
propertyLookup.valueOf(CHILDREN, list()));