1 /* Title: Pure/Thy/html.scala
9 import scala.collection.mutable.ListBuffer
16 def encode(text: String): String =
18 val s = new StringBuilder
19 for (c <- text.iterator) c match {
20 case '<' => s ++= "<"
21 case '>' => s ++= ">"
22 case '&' => s ++= "&"
23 case '"' => s ++= """
24 case '\'' => s ++= "'"
25 case '\n' => s ++= "<br/>"
32 // common elements and attributes
44 def span(cls: String, body: XML.Body): XML.Elem =
45 XML.Elem(Markup(SPAN, List((CLASS, cls))), body)
47 def hidden(txt: String): XML.Elem =
48 span(Markup.HIDDEN, List(XML.Text(txt)))
50 def sub(txt: String): XML.Elem = XML.elem("sub", List(XML.Text(txt)))
51 def sup(txt: String): XML.Elem = XML.elem("sup", List(XML.Text(txt)))
53 def spans(input: XML.Tree, original_data: Boolean = false): XML.Body =
55 def html_spans(tree: XML.Tree): XML.Body =
57 case XML.Elem(Markup(name, _), ts) =>
59 List(XML.Elem(Markup.Data, List(tree, span(name, ts.flatMap(html_spans)))))
60 else List(span(name, ts.flatMap(html_spans)))
62 val ts = new ListBuffer[XML.Tree]
63 val t = new StringBuilder
66 ts += XML.Text(t.toString)
70 def add(elem: XML.Tree) {
74 val syms = Symbol.iterator(txt).map(_.toString)
75 while (syms.hasNext) {
77 def s2() = if (syms.hasNext) syms.next else ""
79 case "\n" => add(XML.elem(BR))
80 case "\\<^bsub>" => t ++= s1 // FIXME
81 case "\\<^esub>" => t ++= s1 // FIXME
82 case "\\<^bsup>" => t ++= s1 // FIXME
83 case "\\<^esup>" => t ++= s1 // FIXME
84 case "\\<^sub>" | "\\<^isub>" => add(hidden(s1)); add(sub(s2()))
85 case "\\<^sup>" | "\\<^isup>" => add(hidden(s1)); add(sup(s2()))
86 case "\\<^bold>" => add(hidden(s1)); add(span("bold", List(XML.Text(s2()))))
87 case "\\<^loc>" => add(hidden(s1)); add(span("loc", List(XML.Text(s2()))))