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 |