202 progress.echo(cat_lines(all_files.map(_.implode).sorted.map(" " + _))) |
202 progress.echo(cat_lines(all_files.map(_.implode).sorted.map(" " + _))) |
203 |
203 |
204 if (check_keywords.nonEmpty) |
204 if (check_keywords.nonEmpty) |
205 Check_Keywords.check_keywords(progress, syntax.keywords, check_keywords, theory_files) |
205 Check_Keywords.check_keywords(progress, syntax.keywords, check_keywords, theory_files) |
206 |
206 |
|
207 val session_graph: Graph_Display.Graph = |
|
208 { |
|
209 def session_node(name: String): Graph_Display.Node = |
|
210 Graph_Display.Node("[" + name + "]", "session." + name) |
|
211 |
|
212 def node(name: Document.Node.Name): Graph_Display.Node = |
|
213 { |
|
214 val session = resources.theory_qualifier(name) |
|
215 if (session == session_name) |
|
216 Graph_Display.Node(name.theory_base_name, "theory." + name.theory) |
|
217 else session_node(session) |
|
218 } |
|
219 |
|
220 val imports_subgraph = |
|
221 sessions.imports_graph.restrict( |
|
222 sessions.imports_graph.all_preds(info.parent.toList ::: info.imports).toSet) |
|
223 |
|
224 val graph0 = |
|
225 (Graph_Display.empty_graph /: imports_subgraph.topological_order)( |
|
226 { case (g, session) => |
|
227 val a = session_node(session) |
|
228 val bs = imports_subgraph.imm_preds(session).toList.map(session_node(_)) |
|
229 ((g /: (a :: bs))(_.default_node(_, Nil)) /: bs)(_.add_edge(_, a)) }) |
|
230 |
|
231 (graph0 /: thy_deps.deps)( |
|
232 { case (g, dep) => |
|
233 val a = node(dep.name) |
|
234 val bs = |
|
235 dep.header.imports.map({ case (name, _) => node(name) }). |
|
236 filterNot(_ == a) |
|
237 ((g /: (a :: bs))(_.default_node(_, Nil)) /: bs)(_.add_edge(_, a)) }) |
|
238 } |
|
239 |
207 val base = |
240 val base = |
208 Base(global_theories = global_theories, |
241 Base(global_theories = global_theories, |
209 loaded_theories = thy_deps.loaded_theories, |
242 loaded_theories = thy_deps.loaded_theories, |
210 known = Known.make(info.dir, List(imports_base), thy_deps.deps.map(_.name)), |
243 known = Known.make(info.dir, List(imports_base), thy_deps.deps.map(_.name)), |
211 keywords = thy_deps.keywords, |
244 keywords = thy_deps.keywords, |
212 syntax = syntax, |
245 syntax = syntax, |
213 sources = all_files.map(p => (p, SHA1.digest(p.file))), |
246 sources = all_files.map(p => (p, SHA1.digest(p.file))), |
214 session_graph = thy_deps.session_graph(info.parent getOrElse "", imports_base)) |
247 session_graph = session_graph) |
215 |
248 |
216 session_bases + (session_name -> base) |
249 session_bases + (session_name -> base) |
217 } |
250 } |
218 catch { |
251 catch { |
219 case ERROR(msg) => |
252 case ERROR(msg) => |