src/Pure/General/xml.scala
changeset 34046 8e743ca417b9
parent 34005 ada5098506af
child 34047 2af94d45597f
equal deleted inserted replaced
34045:bc71778a327d 34046:8e743ca417b9
    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