src/Pure/Thy/html.scala
changeset 50707 5b2bf7611662
parent 50201 c26369c9eda6
child 51399 6ac3c29a300e
--- a/src/Pure/Thy/html.scala	Thu Jan 03 15:13:11 2013 +0100
+++ b/src/Pure/Thy/html.scala	Thu Jan 03 20:42:18 2013 +0100
@@ -1,7 +1,7 @@
 /*  Title:      Pure/Thy/html.scala
     Author:     Makarius
 
-Basic HTML output.
+HTML presentation elements.
 */
 
 package isabelle
@@ -29,75 +29,19 @@
   }
 
 
-  /// FIXME unused stuff
-
-  // common elements and attributes
-
-  val BODY = "body"
-  val DIV = "div"
-  val SPAN = "span"
-  val BR = "br"
-  val PRE = "pre"
-  val CLASS = "class"
-  val STYLE = "style"
-
+  // common markup elements
 
-  // document markup
-
-  def span(cls: String, body: XML.Body): XML.Elem =
-    XML.Elem(Markup(SPAN, List((CLASS, cls))), body)
-
-  def user_font(font: String, txt: String): XML.Elem =
-    XML.Elem(Markup(SPAN, List((STYLE, "font-family: " + font))), List(XML.Text(txt)))
-
-  def hidden(txt: String): XML.Elem =
-    span(Markup.HIDDEN, List(XML.Text(txt)))
-
-  def sub(txt: String): XML.Elem = XML.elem("sub", List(XML.Text(txt)))
-  def sup(txt: String): XML.Elem = XML.elem("sup", List(XML.Text(txt)))
-  def bold(txt: String): XML.Elem = span("bold", List(XML.Text(txt)))
+  def session_entry(name: String): String =
+    XML.string_of_tree(
+      XML.elem("li",
+        List(XML.Elem(Markup("a", List(("href", name + "/index.html"))),
+          List(XML.Text(name)))))) + "\n"
 
-  def spans(input: XML.Tree): XML.Body =
-  {
-    def html_spans(tree: XML.Tree): XML.Body =
-      tree match {
-        case XML.Wrapped_Elem(markup, _, ts) =>
-          List(span(markup.name, ts.flatMap(html_spans)))
-        case XML.Elem(markup, ts) =>
-          List(span(markup.name, ts.flatMap(html_spans)))
-        case XML.Text(txt) =>
-          val ts = new ListBuffer[XML.Tree]
-          val t = new StringBuilder
-          def flush() {
-            if (!t.isEmpty) {
-              ts += XML.Text(t.toString)
-              t.clear
-            }
-          }
-          def add(elem: XML.Tree) {
-            flush()
-            ts += elem
-          }
-          val syms = Symbol.iterator(txt)
-          while (syms.hasNext) {
-            val s1 = syms.next
-            def s2() = if (syms.hasNext) syms.next else ""
-            if (s1 == "\n") add(XML.elem(BR))
-            else if (s1 == Symbol.sub_decoded || s1 == Symbol.isub_decoded)
-              { add(hidden(s1)); add(sub(s2())) }
-            else if (s1 == Symbol.sup_decoded || s1 == Symbol.isup_decoded)
-              { add(hidden(s1)); add(sup(s2())) }
-            else if (s1 == Symbol.bsub_decoded) t ++= s1  // FIXME
-            else if (s1 == Symbol.esub_decoded) t ++= s1  // FIXME
-            else if (s1 == Symbol.bsup_decoded) t ++= s1  // FIXME
-            else if (s1 == Symbol.esup_decoded) t ++= s1  // FIXME
-            else if (s1 == Symbol.bold_decoded) { add(hidden(s1)); add(bold(s2())) }
-            else if (Symbol.fonts.isDefinedAt(s1)) { add(user_font(Symbol.fonts(s1), s1)) }
-            else t ++= s1
-          }
-          flush()
-          ts.toList
-      }
-    html_spans(input)
-  }
+  def session_entries(names: List[String]): String =
+    if (names.isEmpty) "</ul>"
+    else
+      "</ul>\n</div>\n<div class=\"sessions\">\n" +
+      "<h2>Sessions</h2>\n<ul>\n" + names.map(session_entry).mkString + "</ul>";
+
+  val end_document = "\n</div>\n</body>\n</html>\n"
 }