src/Pure/Tools/logo.scala
author wenzelm
Mon, 22 Nov 2021 15:03:37 +0100
changeset 74828 46c7fafbea3d
parent 73723 1bbbaae6b5e3
child 75393 87ebf5a50283
permissions -rw-r--r--
more compact data during presentation: Entity_Context.Theory_Export instead of full Export_Theory.Theory;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/logo.scala
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     3
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     4
Create variants of the Isabelle logo (PDF).
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     5
*/
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     6
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     7
package isabelle
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     8
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
     9
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    10
object Logo
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    11
{
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    12
  /* create logo */
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    13
73723
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    14
  def make_output_file(logo_name: String): Path =
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    15
  {
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    16
    val name = if (logo_name.isEmpty) "isabelle" else "isabelle_" + Word.lowercase(logo_name)
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    17
    Path.explode(name).pdf
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    18
  }
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    19
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    20
  def create_logo(logo_name: String, output_file: Path, quiet: Boolean = false): Unit =
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    21
  {
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    22
    Isabelle_System.with_tmp_file("logo", ext = "eps")(tmp_file =>
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    23
    {
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    24
      val template = File.read(Path.explode("$ISABELLE_HOME/lib/logo/isabelle_any.eps"))
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    25
      File.write(tmp_file, template.replace("<any>", logo_name))
73723
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    26
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    27
      Isabelle_System.bash(
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    28
        "\"$ISABELLE_EPSTOPDF\" --filter < " + File.bash_path(tmp_file) +
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    29
          " > " + File.bash_path(output_file)).check
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    30
      if (!quiet) Output.writeln(output_file.expand.implode)
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    31
    })
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    32
  }
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    33
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    34
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    35
  /* Isabelle tool wrapper */
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    36
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    37
  val isabelle_tool =
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    38
    Isabelle_Tool("logo", "create variants of the Isabelle logo (PDF)", Scala_Project.here, args =>
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    39
    {
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    40
      var output: Option[Path] = None
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    41
      var quiet = false
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    42
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    43
      val getopts = Getopts("""
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    44
Usage: isabelle logo [OPTIONS] [NAME]
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    45
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    46
  Options are:
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    47
    -o FILE      alternative output file
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    48
    -q           quiet mode
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    49
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    50
  Create variant NAME of the Isabelle logo as "isabelle_name.pdf".
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    51
""",
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    52
        "o:" -> (arg => output = Some(Path.explode(arg))),
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    53
        "q" -> (_ => quiet = true))
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    54
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    55
      val more_args = getopts(args)
73723
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    56
      val logo_name =
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    57
        more_args match {
73723
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    58
          case Nil => ""
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    59
          case List(name) => name
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    60
          case _ => getopts.usage()
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    61
        }
73723
1bbbaae6b5e3 option document_logo;
wenzelm
parents: 73399
diff changeset
    62
      create_logo(logo_name, output getOrElse make_output_file(logo_name), quiet = quiet)
73399
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    63
    })
48569c862eb8 proper Isabelle/Scala tool --- avoid perl;
wenzelm
parents:
diff changeset
    64
}