src/Pure/Admin/component_flatlaf.scala
author haftmann
Mon, 16 Jun 2025 15:25:38 +0200
changeset 82730 3b98b1b57435
parent 82557 a387b02b5320
permissions -rw-r--r--
more explicit theorem names for list quantifiers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/component_flatlaf.scala
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     3
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     4
Build Isabelle flatlaf component from official downloads.
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     5
*/
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     6
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     7
package isabelle
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     8
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
     9
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    10
object Component_FlatLaf {
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    11
  /* jars and native libraries */
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    12
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    13
  sealed case class Lib(template: String, exe: Boolean = false) {
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    14
    def path(version: String): Path =
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    15
      Path.explode(template.replace("{V}", version))
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    16
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    17
    def jar_name(version: String): Option[String] =
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    18
      if (File.is_jar(template)) Some(path(version).file_name) else None
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    19
  }
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    20
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    21
  private val libs =
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    22
    List(
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    23
      Lib("flatlaf/{V}/flatlaf-{V}-no-natives.jar"),
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    24
      Lib("flatlaf/{V}/flatlaf-{V}-macos-arm64.dylib"),
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    25
      Lib("flatlaf/{V}/flatlaf-{V}-macos-x86_64.dylib"),
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    26
      Lib("flatlaf/{V}/flatlaf-{V}-linux-arm64.so"),
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    27
      Lib("flatlaf/{V}/flatlaf-{V}-linux-x86_64.so"),
82546
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    28
      Lib("flatlaf/{V}/flatlaf-{V}-windows-x86_64.dll", exe = true),
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    29
      Lib("flatlaf-extras/{V}/flatlaf-extras-{V}.jar"))
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    30
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    31
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    32
  /* build flatlaf */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    33
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    34
  val default_download_url = "https://repo1.maven.org/maven2/com/formdev"
82544
b572e7324bfb update to flatlaf-3.6, with native library support on all platforms;
wenzelm
parents: 82049
diff changeset
    35
  val default_version = "3.6"
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    36
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    37
  def build_flatlaf(
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    38
    target_dir: Path = Path.current,
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    39
    download_url: String = default_download_url,
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
    40
    version: String = default_version,
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    41
    progress: Progress = new Progress,
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    42
  ): Unit = {
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    43
    /* component */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    44
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
    45
    val component_name = "flatlaf-" + version
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    46
    val component_dir =
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    47
      Components.Directory(target_dir + Path.basic(component_name)).create(progress = progress)
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    48
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    49
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    50
    /* download */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    51
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    52
    Isabelle_System.make_directory(component_dir.lib)
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    53
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    54
    for (lib <- libs) {
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    55
      val lib_path = lib.path(version)
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    56
      val target = component_dir.lib + Path.basic(lib_path.file_name)
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    57
      Isabelle_System.download_file(
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    58
        download_url + "/" + lib_path.implode, target, progress = progress)
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    59
      if (lib.exe) File.set_executable(target)
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    60
    }
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    61
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    62
    val jar_names = libs.flatMap(_.jar_name(version))
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    63
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    64
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    65
    /* settings */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    66
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    67
    val classpath =
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    68
      libs.flatMap(_.jar_name(version)).map(a => "$ISABELLE_FLATLAF_HOME/lib/" + a)
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    69
        .mkString(":")
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    70
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    71
    component_dir.write_settings("""
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    72
ISABELLE_FLATLAF_HOME="$COMPONENT"
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    73
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    74
classpath """ + quote(classpath) + """
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    75
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    76
isabelle_scala_service "isabelle.FlatLightLaf"
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    77
isabelle_scala_service "isabelle.FlatDarkLaf"
82557
a387b02b5320 provide FlatMac themes (see also FlatLaf 3.0);
wenzelm
parents: 82546
diff changeset
    78
isabelle_scala_service "isabelle.FlatMacLightLaf"
a387b02b5320 provide FlatMac themes (see also FlatLaf 3.0);
wenzelm
parents: 82546
diff changeset
    79
isabelle_scala_service "isabelle.FlatMacDarkLaf"
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    80
""")
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    81
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    82
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    83
    /* README */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    84
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    85
    File.write(component_dir.README,
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    86
      """This is the FlatLaf Java/Swing look-and-feel from
82545
0d955ab17466 misc tuning and clarification;
wenzelm
parents: 82544
diff changeset
    87
https://mvnrepository.com/artifact/com.formdev
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    88
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    89
It is covered by the Apache License 2.0 license.
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    90
82546
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    91
See also https://www.formdev.com/flatlaf  and especially the demo
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    92
application https://download.formdev.com/flatlaf/flatlaf-demo-latest.jar
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    93
(which may be run via "java -jar ...").
553aa1dd0feb support for SVG icons via com.formdev.flatlaf.extras.FlatSVGIcon from flatlaf-extras (which is based on JSVG);
wenzelm
parents: 82545
diff changeset
    94
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    95
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    96
        Makarius
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    97
        """ + Date.Format.date(Date.now()) + "\n")
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    98
  }
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
    99
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   100
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   101
  /* Isabelle tool wrapper */
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   102
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   103
  val isabelle_tool =
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   104
    Isabelle_Tool("component_flatlaf", "build Isabelle flatlaf component from official downloads",
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   105
      Scala_Project.here,
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   106
      { args =>
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   107
        var target_dir = Path.current
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   108
        var download_url = default_download_url
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
   109
        var version = default_version
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   110
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   111
        val getopts = Getopts("""
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   112
Usage: isabelle component_flatlaf [OPTIONS]
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   113
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   114
  Options are:
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   115
    -D DIR       target directory (default ".")
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   116
    -U URL       download URL (default: """ + quote(default_download_url) + """)
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
   117
    -V VERSION   version (default: """ + quote(default_version) + """)
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   118
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   119
  Build flatlaf component from official downloads.""",
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   120
          "D:" -> (arg => target_dir = Path.explode(arg)),
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   121
          "U:" -> (arg => download_url = arg),
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
   122
          "V:" -> (arg => version = arg))
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   123
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   124
        val more_args = getopts(args)
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   125
        if (more_args.nonEmpty) getopts.usage()
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   126
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   127
        val progress = new Console_Progress()
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   128
82049
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
   129
        build_flatlaf(target_dir = target_dir, download_url = download_url, version = version,
0eac687b768d just one flatlaf version: native libraries are optional;
wenzelm
parents: 82035
diff changeset
   130
          progress = progress)
82035
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   131
      })
e074ba489ab0 updated to flatlaf-3.5.4, with fallback on 2.6 for arm64-linux;
wenzelm
parents:
diff changeset
   132
}