src/Pure/Thy/document_build.scala
changeset 73723 1bbbaae6b5e3
parent 73721 52030acb19ac
child 73724 5a3a2a52648d
--- a/src/Pure/Thy/document_build.scala	Mon May 17 23:38:16 2021 +0200
+++ b/src/Pure/Thy/document_build.scala	Tue May 18 15:17:55 2021 +0200
@@ -156,6 +156,13 @@
     def session: String = info.name
     def options: Options = info.options
 
+    def document_logo: Option[String] =
+      options.string("document_logo") match {
+        case "" => None
+        case "_" => Some("")
+        case name => Some(name)
+      }
+
     def document_build: String = options.string("document_build")
 
     def get_engine(): Engine =
@@ -199,6 +206,18 @@
       Content(path, Bytes(text))
     }
 
+    lazy val isabelle_logo: Option[Content] =
+    {
+      document_logo.map(logo_name =>
+        Isabelle_System.with_tmp_file("logo", ext = "pdf")(tmp_path =>
+        {
+          Logo.create_logo(logo_name, output_file = tmp_path, quiet = true)
+          val path = Path.basic("isabelle_logo.pdf")
+          val bytes = Bytes.read(tmp_path)
+          Content(path, bytes)
+        }))
+    }
+
 
     /* document directory */
 
@@ -222,12 +241,14 @@
       val root_name1 = "root_" + doc.name
       val root_name = if ((doc_dir + Path.explode(root_name1).tex).is_file) root_name1 else "root"
 
-      val option_digests = List(doc.print, get_engine().name).map(SHA1.digest)
-      val file_digests = File.find_files(doc_dir.file, follow_links = true).map(SHA1.digest)
-      val sources = SHA1.digest_set(option_digests ::: file_digests)
+      val digests1 = List(doc.print, document_logo.toString, document_build).map(SHA1.digest)
+      val digests2 = File.find_files(doc_dir.file, follow_links = true).map(SHA1.digest)
+      val sources = SHA1.digest_set(digests1 ::: digests2)
 
 
-      /* derived material */
+      /* derived material (without SHA1 digest) */
+
+      isabelle_logo.foreach(_.write(doc_dir))
 
       session_graph.write(doc_dir)