Mercurial Hosting > nabble
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(); + +}