12 session_directories: (string * string) list, |
12 session_directories: (string * string) list, |
13 session_chapters: (string * string) list, |
13 session_chapters: (string * string) list, |
14 bibtex_entries: (string * string list) list, |
14 bibtex_entries: (string * string list) list, |
15 command_timings: Properties.T list, |
15 command_timings: Properties.T list, |
16 docs: string list, |
16 docs: string list, |
|
17 scala_functions: (string * Position.T) list, |
17 global_theories: (string * string) list, |
18 global_theories: (string * string) list, |
18 loaded_theories: string list} -> unit |
19 loaded_theories: string list} -> unit |
19 val init_session_yxml: string -> unit |
20 val init_session_yxml: string -> unit |
20 val init_session_file: Path.T -> unit |
21 val init_session_file: Path.T -> unit |
21 val finish_session_base: unit -> unit |
22 val finish_session_base: unit -> unit |
101 session_directories = Symtab.empty: Path.T list Symtab.table, |
103 session_directories = Symtab.empty: Path.T list Symtab.table, |
102 session_chapters = Symtab.empty: string Symtab.table, |
104 session_chapters = Symtab.empty: string Symtab.table, |
103 bibtex_entries = Symtab.empty: string list Symtab.table, |
105 bibtex_entries = Symtab.empty: string list Symtab.table, |
104 timings = empty_timings, |
106 timings = empty_timings, |
105 docs = []: (string * entry) list, |
107 docs = []: (string * entry) list, |
|
108 scala_functions = Symtab.empty: Position.T Symtab.table, |
106 global_theories = Symtab.empty: string Symtab.table, |
109 global_theories = Symtab.empty: string Symtab.table, |
107 loaded_theories = Symtab.empty: unit Symtab.table}; |
110 loaded_theories = Symtab.empty: unit Symtab.table}; |
108 |
111 |
109 val global_session_base = |
112 val global_session_base = |
110 Synchronized.var "Sessions.base" empty_session_base; |
113 Synchronized.var "Sessions.base" empty_session_base; |
111 |
114 |
112 fun init_session |
115 fun init_session |
113 {session_positions, session_directories, session_chapters, |
116 {session_positions, session_directories, session_chapters, bibtex_entries, |
114 bibtex_entries, command_timings, docs, global_theories, loaded_theories} = |
117 command_timings, docs, scala_functions, global_theories, loaded_theories} = |
115 Synchronized.change global_session_base |
118 Synchronized.change global_session_base |
116 (fn _ => |
119 (fn _ => |
117 {session_positions = sort_by #1 (map (apsnd make_entry) session_positions), |
120 {session_positions = sort_by #1 (map (apsnd make_entry) session_positions), |
118 session_directories = |
121 session_directories = |
119 fold_rev (fn (dir, name) => Symtab.cons_list (name, Path.explode dir)) |
122 fold_rev (fn (dir, name) => Symtab.cons_list (name, Path.explode dir)) |
120 session_directories Symtab.empty, |
123 session_directories Symtab.empty, |
121 session_chapters = Symtab.make session_chapters, |
124 session_chapters = Symtab.make session_chapters, |
122 bibtex_entries = Symtab.make bibtex_entries, |
125 bibtex_entries = Symtab.make bibtex_entries, |
123 timings = make_timings command_timings, |
126 timings = make_timings command_timings, |
124 docs = sort_by #1 (map (apsnd make_entry o rpair []) docs), |
127 docs = sort_by #1 (map (apsnd make_entry o rpair []) docs), |
|
128 scala_functions = Symtab.make scala_functions, |
125 global_theories = Symtab.make global_theories, |
129 global_theories = Symtab.make global_theories, |
126 loaded_theories = Symtab.make_set loaded_theories}); |
130 loaded_theories = Symtab.make_set loaded_theories}); |
127 |
131 |
128 fun init_session_yxml yxml = |
132 fun init_session_yxml yxml = |
129 let |
133 let |
130 val (session_positions, (session_directories, (session_chapters, |
134 val (session_positions, (session_directories, (session_chapters, (bibtex_entries, |
131 (bibtex_entries, (command_timings, (docs, (global_theories, loaded_theories))))))) = |
135 (command_timings, (docs, (scala_functions, (global_theories, loaded_theories)))))))) = |
132 YXML.parse_body yxml |> |
136 YXML.parse_body yxml |> |
133 let open XML.Decode in |
137 let open XML.Decode in |
134 (pair (list (pair string properties)) |
138 (pair (list (pair string properties)) |
135 (pair (list (pair string string)) (pair (list (pair string string)) |
139 (pair (list (pair string string)) (pair (list (pair string string)) |
136 (pair (list (pair string (list string))) (pair (list properties) |
140 (pair (list (pair string (list string))) (pair (list properties) |
137 (pair (list string) (pair (list (pair string string)) (list string)))))))) |
141 (pair (list string) |
|
142 (pair (list (pair string properties)) |
|
143 (pair (list (pair string string)) (list string))))))))) |
138 end; |
144 end; |
139 in |
145 in |
140 init_session |
146 init_session |
141 {session_positions = session_positions, |
147 {session_positions = session_positions, |
142 session_directories = session_directories, |
148 session_directories = session_directories, |
143 session_chapters = session_chapters, |
149 session_chapters = session_chapters, |
144 bibtex_entries = bibtex_entries, |
150 bibtex_entries = bibtex_entries, |
145 command_timings = command_timings, |
151 command_timings = command_timings, |
146 docs = docs, |
152 docs = docs, |
|
153 scala_functions = map (apsnd Position.of_properties) scala_functions, |
147 global_theories = global_theories, |
154 global_theories = global_theories, |
148 loaded_theories = loaded_theories} |
155 loaded_theories = loaded_theories} |
149 end; |
156 end; |
150 |
157 |
151 fun init_session_file path = |
158 fun init_session_file path = |