src/Tools/jEdit/lib/Tools/jedit
author wenzelm
Sat, 17 Mar 2012 17:36:10 +0100
changeset 47867 f1856425224e
parent 47443 3074685ab7ed
child 47880 97b68d61de2e
permissions -rwxr-xr-x
include scala.xml as of scala-2.9.1.final/misc/scala-tool-support/jedit/modes/scala.xml -- seems to be missing in more recent distributions;
     1 #!/usr/bin/env bash
     2 #
     3 # Author: Makarius
     4 #
     5 # DESCRIPTION: Isabelle/jEdit interface wrapper
     6 
     7 
     8 ## sources
     9 
    10 declare -a SOURCES=(
    11   "src/dockable.scala"
    12   "src/document_model.scala"
    13   "src/document_view.scala"
    14   "src/html_panel.scala"
    15   "src/isabelle_encoding.scala"
    16   "src/isabelle_hyperlinks.scala"
    17   "src/isabelle_options.scala"
    18   "src/isabelle_rendering.scala"
    19   "src/isabelle_sidekick.scala"
    20   "src/jedit_thy_load.scala"
    21   "src/output_dockable.scala"
    22   "src/plugin.scala"
    23   "src/protocol_dockable.scala"
    24   "src/raw_output_dockable.scala"
    25   "src/scala_console.scala"
    26   "src/session_dockable.scala"
    27   "src/text_area_painter.scala"
    28   "src/text_overview.scala"
    29   "src/token_markup.scala"
    30 )
    31 
    32 declare -a RESOURCES=(
    33   "src/actions.xml"
    34   "src/dockables.xml"
    35   "src/Isabelle.props"
    36   "src/services.xml"
    37 )
    38 
    39 
    40 ## diagnostics
    41 
    42 PRG="$(basename "$0")"
    43 
    44 function usage()
    45 {
    46   echo
    47   echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
    48   echo
    49   echo "  Options are:"
    50   echo "    -J OPTION    add JVM runtime option"
    51   echo "                 (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
    52   echo "    -b           build only"
    53   echo "    -d           enable debugger"
    54   echo "    -f           fresh build"
    55   echo "    -j OPTION    add jEdit runtime option"
    56   echo "                 (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
    57   echo "    -l NAME      logic image name (default ISABELLE_LOGIC=$ISABELLE_LOGIC)"
    58   echo "    -m MODE      add print mode for output"
    59   echo
    60   echo "Start jEdit with Isabelle plugin setup and opens theory FILES"
    61   echo "(default Scratch.thy)."
    62   echo
    63   exit 1
    64 }
    65 
    66 function fail()
    67 {
    68   echo "$1" >&2
    69   exit 2
    70 }
    71 
    72 function failed()
    73 {
    74   fail "Failed!"
    75 }
    76 
    77 
    78 ## process command line
    79 
    80 # options
    81 
    82 BUILD_ONLY=false
    83 BUILD_JARS="jars"
    84 JEDIT_LOGIC="$ISABELLE_LOGIC"
    85 JEDIT_PRINT_MODE=""
    86 
    87 function getoptions()
    88 {
    89   OPTIND=1
    90   while getopts "J:bdfj:l:m:" OPT
    91   do
    92     case "$OPT" in
    93       J)
    94         JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
    95         ;;
    96       b)
    97         BUILD_ONLY=true
    98         ;;
    99       d)
   100         JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xdebug"
   101         JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Xrunjdwp:transport=dt_socket,server=y,suspend=n"
   102         ;;
   103       f)
   104         BUILD_JARS="jars_fresh"
   105         ;;
   106       j)
   107         ARGS["${#ARGS[@]}"]="$OPTARG"
   108         ;;
   109       l)
   110         JEDIT_LOGIC="$OPTARG"
   111         ;;
   112       m)
   113         if [ -z "$JEDIT_PRINT_MODE" ]; then
   114           JEDIT_PRINT_MODE="$OPTARG"
   115         else
   116           JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
   117         fi
   118         ;;
   119       \?)
   120         usage
   121         ;;
   122     esac
   123   done
   124 }
   125 
   126 declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
   127 [ -n "$SCALA_HOME" ] && JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Dscala.home=$SCALA_HOME"
   128 
   129 declare -a ARGS; eval "ARGS=($JEDIT_OPTIONS)"
   130 
   131 declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
   132 getoptions "${OPTIONS[@]}"
   133 
   134 getoptions "$@"
   135 shift $(($OPTIND - 1))
   136 
   137 
   138 # args
   139 
   140 if [ "$#" -eq 0 ]; then
   141   ARGS["${#ARGS[@]}"]="Scratch.thy"
   142 else
   143   while [ "$#" -gt 0 ]; do
   144     ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
   145     shift
   146   done
   147 fi
   148 
   149 
   150 ## dependencies
   151 
   152 [ -e "$ISABELLE_HOME/Admin/build" ] && \
   153   { "$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $?; }
   154 
   155 PURE_JAR="$ISABELLE_HOME/lib/classes/ext/Pure.jar"
   156 
   157 pushd "$JEDIT_HOME" >/dev/null || failed
   158 
   159 JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
   160 
   161 JEDIT_JARS=(
   162   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
   163   "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
   164   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Hyperlinks.jar"
   165   "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
   166   "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
   167   "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
   168 )
   169 
   170 SCALA_JARS=(
   171   "$SCALA_HOME/lib/scala-compiler.jar"
   172   "$SCALA_HOME/lib/scala-library.jar"
   173   "$SCALA_HOME/lib/scala-swing.jar"
   174 )
   175 
   176 
   177 # target
   178 
   179 TARGET="dist/jars/Isabelle-jEdit.jar"
   180 
   181 declare -a UPDATED=()
   182 
   183 if [ "$BUILD_JARS" = jars_fresh ]; then
   184   OUTDATED=true
   185 else
   186   OUTDATED=false
   187   if [ ! -e "$TARGET" ]; then
   188     OUTDATED=true
   189   else
   190     if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then
   191       declare -a DEPS=("$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
   192     else
   193       declare -a DEPS=("$PURE_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
   194     fi
   195     for DEP in "${DEPS[@]}"
   196     do
   197       [ ! -e "$DEP" ] && fail "Missing file: $DEP"
   198       [ "$DEP" -nt "$TARGET" ] && {
   199         OUTDATED=true
   200         UPDATED["${#UPDATED[@]}"]="$DEP"
   201       }
   202     done
   203   fi
   204 fi
   205 
   206 
   207 # build
   208 
   209 if [ "$OUTDATED" = true ]
   210 then
   211   echo "### Building Isabelle/jEdit ..."
   212 
   213   [ "${#UPDATED[@]}" -gt 0 ] && {
   214     echo "Changed files:"
   215     for FILE in "${UPDATED[@]}"
   216     do
   217       echo "  $FILE"
   218     done
   219   }
   220 
   221   [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
   222     fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
   223 
   224   rm -rf dist || failed
   225   mkdir -p dist dist/classes || failed
   226 
   227   cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
   228   cp -p -R -f "${RESOURCES[@]}" dist/classes/.
   229   cp src/jEdit.props dist/properties/.
   230   cp -p -R -f src/modes/. dist/modes/.
   231 
   232   perl -i -e 'while (<>) {
   233     if (m/NAME="javacc"/) {
   234       print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
   235       print qq,<MODE NAME="isabelle-session" FILE="isabelle-session.xml" FILE_NAME_GLOB="session.root"/>\n\n,; }
   236     elsif (m/NAME="scheme"/) {
   237       print qq,<MODE NAME="scala" FILE="scala.xml" FILE_NAME_GLOB="*.scala" />\n\n,; }
   238     print; }' dist/modes/catalog
   239 
   240   cp -p -R -f "${JEDIT_JARS[@]}" "$SCALA_HOME/lib/scala-compiler.jar" dist/jars/. || failed
   241   (
   242     for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$SCALA_HOME/lib/scala-compiler.jar"
   243     do
   244       CLASSPATH="$CLASSPATH:$JAR"
   245     done
   246     CLASSPATH="$(jvmpath "$CLASSPATH")"
   247     exec "$SCALA_HOME/bin/scalac" -unchecked -deprecation \
   248       -d dist/classes -target:jvm-1.5 "${SOURCES[@]}"
   249   ) || fail "Failed to compile sources"
   250 
   251   cd dist/classes
   252   jar cf "../jars/Isabelle-jEdit.jar" * || failed
   253   cd ../..
   254   rm -rf dist/classes
   255 fi
   256 
   257 popd >/dev/null
   258 
   259 
   260 ## main
   261 
   262 # perspective
   263 
   264 mkdir -p "$JEDIT_SETTINGS/DockableWindowManager"
   265 
   266 if [ ! -e "$JEDIT_SETTINGS/perspective.xml" ]; then
   267   cat > "$JEDIT_SETTINGS/DockableWindowManager/perspective-view0.xml" <<EOF
   268 <DOCKING LEFT="" TOP="" RIGHT="" BOTTOM="isabelle-session" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />
   269 EOF
   270   cat > "$JEDIT_SETTINGS/perspective.xml" <<EOF
   271 <?xml version="1.0" encoding="UTF-8" ?>
   272 <!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd">
   273 <PERSPECTIVE>
   274 <VIEW PLAIN="FALSE">
   275 <GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" />
   276 </VIEW>
   277 </PERSPECTIVE>
   278 EOF
   279 fi
   280 
   281 
   282 # run
   283 
   284 [ "$BUILD_ONLY" = true ] || {
   285   case "$JEDIT_LOGIC" in
   286     /*)
   287       ;;
   288     */*)
   289       JEDIT_LOGIC="$(pwd -P)/$JEDIT_LOGIC"
   290       ;;
   291   esac
   292 
   293   export JEDIT_LOGIC JEDIT_PRINT_MODE
   294 
   295   exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \
   296     -jar "$(jvmpath "$JEDIT_HOME/dist/jedit.jar")" \
   297     "-settings=$(jvmpath "$JEDIT_SETTINGS")" "${ARGS[@]}"
   298 }