src/Pure/Thy/present.scala
changeset 72600 2fa4f25d9d07
parent 72599 76550282267f
child 72622 830222403681
equal deleted inserted replaced
72599:76550282267f 72600:2fa4f25d9d07
   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)