221 val info = deps.sessions_structure(session) |
221 val info = deps.sessions_structure(session) |
222 val options = info.options |
222 val options = info.options |
223 val base = deps(session) |
223 val base = deps(session) |
224 val graph_pdf = graphview.Graph_File.make_pdf(options, base.session_graph_display) |
224 val graph_pdf = graphview.Graph_File.make_pdf(options, base.session_graph_display) |
225 |
225 |
|
226 def find_tex(name: Document.Node.Name): Option[Bytes] = |
|
227 deps.sessions_structure.build_requirements(List(session)).reverse.view |
|
228 .map(session_name => |
|
229 using(store.open_database(session_name))(db => |
|
230 Export.read_entry(db, session_name, name.theory, document_tex_name(name)). |
|
231 map(_.uncompressed(cache = store.xz_cache)))) |
|
232 .collectFirst({ case Some(x) => x }) |
|
233 |
226 |
234 |
227 /* prepare document directory */ |
235 /* prepare document directory */ |
|
236 |
|
237 lazy val tex_files = |
|
238 for (name <- base.session_theories ::: base.document_theories) |
|
239 yield Path.basic(tex_name(name)) -> find_tex(name).getOrElse(Bytes.empty) |
228 |
240 |
229 def prepare_dir(dir: Path, doc_name: String, doc_tags: List[String]): (Path, String) = |
241 def prepare_dir(dir: Path, doc_name: String, doc_tags: List[String]): (Path, String) = |
230 { |
242 { |
231 val doc_dir = dir + Path.basic(doc_name) |
243 val doc_dir = dir + Path.basic(doc_name) |
232 Isabelle_System.make_directory(doc_dir) |
244 Isabelle_System.make_directory(doc_dir) |
238 |
250 |
239 File.write(doc_dir + session_tex_path, |
251 File.write(doc_dir + session_tex_path, |
240 Library.terminate_lines( |
252 Library.terminate_lines( |
241 base.session_theories.map(name => "\\input{" + tex_name(name) + "}"))) |
253 base.session_theories.map(name => "\\input{" + tex_name(name) + "}"))) |
242 |
254 |
243 using(store.open_database(session))(db => |
255 for ((path, tex) <- tex_files) Bytes.write(doc_dir + path, tex) |
244 for (name <- base.session_theories) { |
|
245 val tex = |
|
246 Export.read_entry(db, session, name.theory, document_tex_name(name)) match { |
|
247 case Some(entry) => entry.uncompressed(cache = store.xz_cache) |
|
248 case None => Bytes.empty |
|
249 } |
|
250 Bytes.write(doc_dir + Path.basic(tex_name(name)), tex) |
|
251 }) |
|
252 |
256 |
253 val root1 = "root_" + doc_name |
257 val root1 = "root_" + doc_name |
254 val root = if ((doc_dir + Path.explode(root1).tex).is_file) root1 else "root" |
258 val root = if ((doc_dir + Path.explode(root1).tex).is_file) root1 else "root" |
255 |
259 |
256 (doc_dir, root) |
260 (doc_dir, root) |