aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/html/Html.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/html/HtmlElement.java19
-rw-r--r--src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java12
-rw-r--r--src/main/java/org/zwobble/mammoth/html/HtmlWriter.java26
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/html/HtmlWriteTests.java7
5 files changed, 46 insertions, 24 deletions
diff --git a/src/main/java/org/zwobble/mammoth/html/Html.java b/src/main/java/org/zwobble/mammoth/html/Html.java
index 2291200..bd139c8 100644
--- a/src/main/java/org/zwobble/mammoth/html/Html.java
+++ b/src/main/java/org/zwobble/mammoth/html/Html.java
@@ -34,6 +34,10 @@ public class Html {
}
public static HtmlNode selfClosingElement(String tagName) {
- return new HtmlSelfClosingElement(tagName);
+ return selfClosingElement(tagName, map());
+ }
+
+ public static HtmlNode selfClosingElement(String tagName, Map<String, String> attributes) {
+ return new HtmlSelfClosingElement(tagName, attributes);
}
}
diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
index 31b1fe2..8111507 100644
--- a/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
+++ b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
@@ -1,8 +1,5 @@
package org.zwobble.mammoth.html;
-import com.google.common.base.Function;
-import com.google.common.collect.Ordering;
-
import java.util.List;
import java.util.Map;
@@ -21,17 +18,7 @@ public class HtmlElement implements HtmlNode {
public void write(StringBuilder builder) {
builder.append("<").append(tagName);
- List<Map.Entry<String, String>> sortedAttributes = orderBy(Map.Entry<String, String>::getKey)
- .sortedCopy(attributes.entrySet());
-
- for (Map.Entry<String, String> attribute : sortedAttributes) {
- builder
- .append(" ")
- .append(attribute.getKey())
- .append("=\"")
- .append(HtmlWriter.escapeAttributeValue(attribute.getValue()))
- .append("\"");
- }
+ HtmlWriter.generateAttributes(attributes, builder);
builder.append(">");
@@ -42,8 +29,4 @@ public class HtmlElement implements HtmlNode {
.append(tagName)
.append(">");
}
-
- private static <T, R extends Comparable<R>> Ordering<T> orderBy(Function<T, R> getKey) {
- return Ordering.from((first, second) -> getKey.apply(first).compareTo(getKey.apply(second)));
- }
}
diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
index f3ef3f8..73f4734 100644
--- a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
+++ b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
@@ -1,16 +1,20 @@
package org.zwobble.mammoth.html;
+import java.util.Map;
+
public class HtmlSelfClosingElement implements HtmlNode {
private final String tagName;
+ private final Map<String, String> attributes;
- public HtmlSelfClosingElement(String tagName) {
+ public HtmlSelfClosingElement(String tagName, Map<String, String> attributes) {
this.tagName = tagName;
+ this.attributes = attributes;
}
@Override
public void write(StringBuilder builder) {
- builder.append("<")
- .append(tagName)
- .append(" />");
+ builder.append("<").append(tagName);
+ HtmlWriter.generateAttributes(attributes, builder);
+ builder.append(" />");
}
}
diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java b/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java
index fdf1e6c..4262e03 100644
--- a/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java
+++ b/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java
@@ -1,11 +1,35 @@
package org.zwobble.mammoth.html;
+import com.google.common.base.Function;
+import com.google.common.collect.Ordering;
+
+import java.util.List;
+import java.util.Map;
+
public class HtmlWriter {
public static String escapeText(String text) {
return text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
}
- public static String escapeAttributeValue(String value) {
+ private static String escapeAttributeValue(String value) {
return escapeText(value).replace("\"", "&quot;");
}
+
+ public static void generateAttributes(Map<String, String> attributes, StringBuilder builder) {
+ List<Map.Entry<String, String>> sortedAttributes = orderBy(Map.Entry<String, String>::getKey)
+ .sortedCopy(attributes.entrySet());
+
+ for (Map.Entry<String, String> attribute : sortedAttributes) {
+ builder
+ .append(" ")
+ .append(attribute.getKey())
+ .append("=\"")
+ .append(HtmlWriter.escapeAttributeValue(attribute.getValue()))
+ .append("\"");
+ }
+ }
+
+ private static <T, R extends Comparable<R>> Ordering<T> orderBy(Function<T, R> getKey) {
+ return Ordering.from((first, second) -> getKey.apply(first).compareTo(getKey.apply(second)));
+ }
}
diff --git a/src/test/java/org/zwobble/mammoth/tests/html/HtmlWriteTests.java b/src/test/java/org/zwobble/mammoth/tests/html/HtmlWriteTests.java
index 9e90e8b..2f94776 100644
--- a/src/test/java/org/zwobble/mammoth/tests/html/HtmlWriteTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/html/HtmlWriteTests.java
@@ -38,6 +38,13 @@ public class HtmlWriteTests {
}
@Test
+ public void canWriteSelfClosingElementWithAttributes() {
+ assertEquals(
+ "<img class=\"external\" src=\"http://example.com\" />",
+ write(Html.selfClosingElement("img", map("class", "external", "src", "http://example.com"))));
+ }
+
+ @Test
public void canWriteElementWithNoChildren() {
assertEquals(
"<p></p>",