| author | wenzelm | 
| Fri, 18 Jan 2013 16:20:09 +0100 | |
| changeset 50974 | 55f8bd61b029 | 
| parent 50707 | 5b2bf7611662 | 
| child 51399 | 6ac3c29a300e | 
| permissions | -rw-r--r-- | 
| 33984 | 1  | 
/* Title: Pure/Thy/html.scala  | 
2  | 
Author: Makarius  | 
|
3  | 
||
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
4  | 
HTML presentation elements.  | 
| 33984 | 5  | 
*/  | 
6  | 
||
7  | 
package isabelle  | 
|
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 | 12  | 
object HTML  | 
13  | 
{
 | 
|
| 
37200
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
14  | 
// encode text  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
15  | 
|
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
16  | 
def encode(text: String): String =  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
17  | 
  {
 | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
18  | 
val s = new StringBuilder  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
19  | 
    for (c <- text.iterator) c match {
 | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
20  | 
case '<' => s ++= "<"  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
21  | 
case '>' => s ++= ">"  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
22  | 
case '&' => s ++= "&"  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
23  | 
case '"' => s ++= """  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
24  | 
case '\'' => s ++= "'"  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
25  | 
case '\n' => s ++= "<br/>"  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
26  | 
case _ => s += c  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
27  | 
}  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
28  | 
s.toString  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
29  | 
}  | 
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
30  | 
|
| 
 
0f3edc64356a
added HTML.encode (in Scala), similar to HTML.output in ML;
 
wenzelm 
parents: 
36016 
diff
changeset
 | 
31  | 
|
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
32  | 
// common markup elements  | 
| 33984 | 33  | 
|
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
34  | 
def session_entry(name: String): String =  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
35  | 
XML.string_of_tree(  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
36  | 
      XML.elem("li",
 | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
37  | 
        List(XML.Elem(Markup("a", List(("href", name + "/index.html"))),
 | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
38  | 
List(XML.Text(name)))))) + "\n"  | 
| 34002 | 39  | 
|
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
40  | 
def session_entries(names: List[String]): String =  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
41  | 
if (names.isEmpty) "</ul>"  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
42  | 
else  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
43  | 
"</ul>\n</div>\n<div class=\"sessions\">\n" +  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
44  | 
"<h2>Sessions</h2>\n<ul>\n" + names.map(session_entry).mkString + "</ul>";  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
45  | 
|
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents: 
50201 
diff
changeset
 | 
46  | 
val end_document = "\n</div>\n</body>\n</html>\n"  | 
| 33984 | 47  | 
}  |