equal
deleted
inserted
replaced
14 { |
14 { |
15 /* datatype representation */ |
15 /* datatype representation */ |
16 |
16 |
17 type Attributes = List[(String, String)] |
17 type Attributes = List[(String, String)] |
18 |
18 |
19 abstract class Tree { |
19 sealed abstract class Tree { |
20 override def toString = { |
20 override def toString = { |
21 val s = new StringBuilder |
21 val s = new StringBuilder |
22 append_tree(this, s) |
22 append_tree(this, s) |
23 s.toString |
23 s.toString |
24 } |
24 } |
95 /* document object model (W3C DOM) */ |
95 /* document object model (W3C DOM) */ |
96 |
96 |
97 def document_node(doc: Document, tree: Tree): Node = |
97 def document_node(doc: Document, tree: Tree): Node = |
98 { |
98 { |
99 def DOM(tr: Tree): Node = tr match { |
99 def DOM(tr: Tree): Node = tr match { |
100 case Elem(name, atts, ts) => { |
100 case Elem(Markup.DATA, Nil, List(data, t)) => |
|
101 val node = DOM(t) |
|
102 node.setUserData(Markup.DATA, data, null) |
|
103 node |
|
104 case Elem(name, atts, ts) => |
|
105 if (name == Markup.DATA) |
|
106 error("Malformed data element: " + tr.toString) |
101 val node = doc.createElement(name) |
107 val node = doc.createElement(name) |
102 for ((name, value) <- atts) node.setAttribute(name, value) |
108 for ((name, value) <- atts) node.setAttribute(name, value) |
103 for (t <- ts) node.appendChild(DOM(t)) |
109 for (t <- ts) node.appendChild(DOM(t)) |
104 node |
110 node |
105 } |
|
106 case Text(txt) => doc.createTextNode(txt) |
111 case Text(txt) => doc.createTextNode(txt) |
107 } |
112 } |
108 DOM(tree) |
113 DOM(tree) |
109 } |
114 } |
110 |
115 |