From 5c8c5d57d37f4411630828e3c658bb23e10e207b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 14 Feb 2016 10:55:30 +0000 Subject: Generate HTML using HTML AST --- src/main/java/org/zwobble/mammoth/html/Html.java | 19 +++++++++++++++ .../org/zwobble/mammoth/html/HtmlElementNode.java | 28 ++++++++++++++++++++++ .../java/org/zwobble/mammoth/html/HtmlNode.java | 5 ++++ .../org/zwobble/mammoth/html/HtmlTextNode.java | 14 +++++++++++ 4 files changed, 66 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/html/Html.java create mode 100644 src/main/java/org/zwobble/mammoth/html/HtmlElementNode.java create mode 100644 src/main/java/org/zwobble/mammoth/html/HtmlNode.java create mode 100644 src/main/java/org/zwobble/mammoth/html/HtmlTextNode.java (limited to 'src/main/java/org/zwobble/mammoth/html') diff --git a/src/main/java/org/zwobble/mammoth/html/Html.java b/src/main/java/org/zwobble/mammoth/html/Html.java new file mode 100644 index 0000000..9b6ccbb --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/html/Html.java @@ -0,0 +1,19 @@ +package org.zwobble.mammoth.html; + +import java.util.List; + +public class Html { + public static String write(List nodes) { + StringBuilder builder = new StringBuilder(); + nodes.forEach(node -> node.write(builder)); + return builder.toString(); + } + + public static HtmlNode text(String value) { + return new HtmlTextNode(value); + } + + public static HtmlNode element(String tagName, List children) { + return new HtmlElementNode(tagName, children); + } +} diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlElementNode.java b/src/main/java/org/zwobble/mammoth/html/HtmlElementNode.java new file mode 100644 index 0000000..34de63e --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/html/HtmlElementNode.java @@ -0,0 +1,28 @@ +package org.zwobble.mammoth.html; + +import java.util.List; + +public class HtmlElementNode implements HtmlNode { + private final String tagName; + private final List children; + + public HtmlElementNode(String tagName, List children) { + this.tagName = tagName; + this.children = children; + } + + @Override + public void write(StringBuilder builder) { + builder + .append("<") + .append(tagName) + .append(">"); + + children.forEach(node -> node.write(builder)); + + builder + .append(""); + } +} diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlNode.java b/src/main/java/org/zwobble/mammoth/html/HtmlNode.java new file mode 100644 index 0000000..9977c66 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/html/HtmlNode.java @@ -0,0 +1,5 @@ +package org.zwobble.mammoth.html; + +public interface HtmlNode { + void write(StringBuilder builder); +} diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlTextNode.java b/src/main/java/org/zwobble/mammoth/html/HtmlTextNode.java new file mode 100644 index 0000000..2c3a7c2 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/html/HtmlTextNode.java @@ -0,0 +1,14 @@ +package org.zwobble.mammoth.html; + +public class HtmlTextNode implements HtmlNode { + private final String value; + + public HtmlTextNode(String value) { + this.value = value; + } + + @Override + public void write(StringBuilder builder) { + builder.append(value); + } +} -- cgit v1.2.3