view 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 source

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();

}