aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/html/Html.java32
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/html/HtmlNode.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/html/HtmlSelfClosingElement.java31
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/html/HtmlWriter.java24
5 files changed, 26 insertions, 67 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 e88688a..c252683 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
@@ -188,7 +188,7 @@ public class DocumentToHtml {
@Override
public List<HtmlNode> visit(Break breakElement) {
if (breakElement.getType() == Break.Type.LINE) {
- return list(Html.selfClosingElement("br"));
+ return list(Html.element("br"));
} else {
return list();
}
@@ -282,7 +282,7 @@ public class DocumentToHtml {
image.getAltText().ifPresent(altText -> attributes.put("alt", altText));
- return list(Html.selfClosingElement("img", attributes));
+ return list(Html.element("img", attributes));
} catch (IOException exception) {
warnings.add(exception.getMessage());
return Lists.<HtmlNode>list();
diff --git a/src/main/java/org/zwobble/mammoth/internal/html/Html.java b/src/main/java/org/zwobble/mammoth/internal/html/Html.java
index a3724bf..7669c6e 100644
--- a/src/main/java/org/zwobble/mammoth/internal/html/Html.java
+++ b/src/main/java/org/zwobble/mammoth/internal/html/Html.java
@@ -6,11 +6,13 @@ import org.zwobble.mammoth.internal.util.Optionals;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static org.zwobble.mammoth.internal.util.Casts.tryCast;
import static org.zwobble.mammoth.internal.util.Lists.list;
import static org.zwobble.mammoth.internal.util.Lists.tryGetLast;
import static org.zwobble.mammoth.internal.util.Maps.map;
+import static org.zwobble.mammoth.internal.util.Sets.set;
public class Html {
public static final HtmlNode FORCE_WRITE = HtmlForceWrite.FORCE_WRITE;
@@ -61,14 +63,6 @@ public class Html {
return new HtmlElement(new HtmlTag(tagNames, attributes, true, ""), children);
}
- public static HtmlNode selfClosingElement(String tagName) {
- return selfClosingElement(tagName, map());
- }
-
- public static HtmlNode selfClosingElement(String tagName, Map<String, String> attributes) {
- return new HtmlSelfClosingElement(tagName, attributes);
- }
-
public static List<HtmlNode> stripEmpty(List<HtmlNode> nodes) {
return Lists.eagerFlatMap(nodes, node -> stripEmpty(node));
}
@@ -78,7 +72,7 @@ public class Html {
@Override
public List<HtmlNode> visit(HtmlElement element) {
List<HtmlNode> children = stripEmpty(element.getChildren());
- if (children.isEmpty()) {
+ if (children.isEmpty() && !isVoidElement(element)) {
return list();
} else {
return list(new HtmlElement(element.getTag(), children));
@@ -86,11 +80,6 @@ public class Html {
}
@Override
- public List<HtmlNode> visit(HtmlSelfClosingElement element) {
- return list(element);
- }
-
- @Override
public List<HtmlNode> visit(HtmlTextNode node) {
if (node.getValue().isEmpty()) {
return list();
@@ -134,11 +123,6 @@ public class Html {
}
@Override
- public HtmlNode visit(HtmlSelfClosingElement element) {
- return element;
- }
-
- @Override
public HtmlNode visit(HtmlTextNode node) {
return node;
}
@@ -175,4 +159,14 @@ public class Html {
return second.getTagNames().contains(first.getTagName()) &&
first.getAttributes().equals(second.getAttributes());
}
+
+ static boolean isVoidElement(HtmlElement element) {
+ return element.getChildren().isEmpty() && isVoidTag(element.getTagName());
+ }
+
+ private static final Set<String> VOID_TAG_NAMES = set("img", "br");
+
+ private static boolean isVoidTag(String tagName) {
+ return VOID_TAG_NAMES.contains(tagName);
+ }
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/html/HtmlNode.java b/src/main/java/org/zwobble/mammoth/internal/html/HtmlNode.java
index 5ea937f..08536c2 100644
--- a/src/main/java/org/zwobble/mammoth/internal/html/HtmlNode.java
+++ b/src/main/java/org/zwobble/mammoth/internal/html/HtmlNode.java
@@ -6,14 +6,12 @@ public interface HtmlNode {
interface Visitor {
void visit(HtmlElement element);
- void visit(HtmlSelfClosingElement element);
void visit(HtmlTextNode node);
void visit(HtmlForceWrite forceWrite);
}
interface Mapper<T> {
T visit(HtmlElement element);
- T visit(HtmlSelfClosingElement element);
T visit(HtmlTextNode node);
T visit(HtmlForceWrite forceWrite);
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/html/HtmlSelfClosingElement.java b/src/main/java/org/zwobble/mammoth/internal/html/HtmlSelfClosingElement.java
deleted file mode 100644
index 292609e..0000000
--- a/src/main/java/org/zwobble/mammoth/internal/html/HtmlSelfClosingElement.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.zwobble.mammoth.internal.html;
-
-import java.util.Map;
-
-public class HtmlSelfClosingElement implements HtmlNode {
- private final String tagName;
- private final Map<String, String> attributes;
-
- public HtmlSelfClosingElement(String tagName, Map<String, String> attributes) {
- this.tagName = tagName;
- this.attributes = attributes;
- }
-
- public String getTagName() {
- return tagName;
- }
-
- public Map<String, String> getAttributes() {
- return attributes;
- }
-
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public <T> T accept(Mapper<T> visitor) {
- return visitor.visit(this);
- }
-}
diff --git a/src/main/java/org/zwobble/mammoth/internal/html/HtmlWriter.java b/src/main/java/org/zwobble/mammoth/internal/html/HtmlWriter.java
index 59bb90a..910fd81 100644
--- a/src/main/java/org/zwobble/mammoth/internal/html/HtmlWriter.java
+++ b/src/main/java/org/zwobble/mammoth/internal/html/HtmlWriter.java
@@ -2,6 +2,7 @@ package org.zwobble.mammoth.internal.html;
import java.util.Map;
+import static org.zwobble.mammoth.internal.html.Html.isVoidElement;
import static org.zwobble.mammoth.internal.util.Lists.orderedBy;
public class HtmlWriter {
@@ -13,21 +14,18 @@ public class HtmlWriter {
HtmlWriter.generateAttributes(element.getAttributes(), builder);
- builder.append(">");
+ if (isVoidElement(element)) {
+ builder.append(" />");
+ } else {
+ builder.append(">");
- element.getChildren().forEach(child -> write(child, builder));
+ element.getChildren().forEach(child -> write(child, builder));
- builder
- .append("</")
- .append(element.getTagName())
- .append(">");
- }
-
- @Override
- public void visit(HtmlSelfClosingElement element) {
- builder.append("<").append(element.getTagName());
- HtmlWriter.generateAttributes(element.getAttributes(), builder);
- builder.append(" />");
+ builder
+ .append("</")
+ .append(element.getTagName())
+ .append(">");
+ }
}
@Override