src/Pure/Admin/build_jedit.scala
changeset 75393 87ebf5a50283
parent 75229 075467e070ba
child 75394 42267c650205
equal deleted inserted replaced
75388:b3ca4a6ed74b 75393:87ebf5a50283
    10 import java.nio.charset.Charset
    10 import java.nio.charset.Charset
    11 
    11 
    12 import scala.jdk.CollectionConverters._
    12 import scala.jdk.CollectionConverters._
    13 
    13 
    14 
    14 
    15 object Build_JEdit
    15 object Build_JEdit {
    16 {
       
    17   /* modes */
    16   /* modes */
    18 
    17 
    19   object Mode
    18   object Mode {
    20   {
       
    21     val empty: Mode = new Mode("", "", Nil)
    19     val empty: Mode = new Mode("", "", Nil)
    22 
    20 
    23     val init: Mode =
    21     val init: Mode =
    24       empty +
    22       empty +
    25         ("noWordSep" -> """_'?⇩\^<>""") +
    23         ("noWordSep" -> """_'?⇩\^<>""") +
    26         ("unalignedOpenBrackets" -> "{[(«‹⟨⌈⌊⦇⟦⦃⦉") +
    24         ("unalignedOpenBrackets" -> "{[(«‹⟨⌈⌊⦇⟦⦃⦉") +
    27         ("unalignedCloseBrackets" -> "⦊⦄⟧⦈⌋⌉⟩›»)]}") +
    25         ("unalignedCloseBrackets" -> "⦊⦄⟧⦈⌋⌉⟩›»)]}") +
    28         ("tabSize" -> "2") +
    26         ("tabSize" -> "2") +
    29         ("indentSize" -> "2")
    27         ("indentSize" -> "2")
    30 
    28 
    31     val list: List[Mode] =
    29     val list: List[Mode] = {
    32     {
       
    33       val isabelle_news: Mode = init.define("isabelle-news", "Isabelle NEWS")
    30       val isabelle_news: Mode = init.define("isabelle-news", "Isabelle NEWS")
    34 
    31 
    35       val isabelle: Mode =
    32       val isabelle: Mode =
    36         init.define("isabelle", "Isabelle theory") +
    33         init.define("isabelle", "Isabelle theory") +
    37           ("commentStart" -> "(*") +
    34           ("commentStart" -> "(*") +
    51 
    48 
    52       List(isabelle_news, isabelle, isabelle_ml, isabelle_root, isabelle_options, sml)
    49       List(isabelle_news, isabelle, isabelle_ml, isabelle_root, isabelle_options, sml)
    53     }
    50     }
    54   }
    51   }
    55 
    52 
    56   final case class Mode private(name: String, description: String, rev_props: Properties.T)
    53   final case class Mode private(name: String, description: String, rev_props: Properties.T) {
    57   {
       
    58     override def toString: String = name
    54     override def toString: String = name
    59 
    55 
    60     def define(a: String, b: String): Mode = new Mode(a, b, rev_props)
    56     def define(a: String, b: String): Mode = new Mode(a, b, rev_props)
    61 
    57 
    62     def + (entry: Properties.Entry): Mode =
    58     def + (entry: Properties.Entry): Mode =
    63       new Mode(name, description, Properties.put(rev_props, entry))
    59       new Mode(name, description, Properties.put(rev_props, entry))
    64 
    60 
    65     def write(dir: Path): Unit =
    61     def write(dir: Path): Unit = {
    66     {
       
    67       require(name.nonEmpty && description.nonEmpty, "Bad Isabelle/jEdit mode content")
    62       require(name.nonEmpty && description.nonEmpty, "Bad Isabelle/jEdit mode content")
    68 
    63 
    69       val properties =
    64       val properties =
    70         rev_props.reverse.map(p =>
    65         rev_props.reverse.map(p =>
    71           Symbol.spaces(4) +
    66           Symbol.spaces(4) +
   110   def build_jedit(
   105   def build_jedit(
   111     component_dir: Path,
   106     component_dir: Path,
   112     version: String,
   107     version: String,
   113     original: Boolean = false,
   108     original: Boolean = false,
   114     java_home: Path = default_java_home,
   109     java_home: Path = default_java_home,
   115     progress: Progress = new Progress): Unit =
   110     progress: Progress = new Progress
   116   {
   111   ): Unit = {
   117     Isabelle_System.require_command("ant", test = "-version")
   112     Isabelle_System.require_command("ant", test = "-version")
   118     Isabelle_System.require_command("patch")
   113     Isabelle_System.require_command("patch")
   119     Isabelle_System.require_command("unzip", test = "-h")
   114     Isabelle_System.require_command("unzip", test = "-h")
   120 
   115 
   121     Isabelle_System.new_directory(component_dir)
   116     Isabelle_System.new_directory(component_dir)
   129     val jedit_patched = jedit + "-patched"
   124     val jedit_patched = jedit + "-patched"
   130 
   125 
   131     val jedit_dir = Isabelle_System.make_directory(component_dir + Path.basic(jedit))
   126     val jedit_dir = Isabelle_System.make_directory(component_dir + Path.basic(jedit))
   132     val jedit_patched_dir = component_dir + Path.basic(jedit_patched)
   127     val jedit_patched_dir = component_dir + Path.basic(jedit_patched)
   133 
   128 
   134     def download_jedit(dir: Path, name: String, target_name: String = ""): Path =
   129     def download_jedit(dir: Path, name: String, target_name: String = ""): Path = {
   135     {
       
   136       val jedit_name = jedit + name
   130       val jedit_name = jedit + name
   137       val url =
   131       val url =
   138         "https://sourceforge.net/projects/jedit/files/jedit/" +
   132         "https://sourceforge.net/projects/jedit/files/jedit/" +
   139           version + "/" + jedit_name + "/download"
   133           version + "/" + jedit_name + "/download"
   140       val path = dir + Path.basic(proper_string(target_name) getOrElse jedit_name)
   134       val path = dir + Path.basic(proper_string(target_name) getOrElse jedit_name)
   141       Isabelle_System.download_file(url, path, progress = progress)
   135       Isabelle_System.download_file(url, path, progress = progress)
   142       path
   136       path
   143     }
   137     }
   144 
   138 
   145     Isabelle_System.with_tmp_dir("tmp")(tmp_dir =>
   139     Isabelle_System.with_tmp_dir("tmp")(tmp_dir => {
   146     {
       
   147       /* original version */
   140       /* original version */
   148 
   141 
   149       val install_path = download_jedit(tmp_dir, "install.jar")
   142       val install_path = download_jedit(tmp_dir, "install.jar")
   150       Isabelle_System.bash("""export CLASSPATH=""
   143       Isabelle_System.bash("""export CLASSPATH=""
   151 isabelle_java java -Duser.home=""" + File.bash_platform_path(tmp_dir) +
   144 isabelle_java java -Duser.home=""" + File.bash_platform_path(tmp_dir) +
   208     for { (url, name) <- download_jars } {
   201     for { (url, name) <- download_jars } {
   209       Isabelle_System.download_file(url, jars_dir + Path.basic(name), progress = progress)
   202       Isabelle_System.download_file(url, jars_dir + Path.basic(name), progress = progress)
   210     }
   203     }
   211 
   204 
   212     for { (name, vers) <- download_plugins } {
   205     for { (name, vers) <- download_plugins } {
   213       Isabelle_System.with_tmp_file("tmp", ext = "zip")(zip_path =>
   206       Isabelle_System.with_tmp_file("tmp", ext = "zip")(zip_path => {
   214       {
       
   215         val url =
   207         val url =
   216           "https://sourceforge.net/projects/jedit-plugins/files/" + name + "/" + vers + "/" +
   208           "https://sourceforge.net/projects/jedit-plugins/files/" + name + "/" + vers + "/" +
   217             name + "-" + vers + "-bin.zip/download"
   209             name + "-" + vers + "-bin.zip/download"
   218         Isabelle_System.download_file(url, zip_path, progress = progress)
   210         Isabelle_System.download_file(url, zip_path, progress = progress)
   219         Isabelle_System.bash("unzip -x " + File.bash_path(zip_path), cwd = jars_dir.file).check
   211         Isabelle_System.bash("unzip -x " + File.bash_path(zip_path), cwd = jars_dir.file).check
   517   val default_version = "5.6.0"
   509   val default_version = "5.6.0"
   518   def default_java_home: Path = Path.explode("$JAVA_HOME").expand
   510   def default_java_home: Path = Path.explode("$JAVA_HOME").expand
   519 
   511 
   520   val isabelle_tool =
   512   val isabelle_tool =
   521     Isabelle_Tool("build_jedit", "build Isabelle component from the jEdit text-editor",
   513     Isabelle_Tool("build_jedit", "build Isabelle component from the jEdit text-editor",
   522       Scala_Project.here, args =>
   514       Scala_Project.here, args => {
   523     {
       
   524       var target_dir = Path.current
   515       var target_dir = Path.current
   525       var java_home = default_java_home
   516       var java_home = default_java_home
   526       var original = false
   517       var original = false
   527       var version = default_version
   518       var version = default_version
   528 
   519