diff src/nabble/naml/dom/Element.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/naml/dom/Element.java	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,59 @@
+package nabble.naml.dom;
+
+import java.util.Map;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+
+
+public abstract class Element {
+	final ElementName name;
+	final Map<String,Attribute> attrMap = new LinkedHashMap<String,Attribute>();
+	final String spaceAtEndOfOpeningTag;
+	final int lineNumber;
+
+	public Element(ElementName name,Iterable<Attribute> attributes,String spaceAtEndOfOpeningTag,int lineNumber) {
+		this.name = name;
+		for( Attribute attr : attributes ) {
+			attrMap.put(attr.name,attr);
+		}
+		this.spaceAtEndOfOpeningTag = spaceAtEndOfOpeningTag.intern();
+		this.lineNumber = lineNumber;
+	}
+
+	public final ElementName name() {
+		return name;
+	}
+
+	public final Collection<Attribute> attributes() {
+		return attrMap.values();
+	}
+
+	public final Attribute getAttribute(String name) {
+		return attrMap.get(name);
+	}
+
+	public final Map<String,Attribute> attributeMap() {
+		return new HashMap<String,Attribute>(attrMap);
+	}
+
+	public final String spaceAtEndOfOpeningTag() {
+		return spaceAtEndOfOpeningTag;
+	}
+
+	public final int lineNumber() {
+		return lineNumber;
+	}
+
+	final void addStartTag(StringBuilder buf) {
+		buf.append( '<' );
+		buf.append( name );
+		for( Attribute attr : attributes() ) {
+			buf.append( attr );
+		}
+		buf.append( spaceAtEndOfOpeningTag );
+	}
+
+	public abstract String openingTag();
+
+}