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
113 JEDIT_SESSION_DIRS=""
116 JEDIT_BUILD_MODE="normal"
118 function getoptions()
121 while getopts "J:bd:fj:l:m:ns" OPT
125 JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
131 if [ -z "$JEDIT_SESSION_DIRS" ]; then
132 JEDIT_SESSION_DIRS="$OPTARG"
134 JEDIT_SESSION_DIRS="$JEDIT_SESSION_DIRS:$OPTARG"
138 BUILD_JARS="jars_fresh"
141 ARGS["${#ARGS[@]}"]="$OPTARG"
144 JEDIT_LOGIC="$OPTARG"
147 if [ -z "$JEDIT_PRINT_MODE" ]; then
148 JEDIT_PRINT_MODE="$OPTARG"
150 JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
154 JEDIT_BUILD_MODE="none"
157 JEDIT_BUILD_MODE="system"
166 declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
170 declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
171 getoptions "${OPTIONS[@]}"
174 shift $(($OPTIND - 1))
179 if [ "$#" -eq 0 ]; then
180 ARGS["${#ARGS[@]}"]="$(jvmpath "$USER_HOME/Scratch.thy")"
182 while [ "$#" -gt 0 ]; do
183 ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
191 if [ -e "$ISABELLE_HOME/Admin/build" ]; then
192 "$ISABELLE_TOOL" browser -b || exit $?
193 if [ "$BUILD_JARS" = jars_fresh ]; then
194 "$ISABELLE_TOOL" graphview -b -f || exit $?
196 "$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $?
197 "$ISABELLE_TOOL" graphview -b || exit $?
201 PURE_JAR="$ISABELLE_HOME/lib/classes/Pure.jar"
202 GRAPHVIEW_JAR="$ISABELLE_HOME/lib/classes/Graphview.jar"
204 pushd "$JEDIT_HOME" >/dev/null || failed
206 JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
209 "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
210 "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
211 "$ISABELLE_JEDIT_BUILD_HOME/contrib/Highlight.jar"
212 "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
213 "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
214 "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
215 "$ISABELLE_JEDIT_BUILD_HOME/contrib/idea-icons.jar"
216 "$ISABELLE_JEDIT_BUILD_HOME/contrib/jsr305-2.0.0.jar"
222 TARGET="dist/jars/Isabelle-jEdit.jar"
224 declare -a UPDATED=()
226 if [ "$BUILD_JARS" = jars_fresh ]; then
230 if [ ! -e "$TARGET" ]; then
233 if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then
235 "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR"
236 "${SOURCES[@]}" "${RESOURCES[@]}"
238 elif [ -e "$ISABELLE_HOME/Admin/build" ]; then
239 declare -a DEPS=("$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
243 for DEP in "${DEPS[@]}"
245 [ ! -e "$DEP" ] && fail "Missing file: $DEP"
246 [ "$DEP" -nt "$TARGET" ] && {
248 UPDATED["${#UPDATED[@]}"]="$DEP"
257 if [ "$OUTDATED" = true ]
259 echo "### Building Isabelle/jEdit ..."
261 [ "${#UPDATED[@]}" -gt 0 ] && {
262 echo "Changed files:"
263 for FILE in "${UPDATED[@]}"
269 [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
270 fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
272 rm -rf dist || failed
273 mkdir -p dist dist/classes || failed
275 cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
276 cp -p -R -f "${RESOURCES[@]}" dist/classes/.
277 cp src/jEdit.props dist/properties/.
278 cp -p -R -f src/modes/. dist/modes/.
280 perl -i -e 'while (<>) {
281 if (m/NAME="javacc"/) {
282 print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
283 print qq,<MODE NAME="isabelle-news" FILE="isabelle-news.xml"/>\n\n,;
284 print qq,<MODE NAME="isabelle-options" FILE="isabelle-options.xml"/>\n\n,;
285 print qq,<MODE NAME="isabelle-root" FILE="isabelle-root.xml" FILE_NAME_GLOB="ROOT"/>\n\n,; }
286 print; }' dist/modes/catalog
288 cp -p -R -f "${JEDIT_JARS[@]}" dist/jars/. || failed
290 #workaround for scalac 2.10.2
291 function stty() { :; }
294 for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR"
298 export CLASSPATH="$(jvmpath "$ISABELLE_CLASSPATH")"
299 exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d dist/classes "${SOURCES[@]}"
300 ) || fail "Failed to compile sources"
303 isabelle_jdk jar cf "../jars/Isabelle-jEdit.jar" * || failed
313 if [ "$BUILD_ONLY" = false ]
315 export JEDIT_SESSION_DIRS JEDIT_LOGIC JEDIT_PRINT_MODE JEDIT_BUILD_MODE
316 classpath "$JEDIT_HOME/dist/jedit.jar"
317 exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" isabelle.Main "${ARGS[@]}"