src/Pure/Thy/html.scala
author wenzelm
Sun, 06 Dec 2009 22:23:31 +0100
changeset 34000 1fecda948697
parent 33984 c54498f88a77
child 34002 cbeeef3aebb3
permissions -rw-r--r--
more robust treatment of line breaks -- Java "split" has off semantics;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33984
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Thy/html.scala
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     3
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     4
Basic HTML output.
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     5
*/
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     6
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     7
package isabelle
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     8
34000
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
     9
import scala.collection.mutable.ListBuffer
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    10
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    11
33984
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    12
object HTML
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    13
{
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    14
  // common elements and attributes
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    15
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    16
  val BODY = "body"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    17
  val DIV = "div"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    18
  val SPAN = "span"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    19
  val BR = "br"
34000
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    20
  val PRE = "pre"
33984
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    21
  val CLASS = "class"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    22
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    23
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    24
  // document markup
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    25
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    26
  def spans(tree: XML.Tree): List[XML.Tree] =
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    27
    tree match {
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    28
      case XML.Elem(name, _, ts) =>
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    29
        List(XML.Elem(SPAN, List((CLASS, name)), ts.flatMap(spans)))
34000
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    30
      case XML.Text(txt) =>
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    31
        val ts = new ListBuffer[XML.Tree]
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    32
        val t = new StringBuilder
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    33
        def flush_text() {
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    34
          if (!t.isEmpty) {
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    35
            ts + XML.Text(t.toString)
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    36
            t.clear
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    37
          }
33984
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    38
        }
34000
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    39
        for (sym <- Symbol.elements(txt)) {
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    40
          sym match {
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    41
            case "\n" =>
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    42
              flush_text()
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    43
              ts + XML.elem(BR)
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    44
            case _ =>
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    45
              t ++ sym.toString
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    46
          }
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    47
        }
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    48
        flush_text()
1fecda948697 more robust treatment of line breaks -- Java "split" has off semantics;
wenzelm
parents: 33984
diff changeset
    49
        ts.toList
33984
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    50
    }
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    51
}