From 559101b2464a9e5299c05adfac4a1fac8af8ef23 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 28 Nov 2016 16:18:23 +0000 Subject: Use HtmlElement for void elements --- .../internal/conversion/DocumentToHtml.java | 4 +-- .../org/zwobble/mammoth/internal/html/Html.java | 32 +++++++++------------- .../zwobble/mammoth/internal/html/HtmlNode.java | 2 -- .../internal/html/HtmlSelfClosingElement.java | 31 --------------------- .../zwobble/mammoth/internal/html/HtmlWriter.java | 24 ++++++++-------- 5 files changed, 26 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/org/zwobble/mammoth/internal/html/HtmlSelfClosingElement.java (limited to 'src/main/java/org/zwobble') 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 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.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 attributes) { - return new HtmlSelfClosingElement(tagName, attributes); - } - public static List stripEmpty(List nodes) { return Lists.eagerFlatMap(nodes, node -> stripEmpty(node)); } @@ -78,18 +72,13 @@ public class Html { @Override public List visit(HtmlElement element) { List children = stripEmpty(element.getChildren()); - if (children.isEmpty()) { + if (children.isEmpty() && !isVoidElement(element)) { return list(); } else { return list(new HtmlElement(element.getTag(), children)); } } - @Override - public List visit(HtmlSelfClosingElement element) { - return list(element); - } - @Override public List visit(HtmlTextNode node) { if (node.getValue().isEmpty()) { @@ -133,11 +122,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 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 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 attributes; - - public HtmlSelfClosingElement(String tagName, Map attributes) { - this.tagName = tagName; - this.attributes = attributes; - } - - public String getTagName() { - return tagName; - } - - public Map getAttributes() { - return attributes; - } - - @Override - public void accept(Visitor visitor) { - visitor.visit(this); - } - - @Override - public T accept(Mapper 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(""); - } - - @Override - public void visit(HtmlSelfClosingElement element) { - builder.append("<").append(element.getTagName()); - HtmlWriter.generateAttributes(element.getAttributes(), builder); - builder.append(" />"); + builder + .append(""); + } } @Override -- cgit v1.2.3