41640
|
1 |
#!/usr/bin/env bash
|
|
2 |
#
|
|
3 |
# Proof General interface wrapper for Isabelle.
|
|
4 |
|
|
5 |
|
|
6 |
## self references
|
|
7 |
|
|
8 |
THIS="$(cd "$(dirname "$0")"; pwd)"
|
|
9 |
SUPER="$(cd "$THIS/.."; pwd)"
|
|
10 |
|
|
11 |
|
|
12 |
## diagnostics
|
|
13 |
|
|
14 |
usage()
|
|
15 |
{
|
|
16 |
echo
|
|
17 |
echo "Usage: isabelle emacs [OPTIONS] [FILES ...]"
|
|
18 |
echo
|
|
19 |
echo " Options are:"
|
|
20 |
echo " -L NAME abbreviates -l NAME -k NAME"
|
|
21 |
echo " -U BOOL enable UTF-8 communication (default true)"
|
41641
|
22 |
echo " -f FONT specify Emacs font"
|
41640
|
23 |
echo " -g GEOMETRY specify Emacs geometry"
|
|
24 |
echo " -k NAME use specific isar-keywords for named logic"
|
|
25 |
echo " -l NAME logic image name (default \$ISABELLE_LOGIC=$ISABELLE_LOGIC)"
|
|
26 |
echo " -m MODE add print mode for output"
|
|
27 |
echo " -p NAME Emacs program name (default emacs)"
|
|
28 |
echo " -u BOOL use personal .emacs file (default true)"
|
|
29 |
echo " -w BOOL use window system (default true)"
|
|
30 |
echo " -x BOOL render Isabelle symbols via Unicode (default false)"
|
|
31 |
echo
|
|
32 |
echo "Starts Proof General for Isabelle with theory and proof FILES"
|
|
33 |
echo "(default Scratch.thy)."
|
|
34 |
echo
|
|
35 |
echo " PROOFGENERAL_OPTIONS=$PROOFGENERAL_OPTIONS"
|
|
36 |
echo
|
|
37 |
exit 1
|
|
38 |
}
|
|
39 |
|
|
40 |
fail()
|
|
41 |
{
|
|
42 |
echo "$1" >&2
|
|
43 |
exit 2
|
|
44 |
}
|
|
45 |
|
|
46 |
|
|
47 |
## process command line
|
|
48 |
|
|
49 |
# options
|
|
50 |
|
|
51 |
ISABELLE_OPTIONS=""
|
|
52 |
|
|
53 |
KEYWORDS=""
|
|
54 |
LOGIC="$ISABELLE_LOGIC"
|
|
55 |
UNICODE=""
|
41641
|
56 |
FONT=""
|
41640
|
57 |
GEOMETRY=""
|
|
58 |
PROGNAME="emacs"
|
|
59 |
INITFILE="true"
|
|
60 |
WINDOWSYSTEM="true"
|
|
61 |
UNICODE_SYMBOLS=""
|
|
62 |
|
|
63 |
getoptions()
|
|
64 |
{
|
|
65 |
OPTIND=1
|
41641
|
66 |
while getopts "L:U:f:g:k:l:m:p:u:w:x:" OPT
|
41640
|
67 |
do
|
|
68 |
case "$OPT" in
|
|
69 |
L)
|
|
70 |
KEYWORDS="$OPTARG"
|
|
71 |
LOGIC="$OPTARG"
|
|
72 |
;;
|
|
73 |
U)
|
|
74 |
UNICODE="$OPTARG"
|
|
75 |
;;
|
41641
|
76 |
f)
|
|
77 |
FONT="$OPTARG"
|
|
78 |
;;
|
41640
|
79 |
g)
|
|
80 |
GEOMETRY="$OPTARG"
|
|
81 |
;;
|
|
82 |
k)
|
|
83 |
KEYWORDS="$OPTARG"
|
|
84 |
;;
|
|
85 |
l)
|
|
86 |
LOGIC="$OPTARG"
|
|
87 |
;;
|
|
88 |
m)
|
|
89 |
if [ -z "$ISABELLE_OPTIONS" ]; then
|
|
90 |
ISABELLE_OPTIONS="-m $OPTARG"
|
|
91 |
else
|
|
92 |
ISABELLE_OPTIONS="$ISABELLE_OPTIONS -m $OPTARG"
|
|
93 |
fi
|
|
94 |
;;
|
|
95 |
p)
|
|
96 |
PROGNAME="$OPTARG"
|
|
97 |
;;
|
|
98 |
u)
|
|
99 |
INITFILE="$OPTARG"
|
|
100 |
;;
|
|
101 |
w)
|
|
102 |
WINDOWSYSTEM="$OPTARG"
|
|
103 |
;;
|
|
104 |
x)
|
|
105 |
UNICODE_SYMBOLS="$OPTARG"
|
|
106 |
;;
|
|
107 |
\?)
|
|
108 |
usage
|
|
109 |
;;
|
|
110 |
esac
|
|
111 |
done
|
|
112 |
}
|
|
113 |
|
|
114 |
eval "OPTIONS=($PROOFGENERAL_OPTIONS)"
|
|
115 |
getoptions "${OPTIONS[@]}"
|
|
116 |
|
|
117 |
getoptions "$@"
|
|
118 |
shift $(($OPTIND - 1))
|
|
119 |
|
|
120 |
|
|
121 |
# args
|
|
122 |
|
|
123 |
declare -a FILES=()
|
|
124 |
|
|
125 |
if [ "$#" -eq 0 ]; then
|
|
126 |
FILES["${#FILES[@]}"]="Scratch.thy"
|
|
127 |
else
|
|
128 |
while [ "$#" -gt 0 ]; do
|
|
129 |
FILES["${#FILES[@]}"]="$1"
|
|
130 |
shift
|
|
131 |
done
|
|
132 |
fi
|
|
133 |
|
|
134 |
|
|
135 |
## main
|
|
136 |
|
|
137 |
declare -a ARGS=()
|
|
138 |
|
41641
|
139 |
if [ -n "$FONT" ]; then
|
|
140 |
ARGS["${#ARGS[@]}"]="-fn"
|
|
141 |
ARGS["${#ARGS[@]}"]="$FONT"
|
|
142 |
fi
|
|
143 |
|
41640
|
144 |
if [ -n "$GEOMETRY" ]; then
|
|
145 |
ARGS["${#ARGS[@]}"]="-geometry"
|
|
146 |
ARGS["${#ARGS[@]}"]="$GEOMETRY"
|
|
147 |
fi
|
|
148 |
|
|
149 |
[ "$INITFILE" = false ] && ARGS["${#ARGS[@]}"]="-q"
|
|
150 |
[ "$WINDOWSYSTEM" = false ] && ARGS["${#ARGS[@]}"]="-nw"
|
|
151 |
|
|
152 |
ARGS["${#ARGS[@]}"]="-l"
|
|
153 |
ARGS["${#ARGS[@]}"]="$SUPER/isar/interface-setup.el"
|
|
154 |
|
|
155 |
if [ -n "$KEYWORDS" ]; then
|
|
156 |
if [ -f "$ISABELLE_HOME_USER/etc/isar-keywords-$KEYWORDS.el" ]; then
|
|
157 |
ARGS["${#ARGS[@]}"]="-l"
|
|
158 |
ARGS["${#ARGS[@]}"]="$ISABELLE_HOME_USER/etc/isar-keywords-$KEYWORDS.el"
|
|
159 |
elif [ -f "$ISABELLE_HOME/etc/isar-keywords-$KEYWORDS.el" ]; then
|
|
160 |
ARGS["${#ARGS[@]}"]="-l"
|
|
161 |
ARGS["${#ARGS[@]}"]="$ISABELLE_HOME/etc/isar-keywords-$KEYWORDS.el"
|
|
162 |
else
|
|
163 |
fail "No isar-keywords file for '$KEYWORDS'"
|
|
164 |
fi
|
|
165 |
elif [ -f "$ISABELLE_HOME_USER/etc/isar-keywords.el" ]; then
|
|
166 |
ARGS["${#ARGS[@]}"]="-l"
|
|
167 |
ARGS["${#ARGS[@]}"]="$ISABELLE_HOME_USER/etc/isar-keywords.el"
|
|
168 |
elif [ -f "$ISABELLE_HOME/etc/isar-keywords.el" ]; then
|
|
169 |
ARGS["${#ARGS[@]}"]="-l"
|
|
170 |
ARGS["${#ARGS[@]}"]="$ISABELLE_HOME/etc/isar-keywords.el"
|
|
171 |
fi
|
|
172 |
|
|
173 |
for FILE in "$ISABELLE_HOME/etc/proofgeneral-settings.el" \
|
|
174 |
"$ISABELLE_HOME_USER/etc/proofgeneral-settings.el"
|
|
175 |
do
|
|
176 |
if [ -f "$FILE" ]; then
|
|
177 |
ARGS["${#ARGS[@]}"]="-l"
|
|
178 |
ARGS["${#ARGS[@]}"]="$FILE"
|
|
179 |
fi
|
|
180 |
done
|
|
181 |
|
|
182 |
case "$LOGIC" in
|
|
183 |
/*)
|
|
184 |
;;
|
|
185 |
*/*)
|
|
186 |
LOGIC="$(pwd -P)/$LOGIC"
|
|
187 |
;;
|
|
188 |
esac
|
|
189 |
|
|
190 |
export PROOFGENERAL_HOME="$SUPER"
|
|
191 |
export PROOFGENERAL_ASSISTANTS="isar"
|
|
192 |
export PROOFGENERAL_LOGIC="$LOGIC"
|
|
193 |
export PROOFGENERAL_UNICODE="$UNICODE"
|
|
194 |
export PROOFGENERAL_UNICODE_SYMBOLS="$UNICODE_SYMBOLS"
|
|
195 |
|
|
196 |
export ISABELLE_OPTIONS
|
|
197 |
|
|
198 |
# Isabelle2008 compatibility
|
|
199 |
[ -z "$ISABELLE_PROCESS" ] && export ISABELLE_PROCESS="$ISABELLE"
|
|
200 |
[ -z "$ISABELLE_TOOL" ] && export ISABELLE_TOOL="$ISATOOL"
|
|
201 |
|
|
202 |
exec "$PROGNAME" "${ARGS[@]}" "${FILES[@]}"
|
|
203 |
|