5 # DESCRIPTION: Isabelle/jEdit interface wrapper
12 "src/completion_popup.scala"
14 "src/document_model.scala"
15 "src/document_view.scala"
16 "src/documentation_dockable.scala"
17 "src/find_dockable.scala"
18 "src/fold_handling.scala"
19 "src/graphview_dockable.scala"
20 "src/html_panel.scala"
21 "src/info_dockable.scala"
23 "src/isabelle_encoding.scala"
24 "src/isabelle_logic.scala"
25 "src/isabelle_options.scala"
26 "src/isabelle_sidekick.scala"
27 "src/jedit_editor.scala"
29 "src/jedit_options.scala"
30 "src/jedit_thy_load.scala"
31 "src/monitor_dockable.scala"
32 "src/osx_adapter.scala"
33 "src/output_dockable.scala"
36 "src/pretty_text_area.scala"
37 "src/pretty_tooltip.scala"
38 "src/process_indicator.scala"
39 "src/protocol_dockable.scala"
40 "src/raw_output_dockable.scala"
41 "src/readme_dockable.scala"
43 "src/rich_text_area.scala"
44 "src/scala_console.scala"
45 "src/sledgehammer_dockable.scala"
46 "src/symbols_dockable.scala"
47 "src/syslog_dockable.scala"
48 "src/text_overview.scala"
49 "src/theories_dockable.scala"
50 "src/timing_dockable.scala"
51 "src/token_markup.scala"
54 declare -a RESOURCES=(
60 "src/modes/isabelle-news.xml"
61 "src/modes/isabelle-options.xml"
62 "src/modes/isabelle-root.xml"
63 "src/modes/isabelle.xml"
69 PRG="$(basename "$0")"
74 echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
77 echo " -J OPTION add JVM runtime option"
78 echo " (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
80 echo " -d DIR include session directory"
81 echo " -f fresh build"
82 echo " -j OPTION add jEdit runtime option"
83 echo " (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
84 echo " -l NAME logic session name"
85 echo " -m MODE add print mode for output"
86 echo " -n no build dialog for session image on startup"
87 echo " -s system build mode for session image"
89 echo "Start jEdit with Isabelle plugin setup and open theory FILES"
90 echo "(default \"$USER_HOME/Scratch.thy\")."
107 ## process command line
111 declare -a BUILD_DIALOG_OPTIONS=(-L jedit_logic)
115 JEDIT_SESSION_DIRS=""
120 function getoptions()
123 while getopts "J:bd:fj:l:m:ns" OPT
127 JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
133 if [ -z "$JEDIT_SESSION_DIRS" ]; then
134 JEDIT_SESSION_DIRS="$OPTARG"
136 JEDIT_SESSION_DIRS="$JEDIT_SESSION_DIRS:$OPTARG"
138 BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-d"
139 BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="$OPTARG"
142 BUILD_JARS="jars_fresh"
145 ARGS["${#ARGS[@]}"]="$OPTARG"
148 BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-l"
149 BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="$OPTARG"
150 JEDIT_LOGIC="$OPTARG"
153 if [ -z "$JEDIT_PRINT_MODE" ]; then
154 JEDIT_PRINT_MODE="$OPTARG"
156 JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
163 BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-s"
172 declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
176 declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
177 getoptions "${OPTIONS[@]}"
180 shift $(($OPTIND - 1))
185 if [ "$#" -eq 0 ]; then
186 ARGS["${#ARGS[@]}"]="$(jvmpath "$USER_HOME/Scratch.thy")"
188 while [ "$#" -gt 0 ]; do
189 ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
197 if [ -e "$ISABELLE_HOME/Admin/build" ]; then
198 "$ISABELLE_TOOL" browser -b || exit $?
199 if [ "$BUILD_JARS" = jars_fresh ]; then
200 "$ISABELLE_TOOL" graphview -b -f || exit $?
202 "$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $?
203 "$ISABELLE_TOOL" graphview -b || exit $?
207 PURE_JAR="$ISABELLE_HOME/lib/classes/ext/Pure.jar"
208 GRAPHVIEW_JAR="$ISABELLE_HOME/lib/classes/ext/Graphview.jar"
210 pushd "$JEDIT_HOME" >/dev/null || failed
212 JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
215 "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
216 "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
217 "$ISABELLE_JEDIT_BUILD_HOME/contrib/Highlight.jar"
218 "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
219 "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
220 "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
221 "$ISABELLE_JEDIT_BUILD_HOME/contrib/idea-icons.jar"
222 "$ISABELLE_JEDIT_BUILD_HOME/contrib/jsr305-2.0.0.jar"
225 declare -a JFREECHART_JARS=()
226 for NAME in $JFREECHART_JAR_NAMES
228 JFREECHART_JARS["${#JFREECHART_JARS[@]}"]="$JFREECHART_HOME/lib/$NAME"
234 TARGET="dist/jars/Isabelle-jEdit.jar"
236 declare -a UPDATED=()
238 if [ "$BUILD_JARS" = jars_fresh ]; then
242 if [ ! -e "$TARGET" ]; then
245 if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then
247 "$JEDIT_JAR" "${JEDIT_JARS[@]}" "${JFREECHART_JARS[@]}" "$XZ_JAVA_HOME/lib/xz.jar"
248 "$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}"
250 elif [ -e "$ISABELLE_HOME/Admin/build" ]; then
251 declare -a DEPS=("$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
255 for DEP in "${DEPS[@]}"
257 [ ! -e "$DEP" ] && fail "Missing file: $DEP"
258 [ "$DEP" -nt "$TARGET" ] && {
260 UPDATED["${#UPDATED[@]}"]="$DEP"
269 if [ "$OUTDATED" = true ]
271 echo "### Building Isabelle/jEdit ..."
273 [ "${#UPDATED[@]}" -gt 0 ] && {
274 echo "Changed files:"
275 for FILE in "${UPDATED[@]}"
281 [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
282 fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
284 rm -rf dist || failed
285 mkdir -p dist dist/classes || failed
287 cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
288 cp -p -R -f "${RESOURCES[@]}" dist/classes/.
289 cp src/jEdit.props dist/properties/.
290 cp -p -R -f src/modes/. dist/modes/.
292 perl -i -e 'while (<>) {
293 if (m/NAME="javacc"/) {
294 print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
295 print qq,<MODE NAME="isabelle-news" FILE="isabelle-news.xml"/>\n\n,;
296 print qq,<MODE NAME="isabelle-options" FILE="isabelle-options.xml"/>\n\n,;
297 print qq,<MODE NAME="isabelle-root" FILE="isabelle-root.xml" FILE_NAME_GLOB="ROOT"/>\n\n,; }
298 print; }' dist/modes/catalog
300 cp -p -R -f "${JEDIT_JARS[@]}" dist/jars/. || failed
302 for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "${JFREECHART_JARS[@]}" \
303 "$XZ_JAVA_HOME/lib/xz.jar" "$PURE_JAR" "$GRAPHVIEW_JAR" "$SCALA_HOME/lib/scala-compiler.jar"
305 CLASSPATH="$CLASSPATH:$JAR"
307 CLASSPATH="$(jvmpath "$CLASSPATH")"
308 exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d dist/classes "${SOURCES[@]}"
309 ) || fail "Failed to compile sources"
312 isabelle_jdk jar cf "../jars/Isabelle-jEdit.jar" * || failed
322 if [ "$BUILD_ONLY" = false ]; then
323 if [ "$NO_BUILD" = false ]; then
324 "$ISABELLE_TOOL" build_dialog "${BUILD_DIALOG_OPTIONS[@]}"
326 [ "$RC" = 0 ] || exit "$RC"
329 export JEDIT_SESSION_DIRS JEDIT_LOGIC JEDIT_PRINT_MODE
331 exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \
332 -classpath "$(jvmpath "$JEDIT_HOME/dist/jedit.jar")" isabelle.Main "${ARGS[@]}"