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