src/Tools/jEdit/lib/Tools/jedit
author wenzelm
Fri, 06 Sep 2013 17:01:49 +0200
changeset 54576 5bef05f5ed58
parent 54552 9ebab8b7d73c
child 54577 b99d006afbfe
permissions -rwxr-xr-x
prefer warm start via JEdit_Main;
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@51465
    11
  "src/active.scala"
wenzelm@54160
    12
  "src/completion_popup.scala"
wenzelm@44165
    13
  "src/dockable.scala"
wenzelm@44165
    14
  "src/document_model.scala"
wenzelm@44165
    15
  "src/document_view.scala"
wenzelm@53582
    16
  "src/documentation_dockable.scala"
wenzelm@53983
    17
  "src/find_dockable.scala"
wenzelm@51557
    18
  "src/fold_handling.scala"
wenzelm@50585
    19
  "src/graphview_dockable.scala"
wenzelm@44165
    20
  "src/html_panel.scala"
wenzelm@50741
    21
  "src/info_dockable.scala"
wenzelm@51223
    22
  "src/isabelle.scala"
wenzelm@44165
    23
  "src/isabelle_encoding.scala"
wenzelm@50261
    24
  "src/isabelle_logic.scala"
wenzelm@44165
    25
  "src/isabelle_options.scala"
wenzelm@44165
    26
  "src/isabelle_sidekick.scala"
wenzelm@54108
    27
  "src/jedit_editor.scala"
wenzelm@50421
    28
  "src/jedit_lib.scala"
wenzelm@50615
    29
  "src/jedit_main.scala"
wenzelm@51217
    30
  "src/jedit_options.scala"
wenzelm@45464
    31
  "src/jedit_thy_load.scala"
wenzelm@51448
    32
  "src/monitor_dockable.scala"
wenzelm@52039
    33
  "src/osx_adapter.scala"
wenzelm@44165
    34
  "src/output_dockable.scala"
wenzelm@44165
    35
  "src/plugin.scala"
wenzelm@54383
    36
  "src/popup.scala"
wenzelm@50413
    37
  "src/pretty_text_area.scala"
wenzelm@50717
    38
  "src/pretty_tooltip.scala"
wenzelm@54071
    39
  "src/process_indicator.scala"
wenzelm@44165
    40
  "src/protocol_dockable.scala"
wenzelm@44165
    41
  "src/raw_output_dockable.scala"
wenzelm@49029
    42
  "src/readme_dockable.scala"
wenzelm@51217
    43
  "src/rendering.scala"
wenzelm@50426
    44
  "src/rich_text_area.scala"
wenzelm@44165
    45
  "src/scala_console.scala"
wenzelm@54045
    46
  "src/sledgehammer_dockable.scala"
immler@51158
    47
  "src/symbols_dockable.scala"
wenzelm@49036
    48
  "src/syslog_dockable.scala"
wenzelm@47443
    49
  "src/text_overview.scala"
wenzelm@51314
    50
  "src/theories_dockable.scala"
wenzelm@52670
    51
  "src/timing_dockable.scala"
wenzelm@44288
    52
  "src/token_markup.scala"
wenzelm@44165
    53
)
wenzelm@44165
    54
wenzelm@44202
    55
declare -a RESOURCES=(
wenzelm@44166
    56
  "src/actions.xml"
wenzelm@44166
    57
  "src/dockables.xml"
wenzelm@44166
    58
  "src/Isabelle.props"
wenzelm@51321
    59
  "src/jEdit.props"
wenzelm@44166
    60
  "src/services.xml"
wenzelm@53677
    61
  "src/modes/isabelle-news.xml"
wenzelm@53677
    62
  "src/modes/isabelle-options.xml"
wenzelm@53677
    63
  "src/modes/isabelle-root.xml"
wenzelm@53677
    64
  "src/modes/isabelle.xml"
wenzelm@44165
    65
)
wenzelm@44165
    66
wenzelm@44165
    67
wenzelm@34336
    68
## diagnostics
wenzelm@34336
    69
wenzelm@34667
    70
PRG="$(basename "$0")"
wenzelm@34667
    71
wenzelm@44164
    72
function usage()
wenzelm@34336
    73
{
wenzelm@34336
    74
  echo
wenzelm@34667
    75
  echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
wenzelm@34336
    76
  echo
wenzelm@34336
    77
  echo "  Options are:"
wenzelm@34336
    78
  echo "    -J OPTION    add JVM runtime option"
wenzelm@34412
    79
  echo "                 (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
wenzelm@44165
    80
  echo "    -b           build only"
wenzelm@49806
    81
  echo "    -d DIR       include session directory"
wenzelm@44165
    82
  echo "    -f           fresh build"
wenzelm@34336
    83
  echo "    -j OPTION    add jEdit runtime option"
wenzelm@34336
    84
  echo "                 (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
wenzelm@51418
    85
  echo "    -l NAME      logic session name"
wenzelm@34336
    86
  echo "    -m MODE      add print mode for output"
wenzelm@51420
    87
  echo "    -n           no build dialog for session image on startup"
wenzelm@51388
    88
  echo "    -s           system build mode for session image"
wenzelm@34336
    89
  echo
wenzelm@51565
    90
  echo "Start jEdit with Isabelle plugin setup and open theory FILES"
wenzelm@51129
    91
  echo "(default \"$USER_HOME/Scratch.thy\")."
wenzelm@34336
    92
  echo
wenzelm@34336
    93
  exit 1
wenzelm@34336
    94
}
wenzelm@34336
    95
wenzelm@44164
    96
function fail()
wenzelm@34336
    97
{
wenzelm@34336
    98
  echo "$1" >&2
wenzelm@34336
    99
  exit 2
wenzelm@34336
   100
}
wenzelm@34336
   101
wenzelm@44164
   102
function failed()
wenzelm@44164
   103
{
wenzelm@44164
   104
  fail "Failed!"
wenzelm@44164
   105
}
wenzelm@44164
   106
wenzelm@34336
   107
wenzelm@34336
   108
## process command line
wenzelm@34336
   109
wenzelm@34336
   110
# options
wenzelm@34336
   111
wenzelm@51561
   112
declare -a BUILD_DIALOG_OPTIONS=(-L jedit_logic)
wenzelm@51388
   113
wenzelm@44165
   114
BUILD_ONLY=false
wenzelm@44165
   115
BUILD_JARS="jars"
wenzelm@49806
   116
JEDIT_SESSION_DIRS=""
wenzelm@51418
   117
JEDIT_LOGIC=""
wenzelm@34336
   118
JEDIT_PRINT_MODE=""
wenzelm@51420
   119
NO_BUILD="false"
wenzelm@34336
   120
wenzelm@44164
   121
function getoptions()
wenzelm@34783
   122
{
wenzelm@34783
   123
  OPTIND=1
wenzelm@51420
   124
  while getopts "J:bd:fj:l:m:ns" OPT
wenzelm@34783
   125
  do
wenzelm@34783
   126
    case "$OPT" in
wenzelm@34783
   127
      J)
wenzelm@34783
   128
        JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
wenzelm@34783
   129
        ;;
wenzelm@44165
   130
      b)
wenzelm@44165
   131
        BUILD_ONLY=true
wenzelm@44165
   132
        ;;
wenzelm@49806
   133
      d)
wenzelm@49806
   134
        if [ -z "$JEDIT_SESSION_DIRS" ]; then
wenzelm@49806
   135
          JEDIT_SESSION_DIRS="$OPTARG"
wenzelm@49806
   136
        else
wenzelm@49806
   137
          JEDIT_SESSION_DIRS="$JEDIT_SESSION_DIRS:$OPTARG"
wenzelm@49806
   138
        fi
wenzelm@51388
   139
        BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-d"
wenzelm@51388
   140
        BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="$OPTARG"
wenzelm@49806
   141
        ;;
wenzelm@44165
   142
      f)
wenzelm@44165
   143
        BUILD_JARS="jars_fresh"
wenzelm@44165
   144
        ;;
wenzelm@34783
   145
      j)
wenzelm@34783
   146
        ARGS["${#ARGS[@]}"]="$OPTARG"
wenzelm@34783
   147
        ;;
wenzelm@34783
   148
      l)
wenzelm@51561
   149
        BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-l"
wenzelm@51561
   150
        BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="$OPTARG"
wenzelm@34783
   151
        JEDIT_LOGIC="$OPTARG"
wenzelm@34783
   152
        ;;
wenzelm@34783
   153
      m)
wenzelm@34783
   154
        if [ -z "$JEDIT_PRINT_MODE" ]; then
wenzelm@34783
   155
          JEDIT_PRINT_MODE="$OPTARG"
wenzelm@34783
   156
        else
wenzelm@34783
   157
          JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
wenzelm@34783
   158
        fi
wenzelm@34783
   159
        ;;
wenzelm@51420
   160
      n)
wenzelm@51420
   161
        NO_BUILD="true"
wenzelm@51420
   162
        ;;
wenzelm@51388
   163
      s)
wenzelm@51388
   164
        BUILD_DIALOG_OPTIONS["${#BUILD_DIALOG_OPTIONS[@]}"]="-s"
wenzelm@51388
   165
        ;;
wenzelm@34783
   166
      \?)
wenzelm@34783
   167
        usage
wenzelm@34783
   168
        ;;
wenzelm@34783
   169
    esac
wenzelm@34783
   170
  done
wenzelm@34783
   171
}
wenzelm@34584
   172
wenzelm@38555
   173
declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
wenzelm@34846
   174
[ -n "$SCALA_HOME" ] && JAVA_ARGS["${#JAVA_ARGS[@]}"]="-Dscala.home=$SCALA_HOME"
wenzelm@34846
   175
wenzelm@34783
   176
declare -a ARGS; eval "ARGS=($JEDIT_OPTIONS)"
wenzelm@34336
   177
wenzelm@34783
   178
declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
wenzelm@34783
   179
getoptions "${OPTIONS[@]}"
wenzelm@34783
   180
wenzelm@34783
   181
getoptions "$@"
wenzelm@34336
   182
shift $(($OPTIND - 1))
wenzelm@34336
   183
wenzelm@34336
   184
wenzelm@34336
   185
# args
wenzelm@34336
   186
wenzelm@45406
   187
if [ "$#" -eq 0 ]; then
wenzelm@51135
   188
  ARGS["${#ARGS[@]}"]="$(jvmpath "$USER_HOME/Scratch.thy")"
wenzelm@45406
   189
else
wenzelm@45406
   190
  while [ "$#" -gt 0 ]; do
wenzelm@45406
   191
    ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
wenzelm@45406
   192
    shift
wenzelm@45406
   193
  done
wenzelm@45406
   194
fi
wenzelm@34336
   195
wenzelm@34336
   196
wenzelm@44164
   197
## dependencies
wenzelm@44164
   198
wenzelm@50968
   199
if [ -e "$ISABELLE_HOME/Admin/build" ]; then
wenzelm@51797
   200
  "$ISABELLE_TOOL" browser -b || exit $?
wenzelm@50968
   201
  if [ "$BUILD_JARS" = jars_fresh ]; then
wenzelm@50968
   202
    "$ISABELLE_TOOL" graphview -b -f || exit $?
wenzelm@50968
   203
  else
wenzelm@50581
   204
    "$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $?
wenzelm@50968
   205
    "$ISABELLE_TOOL" graphview -b || exit $?
wenzelm@50968
   206
  fi
wenzelm@50968
   207
fi
wenzelm@44287
   208
wenzelm@44403
   209
PURE_JAR="$ISABELLE_HOME/lib/classes/ext/Pure.jar"
wenzelm@50581
   210
GRAPHVIEW_JAR="$ISABELLE_HOME/lib/classes/ext/Graphview.jar"
wenzelm@44287
   211
wenzelm@44165
   212
pushd "$JEDIT_HOME" >/dev/null || failed
wenzelm@44164
   213
wenzelm@44164
   214
JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
wenzelm@44164
   215
wenzelm@44164
   216
JEDIT_JARS=(
wenzelm@54576
   217
  "Console.jar"
wenzelm@54576
   218
  "ErrorList.jar"
wenzelm@54576
   219
  "Highlight.jar"
wenzelm@54576
   220
  "SideKick.jar"
wenzelm@54576
   221
  "cobra.jar"
wenzelm@54576
   222
  "js.jar"
wenzelm@54576
   223
  "idea-icons.jar"
wenzelm@54576
   224
  "jsr305-2.0.0.jar"
wenzelm@44164
   225
)
wenzelm@44164
   226
wenzelm@54576
   227
declare -a JEDIT_BUILD_JARS=()
wenzelm@54576
   228
declare -a JEDIT_STARTUP_JARS=()
wenzelm@54576
   229
for NAME in "${JEDIT_JARS[@]}"
wenzelm@54576
   230
do
wenzelm@54576
   231
  JEDIT_BUILD_JARS["${#JEDIT_BUILD_JARS[@]}"]="$ISABELLE_JEDIT_BUILD_HOME/contrib/$NAME"
wenzelm@54576
   232
  JEDIT_STARTUP_JARS["${#JEDIT_STARTUP_JARS[@]}"]="$JEDIT_HOME/dist/jars/$NAME"
wenzelm@54576
   233
done
wenzelm@54576
   234
wenzelm@51448
   235
declare -a JFREECHART_JARS=()
wenzelm@51448
   236
for NAME in $JFREECHART_JAR_NAMES
wenzelm@51448
   237
do
wenzelm@51448
   238
  JFREECHART_JARS["${#JFREECHART_JARS[@]}"]="$JFREECHART_HOME/lib/$NAME"
wenzelm@51448
   239
done
wenzelm@51448
   240
wenzelm@44164
   241
wenzelm@44164
   242
# target
wenzelm@44164
   243
wenzelm@44164
   244
TARGET="dist/jars/Isabelle-jEdit.jar"
wenzelm@44164
   245
wenzelm@44256
   246
declare -a UPDATED=()
wenzelm@44256
   247
wenzelm@44165
   248
if [ "$BUILD_JARS" = jars_fresh ]; then
wenzelm@44165
   249
  OUTDATED=true
wenzelm@44165
   250
else
wenzelm@44165
   251
  OUTDATED=false
wenzelm@44239
   252
  if [ ! -e "$TARGET" ]; then
wenzelm@44239
   253
    OUTDATED=true
wenzelm@44256
   254
  else
wenzelm@44256
   255
    if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then
wenzelm@50581
   256
      declare -a DEPS=(
wenzelm@54576
   257
        "$JEDIT_JAR" "${JEDIT_BUILD_JARS[@]}" "${JFREECHART_JARS[@]}" "$XZ_JAVA_HOME/lib/xz.jar"
wenzelm@50581
   258
        "$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}"
wenzelm@50581
   259
      )
wenzelm@48543
   260
    elif [ -e "$ISABELLE_HOME/Admin/build" ]; then
wenzelm@50581
   261
      declare -a DEPS=("$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
wenzelm@44256
   262
    else
wenzelm@48543
   263
      declare -a DEPS=()
wenzelm@44256
   264
    fi
wenzelm@44256
   265
    for DEP in "${DEPS[@]}"
wenzelm@44239
   266
    do
wenzelm@44256
   267
      [ ! -e "$DEP" ] && fail "Missing file: $DEP"
wenzelm@44256
   268
      [ "$DEP" -nt "$TARGET" ] && {
wenzelm@44256
   269
        OUTDATED=true
wenzelm@44256
   270
        UPDATED["${#UPDATED[@]}"]="$DEP"
wenzelm@44256
   271
      }
wenzelm@44239
   272
    done
wenzelm@44239
   273
  fi
wenzelm@44165
   274
fi
wenzelm@44164
   275
wenzelm@44164
   276
wenzelm@44164
   277
# build
wenzelm@44164
   278
wenzelm@44164
   279
if [ "$OUTDATED" = true ]
wenzelm@44164
   280
then
wenzelm@44277
   281
  echo "### Building Isabelle/jEdit ..."
wenzelm@44277
   282
wenzelm@44256
   283
  [ "${#UPDATED[@]}" -gt 0 ] && {
wenzelm@44277
   284
    echo "Changed files:"
wenzelm@44256
   285
    for FILE in "${UPDATED[@]}"
wenzelm@44256
   286
    do
wenzelm@44256
   287
      echo "  $FILE"
wenzelm@44256
   288
    done
wenzelm@44256
   289
  }
wenzelm@44256
   290
wenzelm@44164
   291
  [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
wenzelm@44164
   292
    fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
wenzelm@44164
   293
wenzelm@44164
   294
  rm -rf dist || failed
wenzelm@44164
   295
  mkdir -p dist dist/classes || failed
wenzelm@44167
   296
wenzelm@47374
   297
  cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
wenzelm@47374
   298
  cp -p -R -f "${RESOURCES[@]}" dist/classes/.
wenzelm@44167
   299
  cp src/jEdit.props dist/properties/.
wenzelm@47374
   300
  cp -p -R -f src/modes/. dist/modes/.
wenzelm@44164
   301
wenzelm@44266
   302
  perl -i -e 'while (<>) {
wenzelm@44266
   303
    if (m/NAME="javacc"/) {
wenzelm@44266
   304
      print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
wenzelm@53676
   305
      print qq,<MODE NAME="isabelle-news" FILE="isabelle-news.xml"/>\n\n,;
wenzelm@49381
   306
      print qq,<MODE NAME="isabelle-options" FILE="isabelle-options.xml"/>\n\n,;
wenzelm@49590
   307
      print qq,<MODE NAME="isabelle-root" FILE="isabelle-root.xml" FILE_NAME_GLOB="ROOT"/>\n\n,; }
wenzelm@44164
   308
    print; }' dist/modes/catalog
wenzelm@44164
   309
wenzelm@54576
   310
  cp -p -R -f "${JEDIT_BUILD_JARS[@]}" dist/jars/. || failed
wenzelm@44164
   311
  (
wenzelm@54576
   312
    for JAR in "$JEDIT_JAR" "${JEDIT_BUILD_JARS[@]}" "${JFREECHART_JARS[@]}" \
wenzelm@54576
   313
      "$XZ_JAVA_HOME/lib/xz.jar" "$PURE_JAR" "$GRAPHVIEW_JAR" "$SCALA_HOME/lib/scala-compiler.jar"
wenzelm@44164
   314
    do
wenzelm@44164
   315
      CLASSPATH="$CLASSPATH:$JAR"
wenzelm@44164
   316
    done
wenzelm@44164
   317
    CLASSPATH="$(jvmpath "$CLASSPATH")"
wenzelm@47880
   318
    exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d dist/classes "${SOURCES[@]}"
wenzelm@44164
   319
  ) || fail "Failed to compile sources"
wenzelm@44164
   320
wenzelm@44164
   321
  cd dist/classes
wenzelm@47986
   322
  isabelle_jdk jar cf "../jars/Isabelle-jEdit.jar" * || failed
wenzelm@44164
   323
  cd ../..
wenzelm@44164
   324
  rm -rf dist/classes
wenzelm@44164
   325
fi
wenzelm@44164
   326
wenzelm@44164
   327
popd >/dev/null
wenzelm@44164
   328
wenzelm@44164
   329
wenzelm@44164
   330
## main
wenzelm@44164
   331
wenzelm@51810
   332
if [ "$BUILD_ONLY" = false ]; then
wenzelm@51810
   333
  mkdir -p "$JEDIT_SETTINGS/DockableWindowManager"
wenzelm@34881
   334
wenzelm@51810
   335
  if [ ! -e "$JEDIT_SETTINGS/perspective.xml" ]; then
wenzelm@51810
   336
    cat > "$JEDIT_SETTINGS/DockableWindowManager/perspective-view0.xml" <<EOF
wenzelm@49029
   337
<DOCKING LEFT="" TOP="" RIGHT="" BOTTOM="isabelle-readme" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />
wenzelm@34881
   338
EOF
wenzelm@34881
   339
  cat > "$JEDIT_SETTINGS/perspective.xml" <<EOF
wenzelm@34881
   340
<?xml version="1.0" encoding="UTF-8" ?>
wenzelm@34881
   341
<!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd">
wenzelm@34881
   342
<PERSPECTIVE>
wenzelm@34881
   343
<VIEW PLAIN="FALSE">
wenzelm@34881
   344
<GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" />
wenzelm@34881
   345
</VIEW>
wenzelm@34881
   346
</PERSPECTIVE>
wenzelm@34881
   347
EOF
wenzelm@51810
   348
  fi
wenzelm@34881
   349
wenzelm@51431
   350
  if [ "$NO_BUILD" = false ]; then
wenzelm@51561
   351
    "$ISABELLE_TOOL" build_dialog "${BUILD_DIALOG_OPTIONS[@]}"
wenzelm@51431
   352
    RC="$?"
wenzelm@51431
   353
    [ "$RC" = 0 ] || exit "$RC"
wenzelm@51431
   354
  fi
wenzelm@51431
   355
wenzelm@54576
   356
  JEDIT_CLASSPATH="$JEDIT_HOME/dist/jedit.jar"
wenzelm@54576
   357
  for JAR in "$JEDIT_HOME/dist/jars/Isabelle-jEdit.jar" "${JEDIT_STARTUP_JARS[@]}" \
wenzelm@54576
   358
    "${JFREECHART_JARS[@]}"
wenzelm@54576
   359
  do
wenzelm@54576
   360
    JEDIT_CLASSPATH="$JEDIT_CLASSPATH:$JAR"
wenzelm@54576
   361
  done
wenzelm@54576
   362
  JEDIT_CLASSPATH="$(jvmpath "$JEDIT_CLASSPATH")"
wenzelm@54576
   363
wenzelm@49806
   364
  export JEDIT_SESSION_DIRS JEDIT_LOGIC JEDIT_PRINT_MODE
wenzelm@34336
   365
wenzelm@44165
   366
  exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" \
wenzelm@54576
   367
    -classpath "$JEDIT_CLASSPATH" isabelle.jedit.JEdit_Main "${ARGS[@]}"
wenzelm@51431
   368
fi