src/Pure/Thy/html.scala
author wenzelm
Fri, 04 Dec 2009 22:51:59 +0100
changeset 33984 c54498f88a77
child 34000 1fecda948697
permissions -rw-r--r--
Basic HTML output.
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
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
     9
object HTML
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    10
{
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    11
  // common elements and attributes
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    12
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    13
  val BODY = "body"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    14
  val DIV = "div"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    15
  val SPAN = "span"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    16
  val BR = "br"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    17
  val CLASS = "class"
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    18
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    19
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    20
  // document markup
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    21
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    22
  def body(trees: List[XML.Tree]): XML.Tree =
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    23
    XML.Elem(BODY, Nil, trees)
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    24
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    25
  def div(trees: List[XML.Tree]): XML.Tree =
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    26
    XML.Elem(DIV, Nil, trees)
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    27
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    28
  val br: XML.Tree = XML.Elem(BR, Nil, Nil)
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    29
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    30
  def spans(tree: XML.Tree): List[XML.Tree] =
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    31
    tree match {
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    32
      case XML.Elem(name, _, ts) =>
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    33
        List(XML.Elem(SPAN, List((CLASS, name)), ts.flatMap(spans)))
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    34
      case text @ XML.Text(txt) =>
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    35
        txt.split("\n").toList match {
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    36
          case line :: lines if !lines.isEmpty =>
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    37
            XML.Text(line) :: lines.flatMap(l => List(br, XML.Text(l)))
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    38
          case _ => List(text)
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    39
        }
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    40
    }
c54498f88a77 Basic HTML output.
wenzelm
parents:
diff changeset
    41
}