build jedit as part of regular startup script (in that case depending on jedit_build component);
authorwenzelm
Wed, 08 Jun 2011 20:58:51 +0200
changeset 43284 04d473e883df
parent 43283 446e6621762d
child 43285 966f359dc724
build jedit as part of regular startup script (in that case depending on jedit_build component); misc tuning and simplification;
etc/components
src/Tools/jEdit/dist-template/etc/isabelle-jedit.css
src/Tools/jEdit/dist-template/etc/settings
src/Tools/jEdit/dist-template/lib/Tools/jedit
src/Tools/jEdit/etc/isabelle-jedit.css
src/Tools/jEdit/etc/settings
src/Tools/jEdit/jedit_build/Tools/jedit
src/Tools/jEdit/lib/Tools/jedit
--- a/etc/components	Wed Jun 08 17:49:01 2011 +0200
+++ b/etc/components	Wed Jun 08 20:58:51 2011 +0200
@@ -11,6 +11,7 @@
 src/Sequents
 #misc components
 src/Tools/Code
+src/Tools/jEdit
 src/Tools/WWW_Find
 src/HOL/Tools/ATP
 src/HOL/Mirabelle
--- a/src/Tools/jEdit/dist-template/etc/isabelle-jedit.css	Wed Jun 08 17:49:01 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* additional style file for Isabelle/jEdit output */
-
-.message { margin-top: 0.3ex; background-color: #F0F0F0; }
-
-.writeln { }
-.tracing { background-color: #F0F8FF; }
-.warning { background-color: #EEE8AA; }
-.error { background-color: #FFC1C1; }
-
-.report { display: none; }
-
-.hilite { background-color: #FFCC66; }
-
-.keyword { font-weight: bold; color: #009966; }
-.operator { font-weight: bold; }
-.command { font-weight: bold; color: #006699; }
-
-.sendback { text-decoration: underline; }
-.sendback:hover { background-color: #FFCC66; }
--- a/src/Tools/jEdit/dist-template/etc/settings	Wed Jun 08 17:49:01 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-# -*- shell-script -*- :mode=shellscript:
-
-JEDIT_HOME="$COMPONENT"
-JEDIT_SETTINGS="$ISABELLE_HOME_USER/jedit"
-
-JEDIT_OPTIONS="-reuseview -noserver -nobackground"
-JEDIT_JAVA_OPTIONS="-Xms128m -Xmx1024m -Xss4m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false"
-#JEDIT_JAVA_OPTIONS="-Xms128m -Xmx512m -Xss2m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false"
-JEDIT_SYSTEM_OPTIONS="-Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=Isabelle/jEdit"
-
-JEDIT_STYLE_SHEETS="$ISABELLE_HOME/lib/html/isabelle.css:$JEDIT_HOME/etc/isabelle-jedit.css:$ISABELLE_HOME_USER/etc/isabelle.css:$ISABELLE_HOME_USER/etc/isabelle-jedit.css"
-
-ISABELLE_JEDIT_OPTIONS="-m xsymbols -m no_brackets -m no_type_brackets"
-
-ISABELLE_TOOLS="$ISABELLE_TOOLS:$JEDIT_HOME/lib/Tools"
-
--- a/src/Tools/jEdit/dist-template/lib/Tools/jedit	Wed Jun 08 17:49:01 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-#!/usr/bin/env bash
-#
-# Author: Makarius
-#
-# DESCRIPTION: Isabelle/jEdit interface wrapper
-
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
-  echo
-  echo "  Options are:"
-  echo "    -J OPTION    add JVM runtime option"
-  echo "                 (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
-  echo "    -d           enable debugger"
-  echo "    -j OPTION    add jEdit runtime option"
-  echo "                 (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
-  echo "    -l NAME      logic image name (default ISABELLE_LOGIC=$ISABELLE_LOGIC)"
-  echo "    -m MODE      add print mode for output"
-  echo
-  echo "Start jEdit with Isabelle plugin setup and opens theory FILES"
-  echo
-  exit 1
-}
-
-fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-
-## process command line
-
-# options
-
-JEDIT_LOGIC="$ISABELLE_LOGIC"
-JEDIT_PRINT_MODE=""
-
-getoptions()
-{
-  OPTIND=1
-  while getopts "J:dj:l:m:" OPT
-  do
-    case "$OPT" in
-      J)
-        JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
-        ;;
-      d)
-        JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xdebug"
-        JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xrunjdwp:transport=dt_socket,server=y,suspend=n"
-        ;;
-      j)
-        ARGS["${#ARGS[@]}"]="$OPTARG"
-        ;;
-      l)
-        JEDIT_LOGIC="$OPTARG"
-        ;;
-      m)
-        if [ -z "$JEDIT_PRINT_MODE" ]; then
-          JEDIT_PRINT_MODE="$OPTARG"
-        else
-          JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
-        fi
-        ;;
-      \?)
-        usage
-        ;;
-    esac
-  done
-}
-
-declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
-[ -n "$SCALA_HOME" ] && JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Dscala.home=$SCALA_HOME"
-
-declare -a ARGS; eval "ARGS=($JEDIT_OPTIONS)"
-
-declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
-getoptions "${OPTIONS[@]}"
-
-getoptions "$@"
-shift $(($OPTIND - 1))
-
-
-# args
-
-while [ "$#" -gt 0 ]; do
-  ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
-  shift
-done
-
-
-## default perspective
-
-mkdir -p "$JEDIT_SETTINGS/DockableWindowManager"
-
-if [ ! -e "$JEDIT_SETTINGS/perspective.xml" ]; then
-  cat > "$JEDIT_SETTINGS/DockableWindowManager/perspective-view0.xml" <<EOF
-<DOCKING LEFT="" TOP="" RIGHT="" BOTTOM="isabelle-session" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />
-EOF
-  cat > "$JEDIT_SETTINGS/perspective.xml" <<EOF
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd">
-<PERSPECTIVE>
-<VIEW PLAIN="FALSE">
-<GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" />
-</VIEW>
-</PERSPECTIVE>
-EOF
-fi
-
-
-## main
-
-case "$JEDIT_LOGIC" in
-  /*)
-    ;;
-  */*)
-    JEDIT_LOGIC="$(pwd -P)/$JEDIT_LOGIC"
-    ;;
-esac
-
-export JEDIT_LOGIC JEDIT_PRINT_MODE
-
-exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \
-  -jar "$(jvmpath "$JEDIT_HOME/jedit.jar")" \
-  "-settings=$(jvmpath "$JEDIT_SETTINGS")" "${ARGS[@]}"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/jEdit/etc/isabelle-jedit.css	Wed Jun 08 20:58:51 2011 +0200
@@ -0,0 +1,19 @@
+/* additional style file for Isabelle/jEdit output */
+
+.message { margin-top: 0.3ex; background-color: #F0F0F0; }
+
+.writeln { }
+.tracing { background-color: #F0F8FF; }
+.warning { background-color: #EEE8AA; }
+.error { background-color: #FFC1C1; }
+
+.report { display: none; }
+
+.hilite { background-color: #FFCC66; }
+
+.keyword { font-weight: bold; color: #009966; }
+.operator { font-weight: bold; }
+.command { font-weight: bold; color: #006699; }
+
+.sendback { text-decoration: underline; }
+.sendback:hover { background-color: #FFCC66; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/jEdit/etc/settings	Wed Jun 08 20:58:51 2011 +0200
@@ -0,0 +1,16 @@
+# -*- shell-script -*- :mode=shellscript:
+
+JEDIT_HOME="$COMPONENT"
+JEDIT_SETTINGS="$ISABELLE_HOME_USER/jedit"
+
+JEDIT_OPTIONS="-reuseview -noserver -nobackground"
+JEDIT_JAVA_OPTIONS="-Xms128m -Xmx1024m -Xss4m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false"
+#JEDIT_JAVA_OPTIONS="-Xms128m -Xmx512m -Xss2m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false"
+JEDIT_SYSTEM_OPTIONS="-Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=Isabelle/jEdit"
+
+JEDIT_STYLE_SHEETS="$ISABELLE_HOME/lib/html/isabelle.css:$JEDIT_HOME/etc/isabelle-jedit.css:$ISABELLE_HOME_USER/etc/isabelle.css:$ISABELLE_HOME_USER/etc/isabelle-jedit.css"
+
+ISABELLE_JEDIT_OPTIONS="-m xsymbols -m no_brackets -m no_type_brackets"
+
+ISABELLE_TOOLS="$ISABELLE_TOOLS:$JEDIT_HOME/lib/Tools"
+
--- a/src/Tools/jEdit/jedit_build/Tools/jedit	Wed Jun 08 17:49:01 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-#!/usr/bin/env bash
-#
-# Author: Makarius
-#
-# DESCRIPTION: build and run Isabelle/jEdit on the spot
-
-## diagnostics
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-function failed()
-{
-  fail "Failed!"
-}
-
-
-## dependencies
-
-[ -z "$ISABELLE_HOME" ] && fail "Missing Isabelle settings environment"
-[ -z "$SCALA_HOME" ] && fail "Unknown SCALA_HOME -- Scala unavailable"
-
-[ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
-  fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
-
-[ -e "$ISABELLE_HOME/Admin/build" ] && \
-  { "$ISABELLE_HOME/Admin/build" jars || exit $?; }
-
-
-# sources
-
-SRC_DIR="$ISABELLE_HOME/src/Tools/jEdit"
-
-declare -a SOURCES=(
-  "$SRC_DIR/src/dockable.scala"
-  "$SRC_DIR/src/document_model.scala"
-  "$SRC_DIR/src/document_view.scala"
-  "$SRC_DIR/src/html_panel.scala"
-  "$SRC_DIR/src/isabelle_encoding.scala"
-  "$SRC_DIR/src/isabelle_hyperlinks.scala"
-  "$SRC_DIR/src/isabelle_markup.scala"
-  "$SRC_DIR/src/isabelle_options.scala"
-  "$SRC_DIR/src/isabelle_sidekick.scala"
-  "$SRC_DIR/src/output_dockable.scala"
-  "$SRC_DIR/src/plugin.scala"
-  "$SRC_DIR/src/protocol_dockable.scala"
-  "$SRC_DIR/src/raw_output_dockable.scala"
-  "$SRC_DIR/src/scala_console.scala"
-  "$SRC_DIR/src/session_dockable.scala"
-)
-
-declare -a PLUGIN_FILES=(
-  "$SRC_DIR/plugin/actions.xml"
-  "$SRC_DIR/plugin/dockables.xml"
-  "$SRC_DIR/plugin/Isabelle.props"
-  "$SRC_DIR/plugin/services.xml"
-)
-
-JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
-
-JEDIT_JARS=(
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/Hyperlinks.jar"
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
-  "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
-)
-
-SCALA_JARS=(
-  "$SCALA_HOME/lib/scala-compiler.jar"
-  "$SCALA_HOME/lib/scala-library.jar"
-  "$SCALA_HOME/lib/scala-swing.jar"
-)
-
-
-# target
-
-TARGET_DIR="$ISABELLE_JEDIT_BUILD_HOME/${ISABELLE_JEDIT_BUILD_VERSION}_Isabelle-$("$ISABELLE_TOOL" version -i)"
-TARGET="$TARGET_DIR/jars/Isabelle-jEdit.jar"
-
-OUTDATED=false
-for SOURCE in "${SOURCES[@]}" "${PLUGIN_FILES[@]}" "$JEDIT_JAR" "${JEDIT_JARS[@]}"
-do
-  [ ! -e "$SOURCE" ] && fail "Missing file: $SOURCE"
-  [ ! -e "$TARGET" -o "$SOURCE" -nt "$TARGET" ] && OUTDATED=true
-done
-
-
-## main
-
-if [ "$OUTDATED" = true ]
-then
-  echo "###"
-  echo "### Building Isabelle/jEdit ..."
-  echo "###"
-
-  rm -rf "$TARGET_DIR" || failed
-  mkdir -p "$TARGET_DIR" "$TARGET_DIR/classes" || failed
-  cp -a "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." "$TARGET_DIR/."
-
-  cp -a "${PLUGIN_FILES[@]}" "$TARGET_DIR/classes/."
-  cp -a "$SRC_DIR/dist-template/." "$TARGET_DIR/."
-  cp -a "$SRC_DIR/README" "$TARGET_DIR/."
-
-  perl -i -e 'while (<>) { if (m/NAME="javacc"/) {
-    print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
-    print qq,<MODE NAME="isabelle-session" FILE="isabelle-session.xml" FILE_NAME_GLOB="session.root"/>\n\n,; }
-    print; }' "$TARGET_DIR/modes/catalog"
-
-  (
-    for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$SCALA_HOME/lib/scala-compiler.jar"
-    do
-      CLASSPATH="$CLASSPATH:$JAR"
-    done
-
-    cp -a "${JEDIT_JARS[@]}" "${SCALA_JARS[@]}" "$ISABELLE_HOME/lib/classes/Pure.jar" \
-      "$TARGET_DIR/jars/." || failed
-
-    declare -a JVM_SOURCES=()
-    for SOURCE in "${SOURCES[@]}"
-    do
-      JVM_SOURCES["${#JVM_SOURCES[@]}"]="$(jvmpath "$SOURCE")"
-    done
-
-    CLASSPATH="$(jvmpath "$CLASSPATH")"
-
-    "$SCALA_HOME/bin/scalac" -unchecked -deprecation \
-      -d "$(jvmpath "$TARGET_DIR/classes")" -target:jvm-1.5 "${JVM_SOURCES[@]}" || \
-      fail "Failed to compile sources"
-
-    cd "$TARGET_DIR/classes"
-    jar cf "../jars/Isabelle-jEdit.jar" * || failed
-    cd ..
-    rm -rf classes
-  )
-fi
-
-set -o allexport
-init_component "$TARGET_DIR"
-[ -f "$ISABELLE_JEDIT_BUILD_HOME/etc/user-settings" ] && \
-  source "$ISABELLE_JEDIT_BUILD_HOME/etc/user-settings"
-set +o allexport
-
-exec "$TARGET_DIR/lib/Tools/jedit" "$@"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/jEdit/lib/Tools/jedit	Wed Jun 08 20:58:51 2011 +0200
@@ -0,0 +1,255 @@
+#!/usr/bin/env bash
+#
+# Author: Makarius
+#
+# DESCRIPTION: Isabelle/jEdit interface wrapper
+
+
+## diagnostics
+
+PRG="$(basename "$0")"
+
+function usage()
+{
+  echo
+  echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
+  echo
+  echo "  Options are:"
+  echo "    -J OPTION    add JVM runtime option"
+  echo "                 (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
+  echo "    -d           enable debugger"
+  echo "    -j OPTION    add jEdit runtime option"
+  echo "                 (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
+  echo "    -l NAME      logic image name (default ISABELLE_LOGIC=$ISABELLE_LOGIC)"
+  echo "    -m MODE      add print mode for output"
+  echo
+  echo "Start jEdit with Isabelle plugin setup and opens theory FILES"
+  echo
+  exit 1
+}
+
+function fail()
+{
+  echo "$1" >&2
+  exit 2
+}
+
+function failed()
+{
+  fail "Failed!"
+}
+
+
+## process command line
+
+# options
+
+JEDIT_LOGIC="$ISABELLE_LOGIC"
+JEDIT_PRINT_MODE=""
+
+function getoptions()
+{
+  OPTIND=1
+  while getopts "J:dj:l:m:" OPT
+  do
+    case "$OPT" in
+      J)
+        JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
+        ;;
+      d)
+        JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xdebug"
+        JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xrunjdwp:transport=dt_socket,server=y,suspend=n"
+        ;;
+      j)
+        ARGS["${#ARGS[@]}"]="$OPTARG"
+        ;;
+      l)
+        JEDIT_LOGIC="$OPTARG"
+        ;;
+      m)
+        if [ -z "$JEDIT_PRINT_MODE" ]; then
+          JEDIT_PRINT_MODE="$OPTARG"
+        else
+          JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
+        fi
+        ;;
+      \?)
+        usage
+        ;;
+    esac
+  done
+}
+
+declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
+[ -n "$SCALA_HOME" ] && JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Dscala.home=$SCALA_HOME"
+
+declare -a ARGS; eval "ARGS=($JEDIT_OPTIONS)"
+
+declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
+getoptions "${OPTIONS[@]}"
+
+getoptions "$@"
+shift $(($OPTIND - 1))
+
+
+# args
+
+while [ "$#" -gt 0 ]
+do
+  ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
+  shift
+done
+
+
+## dependencies
+
+pushd "$JEDIT_HOME" || failed
+
+
+# sources
+
+declare -a SOURCES=(
+  "src/dockable.scala"
+  "src/document_model.scala"
+  "src/document_view.scala"
+  "src/html_panel.scala"
+  "src/isabelle_encoding.scala"
+  "src/isabelle_hyperlinks.scala"
+  "src/isabelle_markup.scala"
+  "src/isabelle_options.scala"
+  "src/isabelle_sidekick.scala"
+  "src/output_dockable.scala"
+  "src/plugin.scala"
+  "src/protocol_dockable.scala"
+  "src/raw_output_dockable.scala"
+  "src/scala_console.scala"
+  "src/session_dockable.scala"
+)
+
+declare -a PLUGIN_FILES=(
+  "plugin/actions.xml"
+  "plugin/dockables.xml"
+  "plugin/Isabelle.props"
+  "plugin/services.xml"
+)
+
+JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
+
+JEDIT_JARS=(
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/Hyperlinks.jar"
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
+  "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
+)
+
+SCALA_JARS=(
+  "$SCALA_HOME/lib/scala-compiler.jar"
+  "$SCALA_HOME/lib/scala-library.jar"
+  "$SCALA_HOME/lib/scala-swing.jar"
+)
+
+
+# target
+
+TARGET="dist/jars/Isabelle-jEdit.jar"
+
+OUTDATED=false
+for SOURCE in "${SOURCES[@]}" "${PLUGIN_FILES[@]}" "$JEDIT_JAR" "${JEDIT_JARS[@]}"
+do
+  [ ! -e "$SOURCE" ] && fail "Missing file: $SOURCE"
+  [ ! -e "$TARGET" -o "$SOURCE" -nt "$TARGET" ] && OUTDATED=true
+done
+
+
+# build
+
+if [ "$OUTDATED" = true ]
+then
+  echo "###"
+  echo "### Building Isabelle/jEdit ..."
+  echo "###"
+
+  [ -z "$SCALA_HOME" ] && fail "Unknown SCALA_HOME -- Scala unavailable"
+
+  [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
+    fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
+
+  [ -e "$ISABELLE_HOME/Admin/build" ] && \
+    { "$ISABELLE_HOME/Admin/build" jars || exit $?; }
+
+
+  rm -rf dist || failed
+  mkdir -p dist dist/classes || failed
+  cp -a "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
+
+  cp -a "${PLUGIN_FILES[@]}" dist/classes/.
+  cp -a dist-template/. dist/.
+  cp -a README dist/.
+
+  perl -i -e 'while (<>) { if (m/NAME="javacc"/) {
+    print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
+    print qq,<MODE NAME="isabelle-session" FILE="isabelle-session.xml" FILE_NAME_GLOB="session.root"/>\n\n,; }
+    print; }' dist/modes/catalog
+
+  cp -a "${JEDIT_JARS[@]}" "${SCALA_JARS[@]}" "$ISABELLE_HOME/lib/classes/Pure.jar" \
+    dist/jars/. || failed
+
+  (
+    for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$SCALA_HOME/lib/scala-compiler.jar"
+    do
+      CLASSPATH="$CLASSPATH:$JAR"
+    done
+    CLASSPATH="$(jvmpath "$CLASSPATH")"
+
+    exec "$SCALA_HOME/bin/scalac" -unchecked -deprecation \
+      -d dist/classes -target:jvm-1.5 "${SOURCES[@]}"
+  ) || fail "Failed to compile sources"
+
+  cd dist/classes
+  jar cf "../jars/Isabelle-jEdit.jar" * || failed
+  cd ../..
+  rm -rf dist/classes
+fi
+
+popd >/dev/null
+
+
+## main
+
+# perspective
+
+mkdir -p "$JEDIT_SETTINGS/DockableWindowManager"
+
+if [ ! -e "$JEDIT_SETTINGS/perspective.xml" ]; then
+  cat > "$JEDIT_SETTINGS/DockableWindowManager/perspective-view0.xml" <<EOF
+<DOCKING LEFT="" TOP="" RIGHT="" BOTTOM="isabelle-session" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />
+EOF
+  cat > "$JEDIT_SETTINGS/perspective.xml" <<EOF
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd">
+<PERSPECTIVE>
+<VIEW PLAIN="FALSE">
+<GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" />
+</VIEW>
+</PERSPECTIVE>
+EOF
+fi
+
+
+# run
+
+case "$JEDIT_LOGIC" in
+  /*)
+    ;;
+  */*)
+    JEDIT_LOGIC="$(pwd -P)/$JEDIT_LOGIC"
+    ;;
+esac
+
+export JEDIT_LOGIC JEDIT_PRINT_MODE
+
+exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \
+  -jar "$(jvmpath "$JEDIT_HOME/dist/jedit.jar")" \
+  "-settings=$(jvmpath "$JEDIT_SETTINGS")" "${ARGS[@]}"