| author | wenzelm | 
| Wed, 17 Jun 2015 22:30:22 +0200 | |
| changeset 60511 | 5e67a223a141 | 
| parent 60077 | 55cb9462e602 | 
| child 61372 | cf40b6b1de54 | 
| permissions | -rw-r--r-- | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
1  | 
/* Title: Pure/Thy/present.scala  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
2  | 
Author: Makarius  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
4  | 
Theory presentation: HTML.  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
5  | 
*/  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
7  | 
package isabelle  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
8  | 
|
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
9  | 
|
| 51402 | 10  | 
import scala.collection.immutable.SortedMap  | 
11  | 
||
12  | 
||
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
13  | 
object Present  | 
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
14  | 
{
 | 
| 60077 | 15  | 
/* session graph */  | 
16  | 
||
17  | 
def session_graph(  | 
|
18  | 
parent_session: String,  | 
|
19  | 
parent_loaded: String => Boolean,  | 
|
20  | 
deps: List[Thy_Info.Dep]): Graph_Display.Graph =  | 
|
21  | 
  {
 | 
|
22  | 
val parent_session_node =  | 
|
23  | 
      Graph_Display.Node("[" + parent_session + "]", "session." + parent_session)
 | 
|
24  | 
||
25  | 
def node(name: Document.Node.Name): Graph_Display.Node =  | 
|
26  | 
if (parent_loaded(name.theory)) parent_session_node  | 
|
27  | 
else Graph_Display.Node(name.theory, "theory." + name.theory)  | 
|
28  | 
||
29  | 
    (Graph_Display.empty_graph /: deps) {
 | 
|
30  | 
case (g, dep) =>  | 
|
31  | 
if (parent_loaded(dep.name.theory)) g  | 
|
32  | 
        else {
 | 
|
33  | 
val a = node(dep.name)  | 
|
34  | 
          val bs = dep.header.imports.map({ case (name, _) => node(name) })
 | 
|
35  | 
((g /: (a :: bs))(_.default_node(_, Nil)) /: bs)(_.add_edge(_, a))  | 
|
36  | 
}  | 
|
37  | 
}  | 
|
38  | 
}  | 
|
39  | 
||
40  | 
||
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
41  | 
/* maintain chapter index -- NOT thread-safe */  | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
42  | 
|
| 
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
43  | 
  private val index_path = Path.basic("index.html")
 | 
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
44  | 
  private val sessions_path = Path.basic(".sessions")
 | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
45  | 
|
| 51402 | 46  | 
private def read_sessions(dir: Path): List[(String, String)] =  | 
47  | 
  {
 | 
|
| 51416 | 48  | 
val path = dir + sessions_path  | 
49  | 
    if (path.is_file) {
 | 
|
50  | 
import XML.Decode._  | 
|
51  | 
list(pair(string, string))(YXML.parse_body(File.read(path)))  | 
|
52  | 
}  | 
|
53  | 
else Nil  | 
|
| 51402 | 54  | 
}  | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
55  | 
|
| 51402 | 56  | 
private def write_sessions(dir: Path, sessions: List[(String, String)])  | 
57  | 
  {
 | 
|
58  | 
import XML.Encode._  | 
|
59  | 
File.write(dir + sessions_path, YXML.string_of_body(list(pair(string, string))(sessions)))  | 
|
60  | 
}  | 
|
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
61  | 
|
| 51402 | 62  | 
def update_chapter_index(info_path: Path, chapter: String, new_sessions: List[(String, String)])  | 
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
63  | 
  {
 | 
| 
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
64  | 
val dir = info_path + Path.basic(chapter)  | 
| 
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
65  | 
Isabelle_System.mkdirs(dir)  | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
66  | 
|
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
67  | 
val sessions0 =  | 
| 
51406
 
950b897f95bb
proper path -- I/O was hidden due to permissiveness;
 
wenzelm 
parents: 
51402 
diff
changeset
 | 
68  | 
      try { read_sessions(dir) }
 | 
| 51987 | 69  | 
      catch { case _: XML.Error => Nil }
 | 
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
70  | 
|
| 51402 | 71  | 
val sessions = (SortedMap.empty[String, String] ++ sessions0 ++ new_sessions).toList  | 
72  | 
||
| 
51399
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
73  | 
write_sessions(dir, sessions)  | 
| 
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
74  | 
File.write(dir + index_path, HTML.chapter_index(chapter, sessions))  | 
| 
 
6ac3c29a300e
discontinued "isabelle usedir" option -r (reset session path);
 
wenzelm 
parents: 
50707 
diff
changeset
 | 
75  | 
}  | 
| 
50707
 
5b2bf7611662
maintain session index on Scala side, for more determistic results;
 
wenzelm 
parents:  
diff
changeset
 | 
76  | 
}  |