comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
1 package nabble.naml.dom;
2
3 import java.util.Map;
4 import java.util.Collection;
5 import java.util.HashMap;
6 import java.util.LinkedHashMap;
7
8
9 public abstract class Element {
10 final ElementName name;
11 final Map<String,Attribute> attrMap = new LinkedHashMap<String,Attribute>();
12 final String spaceAtEndOfOpeningTag;
13 final int lineNumber;
14
15 public Element(ElementName name,Iterable<Attribute> attributes,String spaceAtEndOfOpeningTag,int lineNumber) {
16 this.name = name;
17 for( Attribute attr : attributes ) {
18 attrMap.put(attr.name,attr);
19 }
20 this.spaceAtEndOfOpeningTag = spaceAtEndOfOpeningTag.intern();
21 this.lineNumber = lineNumber;
22 }
23
24 public final ElementName name() {
25 return name;
26 }
27
28 public final Collection<Attribute> attributes() {
29 return attrMap.values();
30 }
31
32 public final Attribute getAttribute(String name) {
33 return attrMap.get(name);
34 }
35
36 public final Map<String,Attribute> attributeMap() {
37 return new HashMap<String,Attribute>(attrMap);
38 }
39
40 public final String spaceAtEndOfOpeningTag() {
41 return spaceAtEndOfOpeningTag;
42 }
43
44 public final int lineNumber() {
45 return lineNumber;
46 }
47
48 final void addStartTag(StringBuilder buf) {
49 buf.append( '<' );
50 buf.append( name );
51 for( Attribute attr : attributes() ) {
52 buf.append( attr );
53 }
54 buf.append( spaceAtEndOfOpeningTag );
55 }
56
57 public abstract String openingTag();
58
59 }