emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/proof-general 1931c8c 01/13: Remove Twelf support


From: ELPA Syncer
Subject: [nongnu] elpa/proof-general 1931c8c 01/13: Remove Twelf support
Date: Thu, 25 Nov 2021 10:57:57 -0500 (EST)

branch: elpa/proof-general
commit 1931c8c7970afc6d2b80eb966ca9d08da752e736
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Remove Twelf support
---
 Makefile              |    4 +-
 README.md             |    3 +-
 doc/ProofGeneral.texi |    9 +-
 generic/proof-site.el |    1 -
 proof-general.el      |    4 +-
 twelf/README          |   27 -
 twelf/example.elf     |   64 --
 twelf/twelf-font.el   |  444 ---------
 twelf/twelf-old.el    | 2660 -------------------------------------------------
 twelf/twelf.el        |  209 ----
 10 files changed, 14 insertions(+), 3411 deletions(-)

diff --git a/Makefile b/Makefile
index 4db14a0..b51aaef 100644
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@ PREFIX=$(DESTDIR)/usr
 DEST_PREFIX=$(DESTDIR)/usr
 
 # subdirectories for provers: to be compiled and installed
-PROVERS=acl2 ccc coq easycrypt hol-light hol98 isar lego pghaskell pgocaml 
pgshell phox twelf
+PROVERS=acl2 ccc coq easycrypt hol-light hol98 isar lego pghaskell pgocaml 
pgshell phox
 
 # generic lisp code: to be compiled and installed
 OTHER_ELISP=generic lib
@@ -58,7 +58,7 @@ ELISP_EXTRAS=
 EXTRA_DIRS = images
 
 DOC_FILES=AUTHORS BUGS COMPATIBILITY CHANGES COPYING INSTALL README REGISTER 
doc/*.pdf
-DOC_EXAMPLES=acl2/*.acl2 hol98/*.sml isar/*.thy lclam/*.lcm lego/*.l 
pgshell/*.pgsh phox/*.phx plastic/*.lf twelf/*.elf
+DOC_EXAMPLES=acl2/*.acl2 hol98/*.sml isar/*.thy lclam/*.lcm lego/*.l 
pgshell/*.pgsh phox/*.phx plastic/*.lf
 DOC_SUBDIRS=${DOC_EXAMPLES} */README* */CHANGES */BUGS 
 
 BATCHEMACS=${EMACS} --batch --no-site-file -q 
diff --git a/README.md b/README.md
index ab9da9c..558a144 100644
--- a/README.md
+++ b/README.md
@@ -140,8 +140,9 @@ instances are no longer maintained nor available in the 
MELPA package:
 * Legacy support of
   [Isabelle](https://www.cl.cam.ac.uk/research/hvg/Isabelle/) and
   [LEGO](http://www.dcs.ed.ac.uk/home/lego)
-* Experimental support of: CCC, ACL2, HOL98, Hol-Light, Lambda-Clam, Shell, 
Twelf
+* Experimental support of: CCC, ACL2, HOL98, Hol-Light, Lambda-Clam, Shell
 * Obsolete instances: Demoisa, Lambda-Clam, Plastic
+* Removed instances: Twelf
 
 A few example proofs are included in each prover subdirectory.
 
diff --git a/doc/ProofGeneral.texi b/doc/ProofGeneral.texi
index b55b12d..14bc95f 100644
--- a/doc/ProofGeneral.texi
+++ b/doc/ProofGeneral.texi
@@ -194,6 +194,7 @@ other documentation, system downloads, etc.
 
 
 @menu
+* News for Version 4.5::
 * News for Version 4.4::
 * News for Version 4.3::
 * News for Version 4.2::
@@ -203,6 +204,13 @@ other documentation, system downloads, etc.
 * Credits::                     
 @end menu
 
+@node News for Version 4.5
+@unnumberedsec News for Version 4.5
+@cindex news
+
+The old code for the support of the following systems have been
+removed: Twelf.
+
 @node News for Version 4.4
 @unnumberedsec News for Version 4.4
 @cindex news
@@ -515,7 +523,6 @@ script file for your proof assistant, for example:
 @item       HOL98         @tab @file{.sml}    @tab @code{hol98-mode}
 @item       HOL Light     @tab @file{.ml}     @tab @code{hol-light-mode}
 @item       ACL2          @tab @file{.acl2}   @tab @code{acl2-mode}
-@item       Twelf         @tab @file{.elf}    @tab @code{twelf-mode}
 @item       Plastic       @tab @file{.lf}     @tab @code{plastic-mode}
 @item       Lambda-CLAM   @tab @file{.lcm}    @tab @code{lclam-mode}
 @item       CCC           @tab @file{.ccc}    @tab @code{ccc-mode}
diff --git a/generic/proof-site.el b/generic/proof-site.el
index 74bdaea..e6dd3e3 100644
--- a/generic/proof-site.el
+++ b/generic/proof-site.el
@@ -66,7 +66,6 @@
 
       ;; (hol98        "HOL" "sml")
       ;; (acl2 "ACL2" "acl2")
-      ;; (twelf        "Twelf" "elf")
       ;; (plastic "Plastic" "lf")        ; obsolete
       ;; (lclam "Lambda-CLAM" "lcm")     ; obsolete
       ;; (demoisa "Isabelle Demo" "ML")  ; obsolete
diff --git a/proof-general.el b/proof-general.el
index 425ee60..b72509b 100644
--- a/proof-general.el
+++ b/proof-general.el
@@ -3,7 +3,7 @@
 ;; This file is part of Proof General.
 
 ;; Portions © Copyright 1994-2012  David Aspinall and University of Edinburgh
-;; Portions © Copyright 2003-2019  Free Software Foundation, Inc.
+;; Portions © Copyright 2003-2021  Free Software Foundation, Inc.
 ;; Portions © Copyright 2001-2017  Pierre Courtieu
 ;; Portions © Copyright 2010, 2016  Erik Martin-Dorel
 ;; Portions © Copyright 2011-2013, 2016-2017  Hendrik Tews
@@ -81,7 +81,7 @@
            ;; FIXME: These dirs used to not be listed, but I needed to add
            ;; them for the compilation to succeed for me.  --Stef
            ;; These dirs are now obsolete and not published on MELPA.  --Erik
-           ;; "isar" "lego" "twelf" "obsolete/plastic"
+           ;; "isar" "lego" "obsolete/plastic"
        )))
     (dolist (dir byte-compile-directories)
       (add-to-list 'load-path (expand-file-name dir pg-init--pg-root)))))
diff --git a/twelf/README b/twelf/README
deleted file mode 100644
index 2d91f55..0000000
--- a/twelf/README
+++ /dev/null
@@ -1,27 +0,0 @@
-Twelf Proof General, for Twelf.
-
-Written by David Aspinall.
-
-Status:                not officially supported yet
-Maintainer:     volunteer required
-Twelf version:  Twelf 1.2 (and later, I hope)
-Twelf homepage: http://www.twelf.org
-
-========================================
-
-
-This is a "technology demonstration" of Proof General for Twelf.
-
-It has basic script management support, with some support for
-decoration taken from the present Twelf Emacs mode.
-
-There is support for X Symbol, but not using a proper token language,
-and it seems fairly broken because Twelf's syntax highlighting
-doesn't work properly with font lock.
-
-I have written this in the hope that somebody from the Twelf community
-will adopt it, maintain and improve it, and thus turn it into a proper
-instantiation of Proof General.
-
-$Id$
-
diff --git a/twelf/example.elf b/twelf/example.elf
deleted file mode 100644
index b428173..0000000
--- a/twelf/example.elf
+++ /dev/null
@@ -1,64 +0,0 @@
-%%% 
-%%% Example script for Twelf Proof General.
-%%%
-%%% $Id$
-%%%
-
-%%% Rather than a proof this file is just a signature,
-%%% bunch of declarations.  Would be nice to have something
-%%% closer to other systems for pedagogical purposes...
-%%% (i.e. proving commutativity of conjunction in ND fragment
-%%%  of this logic)
-
-%%% Intuitionistic propositional calculus
-%%% Positive fragment with implies, and, true.
-%%% Two formulations here: natural deduction and Hilbert-style system.
-%%% Author: Frank Pfenning
-
-% Type of propositions.
-o : type.
-%name o A.
-
-% Syntax: implication, plus a few constants.
-=> : o -> o -> o.  %infix right 10 =>.
-&  : o -> o -> o.  %infix right 11 &.
-true : o.
-
-% Provability.
-|- : o -> type.    %prefix 9 |-.
-%name |- P.
-
-% Axioms.
-K : |- A => B => A.
-S : |- (A => B => C) => (A => B) => A => C.
-ONE : |- true.
-PAIR : |- A => B => A & B.
-LEFT : |- A & B => A.
-RIGHT : |- A & B => B.
-
-% Inference Rule.
-MP : |- A => B -> |- A -> |- B. 
-
-% Natural Deduction.
-
-! : o -> type.   %prefix 9 !.
-%name ! D.
-
-trueI : ! true.
-andI  : ! A -> ! B -> ! A & B.
-andEL : ! A & B -> ! A.
-andER : ! A & B -> ! B.
-impliesI : (! A -> ! B) -> ! A => B.
-impliesE : ! A => B -> ! A -> ! B.
-
-% Normal deductions (for faster search)
-!^ : o -> type.
-!v : o -> type.
-
-trueI^ : !^ true.
-andI^ : !^ A -> !^ B -> !^ (A & B).
-andEvL : !v (A & B) -> !v A.
-andEvR : !v (A & B) -> !v B.
-impI^ : (!v A -> !^ B) -> !^ (A => B).
-impEv : !v (A => B) -> !^ A -> !v B.
-close : !v A -> !^ A.
diff --git a/twelf/twelf-font.el b/twelf/twelf-font.el
deleted file mode 100644
index 44e5468..0000000
--- a/twelf/twelf-font.el
+++ /dev/null
@@ -1,444 +0,0 @@
-;; twelf-font.el  Font lock configuration for Twelf
-;;
-;; Author: Frank Pfenning
-;;        Taken from Twelf's emacs mode and
-;;        adapted for Proof General by David Aspinall <David.Aspinall@ed.ac.uk>
-;;
-;; $Id$
-;;
-;;
-
-(require 'font-lock)
-
-;; FIXME da: integrate with PG's face mechanism?
-;; (but maybe keep twelf faces to help users)
-;; Also should add font locking.
-
-;; FIXME da: the twelf faces don't work with PG's
-;; background colouring, why?
-
-
-;; modify the syntax table so _ and ' are word constituents
-;; otherwise the regexp's for identifiers become very complicated
-;; FIXME: fn undef'd(set-word ?\_)
-;; FIXME: fn (set-word ?\')
-
-;; setting faces here...
-;; use devices to improve portability?
-;; make it dependent on light background vs dark background
-;; tie in X resources?
-
-(defun twelf-font-create-face (face from-face color)
-  "Creates a Twelf font from FROM-FACE with COLOR."
-  (make-face face)
-  ;(reset-face face)                   ; seems to be necessary, but why?
-  (copy-face from-face face)
-  (if color (set-face-foreground face color)))
-
-(defvar twelf-font-dark-background nil
-  "*T if the background of Emacs is to be considered dark.")
-
-;; currently we not using bold or italics---some font families
-;; work poorly with that kind of face.
-(cond (twelf-font-dark-background
-       (twelf-font-create-face 'twelf-font-keyword-face 'default nil)
-       (twelf-font-create-face 'twelf-font-comment-face 'font-lock-comment-face
-                            nil)
-       (twelf-font-create-face 'twelf-font-percent-key-face 'default "Plum")
-       (twelf-font-create-face 'twelf-font-decl-face 'default "Orange")
-       (twelf-font-create-face 'twelf-font-parm-face 'default "Orange")
-       (twelf-font-create-face 'twelf-font-fvar-face 'default "SpringGreen")
-       (twelf-font-create-face 'twelf-font-evar-face 'default "Aquamarine"))
-      (t
-       (twelf-font-create-face 'twelf-font-keyword-face 'default nil)
-       (twelf-font-create-face 'twelf-font-comment-face 'font-lock-comment-face
-                            nil)
-       (twelf-font-create-face 'twelf-font-percent-key-face 'default 
"MediumPurple")
-       (twelf-font-create-face 'twelf-font-decl-face 'default "FireBrick")
-       (twelf-font-create-face 'twelf-font-parm-face 'default "Green4")
-       (twelf-font-create-face 'twelf-font-fvar-face 'default "Blue1")
-       (twelf-font-create-face 'twelf-font-evar-face 'default "Blue4")))
-
-;; Note that the order matters!
-
-(defvar twelf-font-patterns
- '(
-   ;; delimited comments, perhaps should use different font
-   ;;("%{" "}%" comment)
-   (twelf-font-find-delimited-comment . twelf-font-comment-face)
-   ;; single-line comments
-   ;; replace \\W by \\s- for whitespace?
-   ("%\\W.*$" 0 twelf-font-comment-face)
-   ;; %keyword declarations
-   
("\\(%infix\\|%prefix\\|%prefix\\|%postfix\\|%name\\|%solve\\|%query\\|%mode\\|%terminates\\|%theorem\\|%prove\\).*$"
-    1 twelf-font-percent-key-face nil)
-   ;; keywords, omit punctuations for now.
-   ("\\(\\<<-\\>\\|\\<->\\>\\|\\<type\\>\\|\\<=\\>\\|\\<_\\>\\)"
-    ;; for LLF, no punctuation marks
-;;"\\(\\<<-\\>\\|\\<->\\>\\|\\<o-\\>\\|\\<-o\\>\\|\\<<T>\\>\\|\\<&\\>\\|\\^\\|()\\|\\<type\\>\\|\\<sigma\\>\\)"
-    ;; for LLF, with punctuation marks
-    
;;"\\([][:.(){},]\\|\\<<-\\>\\|\\<->\\>\\|\\<o-\\>\\|\\<-o\\>\\|\\<<T>\\>\\|\\<&\\>\\|\\^\\|()\\|\\<type\\>\\|\\<sigma\\>\\)"
-    ;; for Elf, no punction marks
-    ;;"\\(\\<<-\\>\\|\\<->\\>\\|\\<type\\>\\|\\<sigma\\>\\)"
-    ;; for Elf, including punctuation marks
-    ;;"\\([][:.(){}]\\|\\<<-\\>\\|\\<->\\>\\|\\<type\\>\\|\\<sigma\\>\\)"
-   . twelf-font-keyword-face)
-   ;; declared constants
-   (twelf-font-find-decl . twelf-font-decl-face)
-   ;; parameters
-   (twelf-font-find-parm . twelf-font-parm-face)
-   ;; quantified existentials
-   (twelf-font-find-evar . twelf-font-evar-face)
-   ;; lower-case identifiers (almost = constants)
-   ;;("\\<\\([a-z!&$^+/<=>?@~|#*`;,]\\|\\-\\|\\\\\\)\\w*\\>"
-   ;; nil black)
-   ;; upper-case identifiers (almost = variables)
-   ("\\<[A-Z_]\\w*\\>" . twelf-font-fvar-face)
-   ;; numbers and quoted identifiers omitted for now
-   )
- "Highlighting patterns for Twelf mode.
-This generally follows the syntax of the FONT-LOCK-KEYWORDS variable,
-but allows an arbitrary function to be called instead of just
-regular expressions."
- )
-
-(defun twelf-font-fontify-decl  ()
-  "Fontifies the current Twelf declaration."
-  (interactive)
-  (let* ((region (twelf-current-decl))
-        (start (nth 0 region))
-        (end (nth 1 region)))
-    (save-excursion
-      (font-lock-unfontify-region start end)
-      (twelf-font-fontify-region start end))))
-
-(defun twelf-font-fontify-buffer ()
-  "Fontitifies the current buffer as Twelf code."
-  (interactive)
-  (save-excursion
-    (font-lock-unfontify-region (point-min) (point-max)) ; t optional in XEmacs
-    (twelf-font-fontify-region (point-min) (point-max))))
-
-(defun twelf-font-unfontify ()
-  "Removes fontification from current buffer."
-  (interactive)
-  (font-lock-unfontify-region (point-min) (point-max)))        ; t optional in 
XEmacs
-
-(defvar font-lock-message-threshold 6000) ; in case we are running FSF Emacs
-
-(defun twelf-font-fontify-region (start end)
-  "Go through TWELF-FONT-PATTERNS, fontifying according to given functions"
-  (save-restriction
-    (narrow-to-region start end)
-    (if (and font-lock-verbose
-            (>= (- end start) font-lock-message-threshold))
-       (message "Fontifying %s... (semantically...)" (buffer-name)))
-    (let ((patterns twelf-font-patterns)
-         (case-fold-search nil)        ; in Twelf, never case-fold
-         (modified (buffer-modified-p)) ; for FSF Emacs 19
-         pattern
-         fun-or-regexp
-         instructions
-         face
-         match-index
-         allow-overlap-p
-         region)
-      (while patterns
-       (setq pattern (car patterns))
-       (setq patterns (cdr patterns))
-       (goto-char start)
-       (cond ((stringp pattern)
-              (setq match-index 0)
-              (setq face 'font-lock-keyword-face)
-              (setq allow-overlap-p nil))
-             ((listp pattern)
-              (setq fun-or-regexp (car pattern))
-              (setq instructions (cdr pattern))
-              (cond ((integerp instructions)
-                     (setq match-index instructions)
-                     (setq face 'font-lock-keyword-face)
-                     (setq allow-overlap-p nil))
-                    ((symbolp instructions)
-                     (setq match-index 0)
-                     (setq face instructions)
-                     (setq allow-overlap-p nil))
-                    ((listp instructions)
-                     (setq match-index (nth 0 instructions))
-                     (setq face (nth 1 instructions))
-                     (setq allow-overlap-p (nth 2 instructions)))
-                    (t (error "Illegal font-lock-keyword instructions"))))
-             (t (error "Illegal font-lock-keyword instructions")))
-       (cond ((symbolp fun-or-regexp)  ; a function to call
-              (while
-                  (setq region (funcall fun-or-regexp end))
-                ;; END is limit of forward search, start at point
-                ;; and move point
-                ;; check whether overlap is permissible!
-                (twelf-font-highlight (car region) (cdr region)
-                                    face allow-overlap-p)))
-             ((stringp fun-or-regexp)  ; a pattern to find
-              (while
-                  (re-search-forward fun-or-regexp end t)
-                (goto-char (match-end match-index)) ; back-to-back font hack
-                (twelf-font-highlight (match-beginning match-index)
-                                    (match-end match-index)
-                                    face
-                                    allow-overlap-p)))
-             (t (error "Illegal font-lock-keyword instructions"))))
-      ;; For FSF Emacs 19: mark buffer not modified, if it wasn't before
-      ;; fontification.
-      (and (not modified) (buffer-modified-p) (set-buffer-modified-p nil))
-      (if (and font-lock-verbose
-              (>= (- end start) font-lock-message-threshold))
-         (message "Fontifying %s... done" (buffer-name))))))
-
-(defun twelf-font-highlight (start end face allow-overlap-p)
-  "Highlight region between START and END with FONT.
-If already highlighted and ALLOW-OVERLAP-P is nil, don't highlight."
-  (or (= start end)
-      ;;(if allow-overlap-p nil (font-lock-any-faces-p start (1- end)))
-      ;; different in XEmacs 19.16?  font-lock-any-faces-p subtracts 1.
-      (if allow-overlap-p nil (font-lock-any-faces-p start end))
-      (font-lock-set-face start end face)))
-
-(defun twelf-font-find-delimited-comment (limit)
-  "Find a delimited Twelf comment and return (START . END), nil if none."
-  (let ((comment-level nil)
-       (comment-start nil))
-    (if (search-forward "%{" limit t)
-       (progn
-         (setq comment-start (- (point) 2))
-         (setq comment-level 1)
-         (while (and (> comment-level 0)
-                     (re-search-forward "\\(%{\\)\\|\\(}%\\)"
-                                        limit 'limit))
-           (cond
-            ((match-beginning 1) (setq comment-level (1+ comment-level)))
-            ((match-beginning 2) (setq comment-level (1- comment-level)))))
-         (cons comment-start (point)))
-      nil)))
-
-;; doesn't work yet with LIMIT!!!
-;; this should never be done in incremental-highlighting mode
-(defun twelf-font-find-decl (limit)
-  "Find an Twelf constant declaration and return (START . END), nil if none."
-  (let (start
-       end
-       ;; Turn off error messages
-       (id (twelf-next-decl nil nil)))
-    ;; ignore limit for now because of global buffer restriction
-    (if (null id) ; (or (null id) (> (point) limit))
-       nil
-      (skip-chars-backward *whitespace*)
-      (setq end (point))
-      (beginning-of-line 1)
-      (setq start (point))
-      (twelf-end-of-par)
-      (cons start end))))
-
-(defun twelf-font-find-binder (var-pattern limit occ-face)
-  "Find Twelf binder whose bound variable matches var-pattern.
-Returns (START . END) if found, NIL if there is none before LIMIT.
-Binders have the form [x],[x:A],{y},{y:A}.
-As a side-effect, it highlights all occurrences of the bound
-variable using the variable OCC-FACE."
-  (let (start
-       end
-       par-end
-       scope-start
-       scope-end
-       word
-       (found nil))
-    ;;; At the moment, ignore limit since restriction is done globally
-    ;; (save-restriction
-    ;; (narrow-to-region (point) limit)
-      (while (not found)
-       (skip-chars-forward "^[{%")
-       (while (looking-at *twelf-comment-start*)
-         (cond ((looking-at "%{")
-                (condition-case nil (forward-sexp 1)
-                  (error (goto-char (point-max))))
-                (or (eobp) (forward-char 1)))
-               (t
-                (end-of-line 1)))
-         (skip-chars-forward "^[{%"))
-       (if (eobp)
-           (setq found 'eob)
-         (forward-char 1)
-         (skip-chars-forward *whitespace*)
-         (if (looking-at var-pattern)
-             ;;"\\<\\w+\\>"
-             ;;"\\<[-a-z!&$^+/\\<=>?@~|#*`;,]\\w*\\>"
-             (setq found t))))
-      (if (eq found 'eob)
-         nil
-       (setq start (match-beginning 0))
-       (setq end (match-end 0))
-       (setq word (buffer-substring start end))
-       ;; find scope of quantifier
-       (twelf-end-of-par)
-       (setq par-end (point))
-       (goto-char end)
-       (condition-case nil (up-list 1) ; end of quantifier
-         (error (goto-char par-end)))
-       (setq scope-start (min (point) par-end))
-       (condition-case nil (up-list 1) ; end of scope
-         (error (goto-char par-end)))
-       (setq scope-end (min (point) par-end))
-       (goto-char scope-start)
-       (while
-           ;; speed here???
-           (search-forward-regexp (concat "\\<" (regexp-quote word) "\\>")
-                                  scope-end 'limit)
-         ;; Check overlap here!!! --- current bug if in comment
-         (font-lock-set-face (match-beginning 0) (match-end 0)
-                             occ-face))
-       (goto-char end)
-       (cons start end)))
-  ;;)
-  )
-
-(defun twelf-font-find-parm (limit)
-  "Find bound Twelf parameters and return (START . END), NIL if none.
-Also highlights all occurrences of the parameter.
-For these purposes, a parameter is a bound, lower-case identifier."
-  (twelf-font-find-binder "\\<[-a-z!&$^+/\\<=>?@~|#*`;,]\\w*\\>"
-                       limit 'twelf-font-parm-face))
-
-(defun twelf-font-find-evar (limit)
-  "Find bound Twelf existential variable return (START . END), NIL if none.
-Also highlights all occurrences of the existential variable.
-For these purposes, an existential variable is a bound, upper-case identifier."
-  (twelf-font-find-binder "\\<[A-Z_]\\w*\\>"
-                       limit 'twelf-font-evar-face))
-
-; next two are now in twelf.el
-;(define-key twelf-mode-map "\C-c\C-l" 'twelf-font-fontify-decl)
-;(define-key twelf-mode-map "\C-cl" 'twelf-font-fontify-buffer)
-
-
-;;;
-;;;
-;;; This comes from twelf-old.el but is needed for fontification,
-;;;
-;;; Perhaps some of these parsing functions will need reusing
-;;; for sending input to server properly?
-;;;
-
-;;; FIXME: some of names need fixing for safe conventions.
-
-(defun twelf-current-decl ()
-  "Returns list (START END COMPLETE) for current Twelf declaration.
-This should be the declaration or query under or just before
-point within the nearest enclosing blank lines.
-If declaration ends in `.' then COMPLETE is t, otherwise nil."
-  (let (par-start par-end complete)
-    (save-excursion
-      ;; Skip backwards if between declarations
-      (if (or (eobp) (looking-at (concat "[" *whitespace* "]")))
-         (skip-chars-backward (concat *whitespace* ".")))
-      (setq par-end (point))
-      ;; Move forward from beginning of decl until last
-      ;; declaration before par-end is found.
-      (if (not (bobp)) (backward-paragraph 1))
-      (setq par-start (point))
-      (while (and (twelf-end-of-par par-end)
-                 (< (point) par-end))
-       (setq par-start (point)))
-      ;; Now par-start is at end of preceding declaration or query.
-      (goto-char par-start)
-      (skip-twelf-comments-and-whitespace)
-      (setq par-start (point))
-      ;; Skip to period or consective blank lines
-      (setq complete (twelf-end-of-par))
-      (setq par-end (point)))
-    (list par-start par-end complete)))
-
-(defun twelf-next-decl (filename error-buffer)
-  "Set point after the identifier of the next declaration.
-Return the declared identifier or `nil' if none was found.
-FILENAME and ERROR-BUFFER are used if something appears wrong."
-  (let ((id nil)
-       end-of-id
-       beg-of-id)
-    (skip-twelf-comments-and-whitespace)
-    (while (and (not id) (not (eobp)))
-      (setq beg-of-id (point))
-      (if (zerop (skip-chars-forward *twelf-id-chars*))
-         ;; Not looking at id: skip ahead
-         (skip-ahead filename (current-line-absolute) "No identifier"
-                     error-buffer)
-       (setq end-of-id (point))
-       (skip-twelf-comments-and-whitespace)
-       (if (not (looking-at ":"))
-           ;; Not looking at valid decl: skip ahead
-           (skip-ahead filename (current-line-absolute end-of-id) "No colon"
-                       error-buffer)
-         (goto-char end-of-id)
-         (setq id (buffer-substring beg-of-id end-of-id))))
-      (skip-twelf-comments-and-whitespace))
-    id))
-
-(defconst *whitespace* " \t\n\f"
-  "Whitespace characters to be skipped by various operations.")
-
-(defconst *twelf-comment-start* (concat "%[%{" *whitespace* "]")
-  "Regular expression to match the start of a Twelf comment.")
-
-(defconst *twelf-id-chars* "a-z!&$^+/<=>?@~|#*`;,\\-\\\\A-Z_0-9'"
-  "Characters that constitute Twelf identifiers.")
-
-(defun skip-twelf-comments-and-whitespace ()
-  "Skip Twelf comments (single-line or balanced delimited) and white space."
-  (skip-chars-forward *whitespace*)
-  (while (looking-at *twelf-comment-start*)
-    (cond ((looking-at "%{")           ; delimited comment
-          (condition-case nil (forward-sexp 1)
-            (error (goto-char (point-max))))
-          (or (eobp) (forward-char 1)))
-         (t                            ; single-line comment
-          (end-of-line 1)))
-    (skip-chars-forward *whitespace*)))
-
-(defun twelf-end-of-par (&optional limit)
-  "Skip to presumed end of current Twelf declaration.
-Moves to next period or blank line (whichever comes first)
-and returns t if period is found, nil otherwise.
-Skips over comments (single-line or balanced delimited).
-Optional argument LIMIT specifies limit of search for period."
-  (if (not limit)
-      (save-excursion
-       (forward-paragraph 1)
-       (setq limit (point))))
-  (while (and (not (looking-at "\\."))
-             (< (point) limit))
-    (skip-chars-forward "^.%" limit)
-    (cond ((looking-at *twelf-comment-start*)
-          (skip-twelf-comments-and-whitespace))
-         ((looking-at "%")
-          (forward-char 1))))
-  (cond ((looking-at "\\.")
-        (forward-char 1)
-        t)
-       (t ;; stopped at limit
-        nil)))
-
-(defun skip-ahead (filename line message error-buffer)
-  "Skip ahead when syntactic error was found.
-A parsable error message constited from FILENAME, LINE, and MESSAGE is
-deposited in ERROR-BUFFER."
-  (if error-buffer
-      (save-excursion
-       (set-buffer error-buffer)
-       (goto-char (point-max))
-       (insert filename ":" (int-to-string line) " Warning: " message "\n")
-       (setq *twelf-error-pos* (point))))
-  (twelf-end-of-par))
-
-(defun current-line-absolute (&optional char-pos)
-  "Return line number of CHAR-POS (default: point) in current buffer.
-Ignores any possible buffer restrictions."
-  (1+ (count-lines 1 (or char-pos (point)))))
-
-
-(provide 'twelf-font)
diff --git a/twelf/twelf-old.el b/twelf/twelf-old.el
deleted file mode 100644
index 62763ba..0000000
--- a/twelf/twelf-old.el
+++ /dev/null
@@ -1,2660 +0,0 @@
-;; twelf-old.el  Port of old Twelf Emacs mode
-;;
-;; Author: Frank Pfenning
-;;        Adapted for Proof General by David Aspinall <David.Aspinall@ed.ac.uk>
-;;
-;; $Id$
-;;
-;;
-
-;; FIXME: have copied over directly!
-
-;;; Modes and utilities for Twelf programming.  This package supports (1)
-;;; editing Twelf source files with reasonable indentation, (2) managing
-;;; configurations of Twelf source files, including TAGS tables, (3)
-;;; communication with an inferior Twelf server to type-check and execute
-;;; declarations and queries, (4) interaction with an inferior Twelf process
-;;; in SML.
-;;;
-;;; For documentation, type C-h m in Twelf mode, or see the function
-;;; twelf-mode below
-;;;
-;;; Author: Frank Pfenning
-;;; Thu Oct 7 19:48:50 1993 (1.0 created)
-;;; Fri Jan 6 09:06:38 1995 (2.0 major revision)
-;;; Tue Jun 16 15:49:31 1998 (3.0 major revision)
-;;;
-;;;======================================================================
-;;; For the `.emacs' file (copied from init.el)
-;;;======================================================================
-;;;
-;;; ;; Tell Emacs where the Twelf libraries are.
-;;; (setq load-path
-;;;       (cons "/afs/cs/project/twelf/research/twelf/emacs" load-path))
-;;;
-;;; ;; Autoload libraries when Twelf-related major modes are started.
-;;; (autoload 'twelf-mode "twelf" "Major mode for editing Twelf source." t)
-;;; (autoload 'twelf-server "twelf" "Run an inferior Twelf server." t)
-;;; (autoload 'twelf-sml "twelf" "Run an inferior Twelf-SML process." t)
-;;;
-;;; ;; Switch buffers to Twelf mode based on filename extension,
-;;; ;; which is one of .elf, .quy, .thm, or .cfg.
-;;; (setq auto-mode-alist
-;;;       (cons '("\\.elf$" . twelf-mode)
-;;;        (cons '("\\.quy$" . twelf-mode)
-;;;              (cons '("\\.thm$" . twelf-mode)
-;;;                    (cons '("\\.cfg$" . twelf-mode)
-;;;                          auto-mode-alist)))))
-;;;
-;;; ;; Default Twelf server program location
-;;; (setq twelf-server-program
-;;;       "/afs/cs/project/twelf/research/twelf/bin/twelf-server")
-;;;
-;;; ;; Default Twelf SML program location
-;;; (setq twelf-sml-program
-;;;       "/afs/cs/project/twelf/misc/smlnj/bin/sml-cm")
-;;;
-;;; ;; Default documentation location (in info format)
-;;; (setq twelf-info-file
-;;;       "/afs/cs/project/twelf/research/twelf/doc/info/twelf.info")
-;;;
-;;; ;; Automatically highlight Twelf sources using font-lock
-;;; (add-hook 'twelf-mode-hook 'twelf-font-fontify-buffer)
-;;;
-;;;======================================================================
-;;; Command Summary
-;;;======================================================================
-;;;
-;;; Quick summary of Twelf mode, generated from C-h b:
-;;;
-;;; --- Editing Commands ---
-;;; TAB          twelf-indent-line
-;;; DEL          backward-delete-char-untabify
-;;; M-C-q        twelf-indent-decl
-;;;
-;;; --- Type Checking ---
-;;; C-c C-c      twelf-save-check-config
-;;; C-c C-s      twelf-save-check-file
-;;; C-c C-d      twelf-check-declaration
-;;; C-c c        twelf-type-const
-;;; C-c C-u      twelf-server-display
-;;;
-;;; --- Error Tracking ---
-;;; C-c `        twelf-next-error
-;;; C-c =        twelf-goto-error
-;;;
-;;; --- Syntax Highlighting ---
-;;; C-c C-l      twelf-font-fontify-decl
-;;; C-c l        twelf-font-fontify-buffer
-;;;
-;;; --- Server State ---
-;;; C-c <        twelf-set
-;;; C-c >        twelf-get
-;;; C-c C-i      twelf-server-interrupt
-;;; M-x twelf-server
-;;; M-x twelf-server-configure
-;;; M-x twelf-server-quit
-;;; M-x twelf-server-restart
-;;; M-x twelf-server-send-command
-;;;
-;;; --- Timers ---
-;;; M-x twelf-timers-reset
-;;; M-x twelf-timers-show
-;;; M-x twelf-timers-check
-;;;
-;;; --- Tags (standard Emacs etags package) ---
-;;; M-x twelf-tag
-;;; M-.          find-tag (standard binding)
-;;; C-x 4 .      find-tag-other-window (standard binding)
-;;; C-c q        tags-query-replace (Twelf mode binding)
-;;; C-c s        tags-search (Twelf mode binding)
-;;; M-,          tags-loop-continue (standard binding)
-;;;              visit-tags-table, list-tags, tags-apropos
-;;;
-;;; --- Communication with inferior Twelf-SML process (not Twelf Server) ---
-;;; M-x twelf-sml
-;;; C-c C-e      twelf-sml-send-query
-;;; C-c C-r      twelf-sml-send-region
-;;; C-c RET      twelf-sml-send-newline
-;;; C-c ;        twelf-sml-send-semicolon
-;;; C-c d        twelf-sml-cd
-;;; M-x twelf-sml-quit
-;;;
-;;; --- Variables ---
-;;; twelf-indent        amount of indentation for nested Twelf expressions
-;;;
-;;;======================================================================
-;;; Some Terminology
-;;;======================================================================
-;;;
-;;; Twelf Server --- an inferior process that services requests to type-check,
-;;; load, or execute declarations and queries.  It is usually attached to the
-;;; buffer *twelf-server*.  Requests are generated by Emacs from user commands,
-;;; or may be typed directly into the Twelf server buffer.
-;;;
-;;; Current configuration --- A configuration is an ordered list of
-;;; Twelf source files in dependency order.  It is usually initialized
-;;; and maintained in a file sources.cfg.  The current configuration is
-;;; also the bases for the TAGS file created by twelf-tags.  This allows
-;;; quick jumping to declaration sites for constants, or to apply
-;;; searches or replacements to all files in a configuration.
-;;;
-;;; Current Twelf declaration --- When checking individual declarations
-;;; Emacs must extract it from the current buffer and then send it to
-;;; the server.  This is necessarily based on a heuristic, since Emacs
-;;; does not know enough in order to parse Twelf source properly in all
-;;; cases, but it knows the syntax for comments, Twelf identifiers, and
-;;; matching delimiters.  Search for the end or beginning of a
-;;; declaration is always limited by double blank lines in order to be
-;;; more robust (in case a period is missing at the end of a
-;;; declaration).  If the point falls between declarations, the
-;;; declaration after the point is considered current.
-;;;
-;;; Twelf-SML --- During development or debugging of the Twelf
-;;; implementation itself it is often useful to interact with SML, the
-;;; language in which Twelf is implementated, rather than using an Twelf
-;;; server.  This is an inferior SML process which may run a Twelf
-;;; query interpreter.
-;;;
-;;;======================================================================
-;;; Change Log
-;;;======================================================================
-;;;
-;;; Thu Jun  3 14:51:35 1993 -fp
-;;; Added variable display-elf-queries.  If T (default) redisplays Elf
-;;; buffer after a query has been sent.  Delays one second after sending
-;;; the query which is rather arbitrary.
-;;; Wed Jun 30 19:57:58 1993
-;;; - Error messages in the format line0.col0-line1.col1 can now be parsed.
-;;; - Error from std_in, either interactive or through elf-send-query
-;;;   can now be tracked.
-;;; - Added simple directory tracking and function elf-cd, bound to C-c d.
-;;; - improved filename completion in Elf mode under Lucid Emacs.
-;;; - replaced tail recursion in elf-indent-line by a while loop.
-;;; - changed elf-input-filter to ignore one character inputs.
-;;; - elf-error-marker is now updated on every interactive input or send.
-;;; - added commands elf-send-newline, bound to C-c RET
-;;;   and elf-send-semicolon, bound to C-c ;.
-;;;   These are useful when sending queries from a buffer with examples.
-;;; Fri Sep  3 15:02:10 1993
-;;; Changed definition of elf-current-paragraph so that it recognizes
-;;; individual declarations within a traditional ``paragraph'' (separated
-;;; by blank lines).
-;;; Fri Oct 22 10:05:08 1993
-;;; Changed elf-send-query to ensure that the Elf process expects a query
-;;; If the Elf process is at the SML prompt, it starts a top level.
-;;; If the Elf process is waiting after printing an answer substitution,
-;;; it sends a RET.
-;;; This is based on a heuristic analysis of the contents of the Elf buffer.
-;;; Fri Dec 16 15:27:14 1994
-;;; Changed elf-error-marker to elf-error-pos, since it moved in undesirable
-;;; ways in Emacs 19.
-;;; Fri Jan  6 09:06:54 1995
-;;; Major revision: incorporating elf-server.el and elf-tag.el
-;;; Thu Jan 12 14:31:36 1995
-;;; Finished major revision (version 2.0)
-;;; Sat Jun 13 12:14:34 1998
-;;; Renamed to Twelf and incorporated menus from elf-menu.el
-;;; Major revision for Twelf 1.2 release
-;;; Q: Improve tagging for %keyword declarations?
-;;; Thu Jun 25 08:52:41 1998
-;;; Finished major revision (version 3.0)
-;;; Fri Oct  2 11:06:15 1998
-;;; Added NT Emacs bug workaround
-
-(require 'comint)
-(require 'easymenu)
-
-;;;----------------------------------------------------------------------
-;;; User visible variables
-;;;----------------------------------------------------------------------
-
-(defvar twelf-indent 3
-  "*Indent for Twelf expressions.")
-
-(defvar twelf-infix-regexp ":\\|\\<->\\>\\|\\<<-\\>\\|\\<=\\>"
-  "*Regular expression to match Twelf infix operators.
-Match must exclude surrounding whitespace.  This is used for indentation.")
-
-(defvar twelf-server-program "twelf-server"
-  "*Default Twelf server program.")
-
-(defvar twelf-info-file "twelf.info"
-  "*Default info file for Twelf.")
-
-(defvar twelf-server-display-commands nil
-  "*If non-nil, the Twelf server buffer will be displayed after each command.
-Normally, the Twelf server buffer is displayed only after some selected
-commands or if a command is given a prefix argument.")
-
-(defvar twelf-highlight-range-function 'twelf-highlight-range-zmacs
-  "*Function which highlights the range analyzed by the server.
-This is called for certain commands which apply to a subterm at point.
-You may want to change this for FSF Emacs, XEmacs and/or highlight packages.")
-
-(defvar twelf-focus-function 'twelf-focus-noop
-  "*Function which focusses on the current declaration or query.
-This is called for certain commands which pick out (a part of) a declaration
-or query.  You may want to change this for FSF Emacs, XEmacs and/or highlight
-packages.")
-
-(defvar twelf-server-echo-commands t
-  "*If nil, Twelf server commands will not be echoed in the Twelf server 
buffer.")
-
-(defvar twelf-save-silently nil
-  "*If non-nil, modified buffers are saved without confirmation
-before `twelf-check-config' if they belong to the current configuration.")
-
-(defvar twelf-server-timeout 5
-  "*Number of seconds before the server is considered delinquent.
-This is unsupported in some versions of Emacs.")
-
-(defvar twelf-sml-program "twelf-sml"
-  "*Default Twelf-SML program.")
-
-(defvar twelf-sml-args '()
-  "*Arguments to Twelf-SML program.")
-
-(defvar twelf-sml-display-queries t
-  "*If nil, the Twelf-SML buffer will not be selected after a query.")
-
-(defvar twelf-mode-hook '()
-  "List of hook functions to run when switching to Twelf mode.")
-
-(defvar twelf-server-mode-hook '()
-  "List of hook functions to run when switching to Twelf Server mode.")
-
-(defvar twelf-config-mode-hook '()
-  "List of hook functions to run when switching to Twelf Config minor mode.")
-
-(defvar twelf-sml-mode-hook '()
-  "List of hook functions for Twelf-SML mode.")
-
-(defvar twelf-to-twelf-sml-mode '()
-  "List of hook functions for 2Twelf-SML minor mode.")
-
-(defvar twelf-config-mode nil
-  "Non-NIL means the Twelf Config minor mode is in effect.")
-
-;;;----------------------------------------------------------------------
-;;; Internal variables
-;;;----------------------------------------------------------------------
-
-(defvar *twelf-server-buffer-name* "*twelf-server*"
-  "The default name for the Twelf server buffer.")
-
-(defvar *twelf-server-buffer* nil
-  "The buffer with the Twelf server if one exists.")
-
-(defvar *twelf-server-process-name* "twelf-server"
-  "Name of the Twelf server process.")
-
-(defvar *twelf-config-buffer* nil
-  "The current Twelf configuration buffer if one exists.")
-
-(defvar *twelf-config-time* nil
-  "The modification time of Twelf configuration file when read by the server.")
-
-(defvar *twelf-config-list* nil
-  "The reversely ordered list with files in the current Twelf configuration.")
-
-(defvar *twelf-server-last-process-mark* 0
-  "The process mark before the last command in the Twelf server buffer.")
-
-(defvar *twelf-last-region-sent* nil
-  "Contains a list (BUFFER START END) identifying the last region sent
-to the Twelf server or Twelf-SML process for error tracking.
-If nil, then the last input was interactive.
-If t, then the last input was interactive, but has already been copied
-to the end of the Twelf-SML buffer.")
-
-(defvar *twelf-last-input-buffer* nil
-  "Last buffer to which input was sent.
-This is used by the error message parser.")
-
-(defvar *twelf-error-pos* 0
-  "Last error position in the server buffer.")
-
-(defconst *twelf-read-functions*
-  '((nat . twelf-read-nat)
-    (bool . twelf-read-bool)
-    (limit . twelf-read-limit)
-    (strategy . twelf-read-strategy))
-  "Association between Twelf parameter types and their Emacs read functions.")
-
-(defconst *twelf-parm-table*
-  '(("chatter" . nat)
-    ("doubleCheck" . bool)
-    ("Print.implicit" . bool)
-    ("Print.depth" . limit)
-    ("Print.length" . limit)
-    ("Print.indent" . nat)
-    ("Print.width" . nat)
-    ("Prover.strategy" . strategy)
-    ("Prover.maxSplit" . nat)
-    ("Prover.maxRecurse" . nat))
-  "Association between Twelf parameters and their types.")
-
-(defvar twelf-chatter 3
-  "Chatter level in current Twelf server.
-Maintained to present reasonable menus.")
-
-;(defvar twelf-trace 0
-;  "Trace level in current Twelf server.
-;Maintained to present reasonable menus.")
-
-(defvar twelf-double-check "false"
-  "Current value of doubleCheck Twelf parameter.")
-
-(defvar twelf-print-implicit "false"
-  "Current value of Print.implicit Twelf parameter.")
-
-(defconst *twelf-track-parms*
-  '(("chatter" . twelf-chatter)
-    ;("trace" . twelf-trace)
-    ("doubleCheck" . twelf-double-check)
-    ("Print.implicit" . twelf-print-implicit))
-  "Association between Twelf parameters and Emacs tracking variables.")
-
-;;;----------------------------------------------------------------------
-;;; Basic key bindings
-;;;----------------------------------------------------------------------
-
-(defun install-basic-twelf-keybindings (map)
-  "General key bindings for Twelf and Twelf Server modes."
-  ;; Additional tag keybindings
-  (define-key map "\C-cq" 'tags-query-replace)
-  (define-key map "\C-cs" 'tags-search)
-  ;; Server state
-  (define-key map "\C-c<" 'twelf-set)
-  (define-key map "\C-c>" 'twelf-get)
-  ;; Error handling
-  (define-key map "\C-c`" 'twelf-next-error)
-  (define-key map "\C-c=" 'twelf-goto-error)
-  ;; Proper indentation
-  (define-key map "\e\C-q" 'twelf-indent-decl)
-  (define-key map "\t" 'twelf-indent-line)
-  (define-key map "\177" 'backward-delete-char-untabify)
-  ;; Info documentation
-  (define-key map "\C-c\C-h" 'twelf-info)
-  )
-
-;;;----------------------------------------------------------------------
-;;; Twelf mode
-;;; This mode should be used for files with Twelf declarations,
-;;; usually *.elf, *.quy, or *.thm, and Twelf configuration files *.cfg
-;;;----------------------------------------------------------------------
-
-(defun install-twelf-keybindings (map)
-  "Install the key bindings for the Twelf mode."
-  (define-key map "\C-cl" 'twelf-font-fontify-buffer) ;autoload twelf-font
-  (define-key map "\C-c\C-l" 'twelf-font-fontify-decl) ;autoload twelf-font
-  (define-key map "\C-c\C-i" 'twelf-server-interrupt)
-  (define-key map "\C-c\C-u" 'twelf-server-display)
-  (define-key map "\C-cc" 'twelf-type-const)
-  ;(define-key map "\C-ce" 'twelf-expected-type-at-point)
-  ;(define-key map "\C-cp" 'twelf-type-at-point)
-  ;(define-key map "\C-c." 'twelf-complete)
-  ;(define-key map "\C-c?" 'twelf-completions-at-point)
-  (define-key map "\C-c\C-d" 'twelf-check-declaration)
-  (define-key map "\C-c\C-s" 'twelf-save-check-file)
-  (define-key map "\C-c\C-c" 'twelf-save-check-config)
-  )
-
-(defvar twelf-mode-map nil
-  "The keymap used in Twelf mode.")
-
-(cond ((not twelf-mode-map)
-       (setq twelf-mode-map (make-sparse-keymap))
-       (install-basic-twelf-keybindings twelf-mode-map)
-       (install-twelf-keybindings twelf-mode-map)))
-
-;;;----------------------------------------------------------------------
-;;; General editing and indentation
-;;;----------------------------------------------------------------------
-
-(defvar twelf-mode-syntax-table nil
-  "The syntax table used in Twelf mode.")
-
-(defun set-twelf-syntax (char entry)
-  (modify-syntax-entry char entry twelf-mode-syntax-table))
-(defun set-word (char) (set-twelf-syntax char "w   "))
-(defun set-symbol (char) (set-twelf-syntax char "_   "))
-
-(defun map-string (func string)
-  (if (string= "" string)
-      ()
-    (funcall func (string-to-char string))
-    (map-string func (substring string 1))))
-
-(if twelf-mode-syntax-table
-    ()
-  (setq twelf-mode-syntax-table (make-syntax-table))
-  ;; A-Z and a-z are already word constituents
-  ;; For fontification, it would be better if _ and ' were word constituents
-  (map-string 'set-word "!&$^+/<=>?@~|#*`;,-0123456789\\") ; word constituents
-  (map-string 'set-symbol "_'")         ; symbol constituents
-  ;; Delimited comments are %{ }%, see 1234 below.
-  (set-twelf-syntax ?\ "    ")            ; whitespace
-  (set-twelf-syntax ?\t "    ")           ; whitespace
-  (set-twelf-syntax ?% "< 14")            ; comment begin
-  (set-twelf-syntax ?\n ">   ")           ; comment end
-  (set-twelf-syntax ?: ".   ")            ; punctuation
-  (set-twelf-syntax ?. ".   ")            ; punctuation
-  (set-twelf-syntax ?\( "()  ")           ; open delimiter
-  (set-twelf-syntax ?\) ")(  ")           ; close delimiter
-  (set-twelf-syntax ?\[ "(]  ")           ; open delimiter
-  (set-twelf-syntax ?\] ")[  ")           ; close delimiter
-  (set-twelf-syntax ?\{ "(}2 ")           ; open delimiter
-  (set-twelf-syntax ?\} "){ 3")           ; close delimiter
-  ;; Actually, strings are illegal but we include:
-  (set-twelf-syntax ?\" "\"   ")          ; string quote
-  ;; \ is not an escape, but a word constituent (see above)
-  ;;(set-twelf-syntax ?\\ "/   ")         ; escape
-  )
-
-(defconst *whitespace* " \t\n\f"
-  "Whitespace characters to be skipped by various operations.")
-
-(defconst *twelf-comment-start* (concat "%[%{" *whitespace* "]")
-  "Regular expression to match the start of a Twelf comment.")
-
-(defconst *twelf-id-chars* "a-z!&$^+/<=>?@~|#*`;,\\-\\\\A-Z_0-9'"
-  "Characters that constitute Twelf identifiers.")
-
-(defun skip-twelf-comments-and-whitespace ()
-  "Skip Twelf comments (single-line or balanced delimited) and white space."
-  (skip-chars-forward *whitespace*)
-  (while (looking-at *twelf-comment-start*)
-    (cond ((looking-at "%{")           ; delimited comment
-          (condition-case nil (forward-sexp 1)
-            (error (goto-char (point-max))))
-          (or (eobp) (forward-char 1)))
-         (t                            ; single-line comment
-          (end-of-line 1)))
-    (skip-chars-forward *whitespace*)))
-
-(defun twelf-end-of-par (&optional limit)
-  "Skip to presumed end of current Twelf declaration.
-Moves to next period or blank line (whichever comes first)
-and returns t if period is found, nil otherwise.
-Skips over comments (single-line or balanced delimited).
-Optional argument LIMIT specifies limit of search for period."
-  (if (not limit)
-      (save-excursion
-       (forward-paragraph 1)
-       (setq limit (point))))
-  (while (and (not (looking-at "\\."))
-             (< (point) limit))
-    (skip-chars-forward "^.%" limit)
-    (cond ((looking-at *twelf-comment-start*)
-          (skip-twelf-comments-and-whitespace))
-         ((looking-at "%")
-          (forward-char 1))))
-  (cond ((looking-at "\\.")
-        (forward-char 1)
-        t)
-       (t ;; stopped at limit
-        nil)))
-
-(defun twelf-current-decl ()
-  "Returns list (START END COMPLETE) for current Twelf declaration.
-This should be the declaration or query under or just before
-point within the nearest enclosing blank lines.
-If declaration ends in `.' then COMPLETE is t, otherwise nil."
-  (let (par-start par-end complete)
-    (save-excursion
-      ;; Skip backwards if between declarations
-      (if (or (eobp) (looking-at (concat "[" *whitespace* "]")))
-         (skip-chars-backward (concat *whitespace* ".")))
-      (setq par-end (point))
-      ;; Move forward from beginning of decl until last
-      ;; declaration before par-end is found.
-      (if (not (bobp)) (backward-paragraph 1))
-      (setq par-start (point))
-      (while (and (twelf-end-of-par par-end)
-                 (< (point) par-end))
-       (setq par-start (point)))
-      ;; Now par-start is at end of preceding declaration or query.
-      (goto-char par-start)
-      (skip-twelf-comments-and-whitespace)
-      (setq par-start (point))
-      ;; Skip to period or consective blank lines
-      (setq complete (twelf-end-of-par))
-      (setq par-end (point)))
-    (list par-start par-end complete)))
-
-(defun twelf-mark-decl ()
-  "Marks current Twelf declaration and moves point to its beginning."
-  (interactive)
-  (let* ((par (twelf-current-decl))
-        (par-start (nth 0 par))
-        (par-end (nth 1 par)))
-    (push-mark par-end)
-    (goto-char par-start)))
-
-(defun twelf-indent-decl ()
-  "Indent each line of the current Twelf declaration."
-  (interactive)
-  (let* ((par (twelf-current-decl))
-        (par-start (nth 0 par))
-        (par-end (nth 1 par)))
-    (goto-char par-start)
-    (twelf-indent-lines (count-lines par-start par-end))))
-
-(defun twelf-indent-region (from to)
-  "Indent each line of the region as Twelf code."
-  (interactive "r")
-  (cond ((< from to)
-        (goto-char from)
-        (twelf-indent-lines (count-lines from to)))
-       ((> from to)
-        (goto-char to)
-        (twelf-indent-lines (count-lines to from)))
-       (t nil)))
-
-(defun twelf-indent-lines (n)
-  "Indent N lines starting at point."
-  (interactive "p")
-  (while (> n 0)
-    (twelf-indent-line)
-    (forward-line 1)
-    (setq n (1- n))))
-
-(defun twelf-comment-indent ()
-  "Calculates the proper Twelf comment column.
-Currently does not deal specially with pragmas."
-  (cond ((looking-at "%%%")
-        0)
-       ((looking-at "%[%{]")
-        (car (twelf-calculate-indent)))
-       (t
-        (skip-chars-backward " \t")
-        (max (if (bolp) 0 (1+ (current-column))) comment-column))))
-
-(defun looked-at ()
-  "Returns the last string matched against.
-Beware of intervening, even unsuccessful matches."
-  (buffer-substring (match-beginning 0) (match-end 0)))
-
-(defun twelf-indent-line ()
-  "Indent current line as Twelf code.
-This recognizes comments, matching delimiters, and standard infix operators."
-  (interactive)
-  (let ((old-point (point)))
-    (beginning-of-line)
-    (let* ((indent-info (twelf-calculate-indent))
-          (indent-column (nth 0 indent-info))
-          (indent-type (nth 1 indent-info))
-          (indent-string (nth 2 indent-info)))
-      (skip-chars-forward " \t")        ; skip whitespace
-      (let ((fwdskip (- old-point (point))))
-       (cond ((looking-at "%%%")
-              (twelf-indent-line-to 0 fwdskip)) ; %%% comment at column 0
-             ((looking-at "%[%{]")     ; delimited or %% comment
-              (twelf-indent-line-to indent-column fwdskip))
-             ((looking-at *twelf-comment-start*)    ; indent single-line 
comment
-              (indent-for-comment)
-              (forward-char -1))
-             ((looking-at "%")         ; %keyword declaration
-              (twelf-indent-line-to indent-column fwdskip))
-             ((looking-at twelf-infix-regexp) ; looking at infix operator
-              (if (string= indent-string (looked-at))
-                  ;; indent string is the same as the one we are looking at
-                  (twelf-indent-line-to indent-column fwdskip)
-                (twelf-indent-line-to (+ indent-column twelf-indent) fwdskip)))
-             ((eq indent-type 'delimiter) ; indent after delimiter
-              (twelf-indent-line-to (+ indent-column twelf-indent) fwdskip))
-             ((eq indent-type 'limit)  ; no delimiter or infix found.
-              (twelf-indent-line-to indent-column fwdskip))
-             ((eq indent-type 'infix)
-              (twelf-indent-line-to (+ indent-column twelf-indent) 
fwdskip)))))))
-
-(defun twelf-indent-line-to (indent fwdskip)
-  "Indent current line to INDENT then skipping to FWDSKIP if positive.
-Assumes point is on the first non-whitespace character of the line."
-  (let ((text-start (point))
-       (shift-amount (- indent (current-column))))
-    (if (= shift-amount 0)
-       nil
-      (beginning-of-line)
-      (delete-region (point) text-start)
-      (indent-to indent))
-    (if (> fwdskip 0)
-       (forward-char fwdskip))))
-
-(defun twelf-calculate-indent ()
-  "Calculate the indentation and return a list (INDENT INDENT-TYPE STRING).
-INDENT is a natural number,
-INDENT-TYPE is 'DELIMITER, 'INFIX, or 'LIMIT, and
-STRING is the delimiter, infix operator, or the empty string, respectively."
-  (save-excursion
-    (let* ((par (twelf-current-decl))
-          (par-start (nth 0 par))
-          (par-end (nth 1 par))
-          (par-complete (nth 2 par))
-          (limit (cond ((> par-start (point)) (point))
-                       ((and (> (point) par-end) par-complete) par-end)
-                       (t par-start))))
-      (twelf-dsb limit))))
-
-(defun twelf-dsb (limit)
-  "Scan backwards from point to find opening delimiter or infix operator.
-This currently does not deal with comments or mis-matched delimiters.
-Argument LIMIT specifies bound for backwards search."
-  (let ((result nil)
-       (lparens 0) (lbraces 0) (lbrackets 0))
-    (while (not result)
-      (if (or (= lparens 1) (= lbraces 1) (= lbrackets 1))
-         (setq result (list (current-column) 'delimiter (looked-at)))
-       (if (re-search-backward (concat "[][{}()]\\|" twelf-infix-regexp)
-                               limit 'limit) ; return 'LIMIT if limit reached
-           (let ((found (looked-at)))
-             (cond
-              ((string= found "(") (setq lparens (1+ lparens)))
-              ((string= found ")") (setq lparens (1- lparens)))
-              ((string= found "{") (setq lbraces (1+ lbraces)))
-              ((string= found "}") (setq lbraces (1- lbraces)))
-              ((string= found "[") (setq lbrackets (1+ lbrackets)))
-              ((string= found "]") (setq lbrackets (1- lbrackets)))
-              (t;; otherwise, we are looking at an infix operator
-               (if (and (= lparens 0) (= lbraces 0) (= lbrackets 0))
-                   (setq result (list (current-column) 'infix found))
-                 nil))))               ; embedded - skip
-         (setq result (list 0 'limit ""))))) ; reached the limit, no indent
-    result))
-
-(defun twelf-mode-variables ()
-  "Set up local variables for Twelf mode."
-  (set-syntax-table twelf-mode-syntax-table)
-  ;; Paragraphs are separated by blank lines or ^L.
-  (make-local-variable 'paragraph-start)
-  (setq paragraph-start "^[ \t\f]*$")
-  (make-local-variable 'paragraph-separate)
-  (setq paragraph-separate paragraph-start)
-  (make-local-variable 'indent-line-function)
-  (setq indent-line-function 'twelf-indent-line)
-  (make-local-variable 'comment-start)
-  (setq comment-start "%")
-  (make-local-variable 'comment-start-skip)
-  (setq comment-start-skip "%+{?[ \t]*")
-  (make-local-variable 'comment-end)
-  (setq comment-end "")
-  (make-local-variable 'comment-column)
-  (setq comment-column 40)
-  ;; (make-local-variable 'parse-sexp-ignore-comments)
-  ;; (setq parse-sexp-ignore-comments t)
-  )
-
-(defun twelf-mode ()
-  "Major mode for editing Twelf code.
-Tab indents for Twelf code.
-Delete converts tabs to spaces as it moves back.
-M-C-q indents all lines in current Twelf declaration.
-
-Twelf mode also provides commands to maintain groups of Twelf source
-files (configurations) and communicate with an Twelf server which
-processes declarations.  It also supports quick jumps to the (presumed)
-source of error message that may arise during parsing or type-checking.
-
-Customisation: Entry to this mode runs the hooks on twelf-mode-hook.
-See also the hints for the .emacs file given below.
-
-Mode map
-========
-\\{twelf-mode-map}
-\\<twelf-mode-map>
-Overview
-========
-
-The basic architecture is that Emacs sends commands to an Twelf server
-which runs as an inferior process, usually in the buffer *twelf-server*.
-Emacs in turn interprets or displays the replies from the Twelf server.
-Since a typical Twelf application comprises several files, Emacs
-maintains a configuration in a file, usally called sources.cfg.  This
-file contains a list of files, each on a separate line, in dependency
-order.  The `%' character starts a comment line.  A configuration is
-established with the command \\[twelf-server-configure].
-
-A new file is switched to Twelf mode if a file has extension `.elf',
-`.quy', `.thm' or `.cfg' and the `auto-mode-alist' is set correctly (see
-init.el).
-
-The files in the current configuration can be checked in sequence with
-\\[twelf-save-check-config], the current file with
-\\[twelf-save-check-file], individual declarations with
-\\[twelf-check-declaration].  These, like many other commands, take an
-optional prefix arguments which means to display the Twelf server buffer
-after the processing of the configuration, file, or declaration.  If an
-error should arise during these or related operations a message is
-issued both in the server buffer and Emacs, and the command
-\\[twelf-next-error] visits the presumed source of the type error in a
-separate buffer.
-
-Summary of most common commands:
- M-x twelf-save-check-config \\[twelf-save-check-config]  save, check & load 
configuration
- M-x twelf-save-check-file   \\[twelf-save-check-file]  save, check & load 
current file
- M-x twelf-check-declaration \\[twelf-check-declaration]  type-check 
declaration at point
- M-x twelf-server-display    \\[twelf-server-display]  display Twelf server 
buffer
-
-It is important to remember that the commands to save and check
-a file or check a declaration may change the state of the global
-signature maintained in Twelf.  After a number of changes it is usually
-a good idea to return to a clean slate with \\[twelf-save-check-config].
-
-Individual Commands
-===================
-
-Configurations, Files and Declarations
-
-  twelf-save-check-config                   \\[twelf-save-check-config]
-   Save its modified buffers and then check the current Twelf configuration.
-   With prefix argument also displays Twelf server buffer.
-   If necessary, this will start up an Twelf server process.
-
-  twelf-save-check-file                     \\[twelf-save-check-file]
-   Save buffer and then check it by giving a command to the Twelf server.
-   With prefix argument also displays Twelf server buffer.
-
-  twelf-check-declaration                   \\[twelf-check-declaration]
-   Send the current declaration to the Twelf server process for checking.
-   With prefix argument, subsequently display Twelf server buffer.
-
-Subterm at Point
-
-  twelf-type-const                          \\[twelf-type-const]
-   Display the type of the constant before point.
-   Note that the type of the constant will be `absolute' rather than the
-   type of the particular instance of the constant.
-
-Error Tracking
-
-  twelf-next-error                          \\[twelf-next-error]
-   Find the next error by parsing the Twelf server or Twelf-SML buffer.
-
-  twelf-goto-error                          \\[twelf-goto-error]
-   Go to the error reported on the current line or below.
-
-Server State
-
-  twelf-set PARM VALUE                      \\[twelf-set]
-   Sets the Twelf server parameter PARM to VALUE.
-   Prompts for PARM when called interactively, using completion for legal
-   parameters.
-
-  twelf-get PARM                            \\[twelf-get]
-   Print the current value the Twelf server parameter PARM.
-
-  twelf-server-interrupt                    \\[twelf-server-interrupt]
-   Interrupt the Twelf server-process.
-
-  twelf-server                              \\[twelf-server]
-   Start a Twelf server process in a buffer named *twelf-server*.
-
-  twelf-server-configure                    \\[twelf-server-configure]
-   Set the current configuration of the Twelf server.
-
-  twelf-reset                               \\[twelf-reset]
-   Reset the global signature in the Twelf server process.
-
-  twelf-server-quit                         \\[twelf-server-quit]
-   Kill the Twelf server process.
-
-  twelf-server-restart                      \\[twelf-server-restart]
-   Restarts server and re-initializes configuration.
-   This is primarily useful during debugging of the Twelf server code or
-   if the Twelf server is hopelessly wedged.
-
-  twelf-server-send-command                 \\[twelf-server-send-command]
-   Send arbitrary string to Twelf server.
-
-Tags (for other, M-x apropos tags or see `etags' documentation)
-
-  twelf-tag                                 \\[twelf-tag]
-   Create tags file TAGS for current configuration.
-   If current configuration is names CONFIGx, tags file will be named TAGx.
-   Errors are displayed in the Twelf server buffer.
-
-Timers
-
-  twelf-timers-reset                       \\[twelf-timers-reset]
-   Reset Twelf timers.
-
-  twelf-timers-show                         \\[twelf-timers-show]
-   Show and reset Twelf timers.
-
-  twelf-timers-check                        \\[twelf-timers-check]
-   Show, but do not reset Twelf timers.
-
-Editing
-
-  twelf-indent-decl                         \\[twelf-indent-decl]
-   Indent each line in current declaration as Twelf code.
-
-  twelf-indent-region                       \\[twelf-indent-region]
-   Indent each line of the region as Twelf code.
-
-Minor Modes
-===========
-
-An associated minor modes is 2Twelf-SML (toggled with
-twelf-to-twelf-sml-mode).  This means that we assume communication
-is an inferior Twelf-SML process and not a Twelf server.
-
-Related Major Modes
-===================
-
-Related major modes are Twelf Server (for the Twelf server buffer) and
-Twelf-SML (for an inferior Twelf-SML process).  Both modes are based on
-the standard Emacs comint package and inherit keybindings for retrieving
-preceding input.
-
-Customization
-=============
-
-The following variables may be of general utility.
-
- twelf-indent          amount of indentation for nested Twelf expressions
- twelf-mode-hook       hook to run when entering Twelf mode
- twelf-server-program  full pathname of Twelf server program
- twelf-server-mode-hook  hook to run when entering Twelf server mode
- twelf-info-file       name of Twelf info file with documentation
-
-The following is a typical section of a .emacs initialization file
-which can be found in the file init.el.
-
-(setq load-path (cons \"/afs/cs/project/twelf/research/twelf/emacs\" 
load-path))
-
-(autoload 'twelf-mode \"twelf\" \"Major mode for editing Twelf source.\" t)
-(autoload 'twelf-server \"twelf\" \"Run an inferior Twelf server.\" t)
-(autoload 'twelf-sml \"twelf\" \"Run an inferior Twelf-SML process.\" t)
-
-(setq auto-mode-alist
-      (cons '(\"\\.elf$\" . twelf-mode)
-           (cons '(\"\\.quy$\" . twelf-mode)
-                 (cons '(\"\\.thm$\" . twelf-mode)
-                       (cons '(\"\\.cfg$\" . twelf-mode)
-                             auto-mode-alist)))))
-
-(setq twelf-server-program
-      \"/afs/cs/project/twelf/research/twelf/bin/twelf-server\")
-
-(setq twelf-sml-program
-      \"/afs/cs/project/twelf/misc/smlnj/bin/sml-cm\")
-
-(setq twelf-info-file
-      \"/afs/cs/project/twelf/research/twelf/doc/info/twelf.info\")
-"
-  (interactive)
-  (kill-all-local-variables)
-  (twelf-mode-variables)
-  (use-local-map twelf-mode-map)
-  (setq major-mode 'twelf-mode)
-  (setq mode-name "Twelf")
-  (twelf-config-mode-check)
-  (twelf-add-menu)                     ; add Twelf menu to menubar
-  ;; disable twelf-add-to-config-check: require explicit add-file
-  ;; (twelf-add-to-config-check)
-  (run-hooks 'twelf-mode-hook))
-
-;;;----------------------------------------------------------------------
-;;; Reading info file
-;;;----------------------------------------------------------------------
-
-(defun twelf-info (&optional file)
-  "Enter Info, starting with the Twelf node
-Optional argument FILE specifies the info file.
-
-In interactive use, a prefix arguments directs this command to
-read a file name from the minibuffer."
-  (interactive (if current-prefix-arg
-                  (list (read-file-name "Info file name: " nil nil t))))
-  (info (or file twelf-info-file)))
-
-;;;----------------------------------------------------------------------
-;;; Error message parsing
-;;;----------------------------------------------------------------------
-
-(defconst twelf-error-regexp
-  "^.+:[-0-9.:]+.* \\(Error\\|Warning\\):"
-  "Regexp for matching Twelf error.")
-
-(defconst twelf-error-fields-regexp
-   "^[-=? \t]*\\(.+\\):\
-\\([0-9]+\\)\\(\\.\\([0-9]+\\)\\)?\\(-\\([0-9]+\\)\\(\\.\\([0-9]+\\)\\)?\\)?\
-.+\\(Error\\|Warning\\):"
-   "Regexp to extract fields of Twelf error.")
-
-(defconst twelf-error-decl-regexp
-  "^[-=? \t]*\\(.+\\)::\\([^ \t\n]+\\) "
-  "Regexp to extract filename and identifier from declaration error.")
-
-(defun looked-at-nth (n)
-  (let ((b (match-beginning n))
-       (e (match-end n)))
-    (if (or (null b) (null e)) nil
-      (buffer-substring (match-beginning n) (match-end n)))))
-
-(defun looked-at-nth-int (n)
-  (let ((str (looked-at-nth n)))
-    (if (null str) nil
-      (string-to-number str))))
-
-(defun twelf-error-parser (pt)
-  "Standard parser for Twelf errors.
-Returns a 5-element list (FILE START-LINE START-COL END-LINE END-COL)
-or (\"Local\" START-CHAR NIL END-CHAR NIL)."
-  (save-excursion
-    (goto-char pt)
-    (re-search-forward twelf-error-fields-regexp)
-    (list (looked-at-nth 1)            ; file or "Local" or "stdIn"
-         (looked-at-nth-int 2)         ; start line or char
-         (looked-at-nth-int 4)         ; start column, if given, else nil
-         (looked-at-nth-int 6)         ; end line, if given, else nil or char
-         (looked-at-nth-int 8)         ; end column, if given, else nil
-         )))
-
-(defun twelf-error-decl (pos)
-  "Determines if the error is identified only by its declaration."
-  (save-excursion
-    (goto-char pos)
-    (looking-at twelf-error-decl-regexp)))
-
-(defun twelf-mark-relative (line0 col0 line1 col1)
-  "Mark error region if location is given relative to a buffer position."
-  (if (not (= line0 1))
-      (forward-line (1- line0)))
-  ;; work around bug: from stdIn, first line is off by one.
-  (forward-char (if (not (= line0 1)) (1- col0) (1- (1- col0))))
-  ;; select region, if non-empty
-  (cond ((not (null line1))
-        (push-mark (point))
-        (cond ((not (= line1 line0))
-               (forward-line (- line1 line0))
-               (forward-char (1- col1)))
-              (t (forward-char (- col1 col0))))
-        (exchange-point-and-mark)
-        (funcall twelf-highlight-range-function (point) (mark)))))
-
-(defun twelf-mark-absolute (line0 col0 line1 col1)
-  "Mark error region if location is given as absolute buffer position."
-  (cond ((and line0 col0 line1 col1)   ; line0.col0-line1.col1 range
-        (goto-line line0)
-        ;; don't use move-to-column since <tab> is 1 char to lexer
-        (forward-char (1- col0))
-        ;; select region, if non-empty
-        (push-mark (point))
-        (goto-line line1)
-        (forward-char (1- col1))
-        (exchange-point-and-mark)
-        (funcall twelf-highlight-range-function (point) (mark)))
-       ((and (null col0) (null col1))  ; char0-char1 range
-        (goto-char line0)
-        (push-mark (point))
-        (goto-char line1)
-        (exchange-point-and-mark)
-        (funcall twelf-highlight-range-function (point) (mark)))
-       ((and line0 col0)               ; beginning line0.col0
-        (goto-line line0)
-        (forward-char (1- col0)))
-       (line0                          ; beginning char0
-        (goto-char line0))
-       (t (error "Unrecognized format for error location"))))
-
-(defun twelf-find-decl (filename id)
-  "In FILENAME find probable declaration of ID."
-  (if (not (file-readable-p filename))
-      (error "Cannot read file %s" filename)
-    (switch-to-buffer-other-window (find-file-noselect filename))
-    (goto-char (point-min))
-    (let ((done nil)
-         decl-id)
-      (while (not done)
-       (setq decl-id (twelf-next-decl filename *twelf-last-input-buffer*))
-       (if (not decl-id)
-           (error "Declaration of %s not found in file %s." id filename)
-         (setq done (string= decl-id id))
-         (if (not done) (twelf-end-of-par)))))))
-
-(defun twelf-next-error ()
-  "Find the next error by parsing the Twelf server or Twelf-SML buffer.
-Move the error message on the top line of the window;
-put the cursor at the beginning of the error source. If the
-error message specifies a range, the mark is placed at the end."
-  (interactive)
-  (let ((case-fold-search nil)
-       (twelf-buffer (or *twelf-last-input-buffer*
-                       (error "Cannot determine process buffer with last 
input")))
-       error-begin)
-    (pop-to-buffer twelf-buffer)
-    (goto-char *twelf-error-pos*)   ; go to last error
-    (if (not (re-search-forward twelf-error-regexp (point-max) t))
-       (error "No error message found.")
-      (setq error-begin (match-beginning 0))
-      (setq *twelf-error-pos* (point))
-      (set-window-start (get-buffer-window twelf-buffer)
-                       (save-excursion (beginning-of-line) (point)))
-      (if (twelf-error-decl error-begin)
-         (twelf-find-decl (looked-at-nth 1) (looked-at-nth 2))
-       (let* ((parse (twelf-error-parser error-begin))
-              (file (nth 0 parse))
-              (line0 (nth 1 parse))
-              (col0 (nth 2 parse))
-              (line1 (nth 3 parse))
-              (col1 (nth 4 parse)))
-         (cond ((equal file "stdIn")
-                ;; Error came from direct input
-                (cond ((null *twelf-last-region-sent*)
-                       ;; from last interactive input in the Twelf buffer
-                       (goto-char (point-max))
-                       (comint-previous-input 1)
-                       (setq *twelf-last-region-sent* t)
-                       (goto-char (process-mark
-                                   (get-buffer-process twelf-buffer)))
-                       (twelf-mark-relative line0 col0 line1 col1))
-                      ((eq *twelf-last-region-sent* t)
-                       ;; from the waiting input in the Twelf buffer
-                       (goto-char (process-mark
-                                   (get-buffer-process twelf-buffer)))
-                       (twelf-mark-relative line0 col0 line1 col1))
-                      (t
-                       ;; from a region sent from some buffer
-                       (let ((buf (nth 0 *twelf-last-region-sent*))
-                             (start (nth 1 *twelf-last-region-sent*)))
-                         (switch-to-buffer-other-window buf)
-                         (goto-char start)
-                         (twelf-mark-relative line0 col0 line1 col1)))))
-               ((equal file "Local")
-                ;; Error came from local input, usually to a server process
-                ;; in this case the address relative, and expressed in
-                ;; characters, rather than lines.
-                (let ((local-buffer (nth 0 *twelf-last-region-sent*))
-                      ;; Local characters seem to be off by two
-                      (char0 (+ (nth 1 *twelf-last-region-sent*) (- line0 2)))
-                      (char1 (+ (nth 1 *twelf-last-region-sent*) (- line1 2))))
-                  (switch-to-buffer-other-window local-buffer)
-                  (goto-char char1)
-                  (push-mark)
-                  (goto-char char0)
-                  (exchange-point-and-mark)))
-               ((file-readable-p file)
-                ;; Error came from a source file
-                (switch-to-buffer-other-window (find-file-noselect file))
-                (twelf-mark-absolute line0 col0 line1 col1))
-               (t
-                (error (concat "Can't read file " file)))))))))
-
-(defun twelf-goto-error ()
-  "Go to the error reported on the current line or below.
-Also updates the error cursor to the current line."
-  (interactive)
-  (pop-to-buffer (or *twelf-last-input-buffer*
-                    (error "Cannot determine process buffer with last input")))
-  (beginning-of-line)
-  (setq *twelf-error-pos* (point))
-  (twelf-next-error))
-
-;;;----------------------------------------------------------------------
-;;; NT Emacs bug workaround
-;;;----------------------------------------------------------------------
-
-(defun twelf-convert-standard-filename (filename)
-  "Convert FILENAME to form appropriate for Twelf Server of current OS."
-  (cond ((eq system-type 'windows-nt)
-        (while (string-match "/" filename)
-          (setq filename (replace-match "\\" t t filename)))
-        filename)
-       (t (convert-standard-filename filename))))
-
-;;;----------------------------------------------------------------------
-;;; Communication with Twelf server
-;;;----------------------------------------------------------------------
-
-(defun string-member (x l)
-  (if (null l) nil
-    (or (string-equal x (car l)) (string-member x (cdr l)))))
-
-;(defun twelf-add-to-config-check ()
-;  "Ask if current file should be added to the current Twelf configuration."
-;  (let ((file-name (buffer-file-name)))
-;    (if (and (not (string-member file-name *twelf-config-list*))
-;             (not (null *twelf-config-buffer*))
-;             (yes-or-no-p "Add to the current configuration? "))
-;        (twelf-server-add-file file-name))))
-
-(defun twelf-config-proceed-p (file-name)
-  "Ask if to proceed if FILE-NAME is not in current configuration."
-  (if (and (not (string-member file-name *twelf-config-list*))
-          (not (yes-or-no-p "File not in current configuration.  Save? ")))
-      nil
-    t))
-
-(defun twelf-save-if-config (buffer)
-  "Ask if BUFFER should be saved if in the current configuration.
-Always save if the variable `twelf-save-silently' is non-nil."
-  (let ((file-name (buffer-file-name buffer)))
-    (if (and (buffer-modified-p buffer)
-            file-name
-            (string-member file-name *twelf-config-list*))
-       (if twelf-save-silently
-           (save-buffer)
-         (pop-to-buffer buffer)
-         (if (yes-or-no-p (concat "Save " file-name "? "))
-             (save-buffer))))))
-
-(defun twelf-config-save-some-buffers ()
-  "Cycle through all buffers and save those in the current configuration."
-  (mapcar 'twelf-save-if-config (buffer-list)))
-
-(defun twelf-save-check-config (&optional displayp)
-  "Save its modified buffers and then check the current Twelf configuration.
-With prefix argument also displays Twelf server buffer.
-If necessary, this will start up an Twelf server process."
-  (interactive "P")
-  (let ((current-file-name (buffer-file-name)))
-    (cond ((and current-file-name
-               (not buffer-read-only)
-               (buffer-modified-p)
-               (twelf-config-proceed-p current-file-name))
-          (save-buffer)))
-    (save-excursion
-      (twelf-config-save-some-buffers))
-    (twelf-check-config displayp)))
-
-(defun twelf-check-config (&optional displayp)
-  "Check the current Twelf configuration.
-With prefix argument also displays Twelf server buffer.
-If necessary, this will start up an Twelf server process."
-  (interactive "P")
-  (if (not *twelf-config-buffer*)
-      (call-interactively 'twelf-server-configure))
-  (twelf-server-sync-config)
-  (twelf-focus nil nil)
-  (twelf-server-send-command "Config.load")
-  (twelf-server-wait displayp))
-
-(defun twelf-save-check-file (&optional displayp)
-  "Save buffer and then check it by giving a command to the Twelf server.
-In Twelf Config minor mode, it reconfigures the server.
-With prefix argument also displays Twelf server buffer."
-  (interactive "P")
-  (save-buffer)
-  (if twelf-config-mode
-      (twelf-server-configure (buffer-file-name) "Server OK: Reconfigured")
-    (let* ((save-file (buffer-file-name))
-          (check-file (file-relative-name save-file (twelf-config-directory)))
-          (check-file-os (twelf-convert-standard-filename check-file)))
-      (twelf-server-sync-config)
-      (twelf-focus nil nil)
-      (twelf-server-send-command (concat "loadFile " check-file-os))
-      (twelf-server-wait displayp))))
-
-(defun twelf-buffer-substring (start end)
-  "The substring of the current buffer between START and END.
-The location is recorded for purposes of error parsing."
-  (setq *twelf-last-region-sent* (list (current-buffer) start end))
-  (buffer-substring start end))
-
-(defun twelf-buffer-substring-dot (start end)
-  "The substring of the current buffer between START and END plus
-an end-of-input marker, `%.'.  The location of the input is recorded
-for purposes of error parsing."
-  (concat (twelf-buffer-substring start end) "%."))
-
-(defun twelf-check-declaration (&optional displayp)
-  "Send the current declaration to the Twelf server process for checking.
-With prefix argument also displays Twelf server buffer."
-  (interactive "P")
-  (let* ((par (twelf-current-decl))
-        (par-start (nth 0 par))
-        (par-end (nth 1 par))
-        (decl (twelf-buffer-substring-dot par-start par-end)))
-    (twelf-focus par-start par-end)
-    (twelf-server-send-command (concat "readDecl\n" decl))
-    (twelf-server-wait displayp)))
-
-;(defun twelf-highlight-range (par-start par-end &optional offset)
-;  "Set point and mark to encompass the range analyzed by the Twelf server."
-;  (let* ((range (twelf-parse-range))
-;         (range-start (nth 0 range))
-;         (range-end (nth 1 range))
-;         (offset (if (null offset) 0 offset)))
-;    (if (and (integerp range-start) (integerp range-end))
-;        (progn (goto-char (+ (- (+ par-start range-end) 2) offset))
-;               (push-mark (- (+ par-start range-start) 2))
-;             (funcall twelf-highlight-range-function (point) (mark))))))
-
-(defun twelf-highlight-range-zmacs (start end)
-  "Highlight range as zmacs region.  Assumes point and mark are set.
-Does nothing if function zmacs-activate-region is undefined."
-  (if (fboundp 'zmacs-activate-region)
-      (zmacs-activate-region)))
-
-(defun twelf-focus (&optional start end)
-  "Focus on region between START and END as current declaration or query.  If
-START and END are nil, then no focus exists.  This intermediary just calls
-the appropriate function."
-  (funcall twelf-focus-function start end))
-
-(defun twelf-focus-noop (start end)
-  "This default focus function does nothing."
-  ())
-
-;; Not yet available in Twelf 1.2 -fp
-
-;(defun twelf-type-at-point ()
-;  "Display the type of the subterm at the point in the current Twelf decl.
-
-;The subterm at point is the smallest subterm whose printed representation
-;begins to the left of point and extends up to or beyond point.  After this and
-;similar commands applicable to subterms, the current region (between mark and
-;point) is set to encompass precisely the selected subterm.  In XEmacs,
-;it will thus be highlighted under many circumstances.  In other versions
-;of Emacs \\[exchange-point-and-mark] will indicate the extent of the region.
-
-;The type computed for the subterm at point takes contextual information into
-;account.  For example, if the subterm at point is a constant with implicit
-;arguments, the type displayed will be the instance of the constant (unlike
-;M-x twelf-type-const (\\[twelf-type-const]), which yields the absolute type 
of a constant)."
-
-;  (interactive)
-;  (let* ((par (twelf-current-decl))
-;         (par-start (nth 0 par))
-;         (par-end (nth 1 par))
-;         (decl (twelf-buffer-substring-dot par-start par-end)))
-;    (twelf-focus par-start par-end)
-;    (twelf-server-send-command
-;     (concat "type-at "
-;             (twelf-current-syncat) " "
-;             (int-to-string (+ (- (point) par-start) 2)) "\n"
-;             decl))
-;    (twelf-server-wait t)
-;    (twelf-highlight-range par-start par-end)))
-
-;(defun twelf-expected-type-at-point ()
-;  "Display the type expected at the point in the current declaration.
-
-;This replaces the subterm at point by an underscore _ and determines
-;the type that _ would have to have for the whole declaration to be valid.
-;This is useful for debugging in places where inconsistent type constraints
-;have arisen.  Error messages may be given, but will not be correctly
-;interpreted by Emacs, since the string sent to the server may be different
-;from the declaration in the buffer.
-
-;For a definition of the subterm at point, see function twelf-type-at-point."
-;  (interactive)
-;  (let* ((par (twelf-current-decl))
-;         (par-start (nth 0 par))
-;         (par-end (nth 1 par))
-;         (par-initial-end nil)
-;         (par-final-start nil)
-;         modified-decl)
-;    ;; (exp-present (not (looking-at (concat "[" *whitespace* "]"))))
-;    (backward-sexp 1)
-;    (setq par-initial-end (point))
-;    (forward-sexp 1)
-;    (setq par-final-start (point))
-;    (setq modified-decl
-;          (concat (twelf-buffer-substring par-start par-initial-end)
-;                  "_" (twelf-buffer-substring-dot par-final-start par-end)))
-;    ;; Error messages here are not accurate.  Nontheless:
-;    (setq *twelf-last-region-sent* (list (current-buffer) par-start par-end))
-;    (twelf-focus par-start par-end)
-;    (twelf-server-send-command
-;     (concat "type-at "
-;             (twelf-current-syncat) " "
-;             (int-to-string (1+ (+ (- par-initial-end par-start) 2))) "\n"
-;             modified-decl))
-;    (twelf-server-wait t)
-;    (twelf-highlight-range par-start par-end
-;                       (1- (- par-final-start par-initial-end)))))
-
-;(defun twelf-parse-range ()
-;  "Parse a range as returned by the Twelf server and return as a list."
-;  (save-window-excursion
-;    (let ((twelf-server-buffer (twelf-get-server-buffer)))
-;      (set-buffer twelf-server-buffer)
-;      (goto-char *twelf-server-last-process-mark*)
-;      ;; We are now at the beginning of the output
-;      (re-search-forward "^\\[\\([0-9]+\\),\\([0-9]+\\))")
-;      (list (looked-at-nth-int 1) (looked-at-nth-int 2)))))
-
-(defun twelf-type-const ()
-  "Display the type of the constant before point.
-Note that the type of the constant will be `absolute' rather than the
-type of the particular instance of the constant."
-  (interactive)
-  (let ((previous-point (point)))
-    (skip-chars-backward *whitespace* (point-min))
-    (skip-chars-forward *twelf-id-chars* (point-max))
-    (let ((end-of-id (point)))
-      (skip-chars-backward *twelf-id-chars* (point-min))
-      (let ((c (if (= (point) end-of-id)
-                  ;; we didn't move.  this should eventually become a
-                  ;; completing-read
-                  (read-string "Constant: ")
-                (buffer-substring (point) end-of-id))))
-       (twelf-server-send-command (concat "decl " c))
-       (twelf-server-wait t)             ; Wait for and display reply
-       (goto-char previous-point)))))
-
-;; Unused? -fp
-;(defun twelf-backwards-parse-arglist ()
-;  "Parse an argument list template as returned by the server."
-;  (save-window-excursion
-;    (let ((twelf-server-buffer (twelf-get-server-buffer)))
-;      (set-buffer twelf-server-buffer)
-;      (goto-char *twelf-server-last-process-mark*)
-;      ;; Should be right at the beginning of the output.
-;      ;; (re-search-forward "^arglist") ;
-;      ;; (beginning-of-line 2)
-;      (let ((arglist-begin (point)))
-;        (skip-chars-forward "^." (point-max))
-;        (buffer-substring arglist-begin (point))))))
-
-;; Not yet ported to Twelf 1.2
-;(defun twelf-show-region-in-window (start end)
-;  "Change window parameters so it precisely shows the given region."
-;  (enlarge-window (- (max (count-lines start end) window-min-height)
-;                     (window-height)))
-;  (set-window-start (selected-window) start))
-
-;(defun twelf-show-menu ()
-;  "Display the Twelf server buffer to show menu of possible completions."
-;  (let ((old-buffer (current-buffer))
-;        (twelf-server-buffer (twelf-get-server-buffer))
-;        region-start region-end)
-;    (switch-to-buffer-other-window twelf-server-buffer)
-;    (goto-char *twelf-server-last-process-mark*)
-;    (if (re-search-forward "-\\.$" (point-max) t)
-;        (progn
-;          (forward-char 1)
-;          (setq region-start (point))
-;          (if (re-search-forward "^-\\." (point-max) t)
-;              (setq region-end (point))
-;            (error "List of alternatives not terminated by -.")))
-;      (error "No alternatives found."))
-;    (twelf-show-region-in-window region-start region-end)
-;    (switch-to-buffer-other-window old-buffer)))
-
-;(defun twelf-completions-at-point ()
-;  "List the possible completions of the term at point based on type 
information.
-
-;The possible completions are numbered, and the function twelf-complete
-;(\\[twelf-complete]) can be used subsequently to replace the term at point 
with
-;one of the alternatives.
-
-;Above the display of the alternatives, the type of the subterm at
-;point is shown, since it is this type which is the basis for listing
-;the possible completions.
-
-;In the list alternatives, a variable X free in the remaining declaration
-;is printed ^X, and a bound variable x may be printed as !x.  These marks
-;are intended to aid in the understanding of the alternatives, but
-;must be removed in case the alternative is copied literally into the
-;input declaration (as, for example, with the \\[twelf-complete] command)."
-;  (interactive)
-;  (let* ((par (twelf-current-decl))
-;         (par-start (nth 0 par))
-;         (par-end (nth 1 par))
-;         (decl (twelf-buffer-substring-dot par-start par-end)))
-;    (twelf-focus par-start par-end)
-;    (twelf-server-send-command
-;     (concat "complete-at "
-;             (twelf-current-syncat) " "
-;             (int-to-string (+ (- (point) par-start) 2)) "\n"
-;             decl))
-;    (twelf-server-wait nil)
-;    (twelf-highlight-range par-start par-end)
-;    (twelf-show-menu)))
-
-;(defun twelf-complete (n)
-;  "Pick the alternative N from among possible completions.
-;This replaces the current region with the given pattern.
-;The list of completions must be generated with the command
-;twelf-completions-at-point (\\[twelf-completions-at-point])."
-;  (interactive "NAlternative: ")
-;  (let (start completion)
-;    (save-excursion
-;      (set-buffer (twelf-get-server-buffer))
-;      (goto-char *twelf-server-last-process-mark*)
-;      (if (not (re-search-forward (concat "^" (int-to-string n) "\\. ")
-;                                  (point-max) t))
-;          (error "No alternative %d found in Twelf server buffer." n))
-;      (setq start (point))
-;      (if (not (search-forward " ::" (point-max) t))
-;          (error "List of completions not well-formed."))
-;      (backward-char 3)
-;      (setq completion (buffer-substring start (point))))
-;    (delete-region (point) (mark))
-;    (insert "(" completion ")")
-;    (twelf-show-menu)))
-
-;;;----------------------------------------------------------------------
-;;; Twelf server mode (major mode)
-;;; This is for the buffer with the Twelf server process, to facilitate
-;;; direct interaction (which should rarely be necessary)
-;;;----------------------------------------------------------------------
-
-(defvar twelf-server-mode-map nil
-  "The keymap used in twelf-server mode.")
-
-(cond ((not twelf-server-mode-map)
-       (setq twelf-server-mode-map (copy-keymap comint-mode-map))
-       (install-basic-twelf-keybindings twelf-server-mode-map)
-       ;; C-c C-c is bound to twelf-save-check config in Twelf mode
-       (define-key twelf-server-mode-map "\C-c\C-c" 'twelf-save-check-config)
-       ;; Bind the function shadowed by the previous definition to C-c C-i
-       (define-key twelf-server-mode-map "\C-c\C-i" 'comint-interrupt-subjob)
-       ))
-
-(defconst twelf-server-cd-regexp "^\\s *OS\\.chDir\\s *\\(.*\\)"
-  "Regular expression used to match cd commands in Twelf server buffer.")
-
-(defun looked-at-string (string n)
-  "Substring of STRING consisting of Nth match."
-  (substring string (match-beginning n) (match-end n)))
-
-(defun twelf-server-directory-tracker (input)
-  "Checks input for cd commands and changes default directory in buffer.
-As a side effect, it resets *twelf-error-pos* and *twelf-last-region-sent*
-to indicate interactive input.  Used as comint-input-filter-function in Twelf
-server buffer."
-  (if (twelf-input-filter input)
-      (setq *twelf-last-region-sent* nil))
-  (setq *twelf-last-input-buffer* (current-buffer))
-  (setq *twelf-error-pos* (marker-position (process-mark 
(twelf-server-process))))
-  (cond ((string-match twelf-server-cd-regexp input)
-        (let ((expanded-dir (expand-dir (looked-at-string input 1))))
-          (setq default-directory expanded-dir)
-          (pwd)))
-       ((string-match "^set\\s +chatter\\s +\\([0-9]\\)+" input)
-        (setq twelf-chatter (string-to-number (looked-at-string input 1))))
-       ;;((string-match "^set\\s +trace\\s +\\([0-9]\\)+" input)
-       ;; (setq twelf-trace (string-to-number (looked-at-string input 1))))
-       ((string-match "^set\\s-+\\(\\S-+\\)\\s-+\\(\\w+\\)" input)
-        (if (assoc (looked-at-string input 1) *twelf-track-parms*)
-            (set (cdr (assoc (looked-at-string input 1) *twelf-track-parms*))
-                 (looked-at-string input 2))))))
-
-(defun twelf-input-filter (input)
-  "Function to filter strings before they are saved in input history.
-We filter out all whitespace and anything shorter than two characters."
-  (and (not (string-match "\\`\\s *\\'" input))
-       (> (length input) 1)))
-
-(defun twelf-server-mode ()
-  "Major mode for interacting with an inferior Twelf server process.
-Runs twelf-server-mode-hook.
-
-The following commands are available:
-\\{twelf-server-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  ;; Initialize comint parameters
-  (comint-mode)
-  (setq comint-prompt-regexp "^") ;; no prompt
-  (setq comint-input-filter 'twelf-input-filter)
-  ;;changed for XEmacs 19.16
-  ;;(setq comint-input-sentinel 'twelf-server-directory-tracker)
-  (add-hook 'comint-input-filter-functions 'twelf-server-directory-tracker
-           nil t)
-  (twelf-mode-variables)
-  ;; For sequencing through error messages:
-  (make-local-variable '*twelf-error-pos*)
-  (setq *twelf-error-pos* (point-max))
-  ;; Set mode and keymap
-  (setq major-mode 'twelf-server-mode)
-  (setq mode-name "Twelf Server")
-  (setq mode-line-process '(": %s"))
-  (use-local-map twelf-server-mode-map)
-  (twelf-server-add-menu)              ; add Twelf Server menu
-  ;; Run user specified hooks, if any
-  (run-hooks 'twelf-server-mode-hook))
-
-;;;----------------------------------------------------------------------
-;;; Functions to support use of the Twelf server
-;;;----------------------------------------------------------------------
-
-(defun twelf-parse-config ()
-  "Starting at point, parse a configuration file."
-  (let ((filelist nil))
-    (skip-chars-forward *whitespace*)
-    (while (not (eobp))                 ; end of buffer?
-      (cond ((looking-at "%")           ; comment through end of line
-            (end-of-line))
-           (t (let ((begin-point (point))) ; parse filename starting at point
-                (skip-chars-forward (concat "^" *whitespace*))
-                (let* ((file-name (buffer-substring begin-point (point)))
-                       (absolute-file-name
-                        (expand-file-name file-name default-directory)))
-                  (if (file-readable-p absolute-file-name)
-                      (setq filelist (cons absolute-file-name filelist))
-                    (error "File %s not readable." file-name))))))
-      (skip-chars-forward *whitespace*))
-    filelist))
-
-(defun twelf-server-read-config ()
-  "Read the configuration and initialize *twelf-config-list*."
-  (if (or (not (bufferp *twelf-config-buffer*))
-         (null (buffer-name *twelf-config-buffer*)))
-      (error "No current configuration buffer"))
-  (set-buffer *twelf-config-buffer*)
-  (goto-char (point-min))
-  (twelf-parse-config))
-
-(defun twelf-server-sync-config ()
-  "Synchronize the configuration file, buffer, and Twelf server."
-  (if (or (not (bufferp *twelf-config-buffer*))
-         (null (buffer-name *twelf-config-buffer*)))
-      (error "No current configuration buffer"))
-  (if (and twelf-config-mode
-          (not (equal *twelf-config-buffer* (current-buffer)))
-          (yes-or-no-p "Buffer is different from current configuration, 
reconfigure server? "))
-      (twelf-server-configure (buffer-file-name (current-buffer))
-                             "Server OK: Reconfigured"))
-  (save-excursion
-    (set-buffer *twelf-config-buffer*)
-    (if (buffer-modified-p *twelf-config-buffer*)
-       (progn
-         (display-buffer *twelf-config-buffer*)
-         (if (yes-or-no-p "Config buffer has changed, save new version? ")
-             (save-buffer)
-           (message "Checking old configuration"))))
-    (if (not (verify-visited-file-modtime *twelf-config-buffer*))
-       (if (yes-or-no-p "Config file has changed, read new contents? ")
-           (revert-buffer t t)))
-    (if (not (equal (visited-file-modtime) *twelf-config-time*))
-       (progn
-         (display-buffer *twelf-config-buffer*)
-         (if (yes-or-no-p "Config file has changed, reconfigure server? ")
-             (twelf-server-configure (buffer-file-name *twelf-config-buffer*)
-                                   "Server OK: Configured")
-           (if (not (yes-or-no-p "Ask next time? "))
-               (setq *twelf-config-time* (visited-file-modtime))))))))
-
-(defun twelf-get-server-buffer (&optional createp)
-  "Get the current Twelf server buffer.
-Optional argument CREATEP indicates if the buffer should be
-created if it doesn't exist."
-  (if (and (bufferp *twelf-server-buffer*)
-          (not (null (buffer-name *twelf-server-buffer*))))
-      *twelf-server-buffer*
-    (if createp
-       (let ((twelf-server-buffer
-              (get-buffer-create *twelf-server-buffer-name*)))
-         (save-window-excursion
-           (set-buffer twelf-server-buffer)
-           (twelf-server-mode)
-           (setq *twelf-server-buffer* twelf-server-buffer))
-         twelf-server-buffer)
-      (error "No Twelf server buffer"))))
-
-(defun twelf-init-variables ()
-  "Initialize variables that track Twelf server state."
-  (setq twelf-chatter 3)
-  ;;(setq twelf-trace 0)
-  (setq twelf-double-check "false")
-  (setq twelf-print-implicit "false"))
-
-(defun twelf-server (&optional program)
-  "Start an Twelf server process in a buffer named *twelf-server*.
-Any previously existing process is deleted after confirmation.
-Optional argument PROGRAM defaults to the value of the variable
-twelf-server-program.
-This locally re-binds `twelf-server-timeout' to 15 secs."
-  (interactive)
-  (let* ((default-program (if (null program) twelf-server-program program))
-        (default-dir (file-name-directory default-program))
-        (program (expand-file-name
-                  (if (null program)
-                      (read-file-name (concat "Twelf server: (default "
-                                              (file-name-nondirectory
-                                               default-program)
-                                              ") ")
-                                      default-dir
-                                      default-program
-                                      t)
-                    program)))
-        ;; longer timeout during startup
-        (twelf-server-timeout 15))
-    ;; We save the program name as the default for the next time a server is
-    ;; started in this session.
-    (setq twelf-server-program program))
-  (save-window-excursion
-    (let* ((twelf-server-buffer (twelf-get-server-buffer t))
-          (twelf-server-process (get-buffer-process twelf-server-buffer)))
-      (set-buffer twelf-server-buffer)
-      (if (not (null twelf-server-process))
-         (if (yes-or-no-p "Kill current server process? ")
-             (delete-process twelf-server-process)
-           (error "Twelf Server restart aborted")))
-      (goto-char (point-max))
-      (setq *twelf-server-last-process-mark* (point))
-      ;; initialize variables
-      (twelf-init-variables)
-      (start-process *twelf-server-process-name*
-                    twelf-server-buffer
-                    twelf-server-program)
-      (twelf-server-wait)
-      (twelf-server-process))))
-
-(defun twelf-server-process (&optional buffer)
-  "Return the twelf server process, starting one if none exists."
-  (let* ((twelf-server-buffer (if (null buffer) (twelf-get-server-buffer t)
-                             buffer))
-        (twelf-server-process (get-buffer-process twelf-server-buffer)))
-      (if (not (null twelf-server-process))
-         twelf-server-process
-         (twelf-server))))
-
-(defun twelf-server-display (&optional selectp)
-  "Display Twelf server buffer, moving to the end of output.
-With prefix argument also selects the Twelf server buffer."
-  (interactive "P")
-  (display-server-buffer)
-  (if selectp (pop-to-buffer (twelf-get-server-buffer))))
-
-(defun display-server-buffer (&optional buffer)
-  "Display the Twelf server buffer so that the end of output is visible."
-  (let* ((twelf-server-buffer (if (null buffer) (twelf-get-server-buffer)
-                             buffer))
-        (_ (set-buffer twelf-server-buffer))
-        (twelf-server-process (twelf-server-process twelf-server-buffer))
-        (proc-mark (process-mark twelf-server-process))
-        (_ (display-buffer twelf-server-buffer))
-        (twelf-server-window (get-buffer-window twelf-server-buffer)))
-    (if (not (pos-visible-in-window-p proc-mark twelf-server-window))
-       (progn
-         (push-mark proc-mark)
-         (set-window-point twelf-server-window proc-mark)))
-    (sit-for 0)))
-
-(defun twelf-server-send-command (command)
-  "Send a string COMMAND to the Twelf server."
-  (interactive "sCommand: ")
-  (let* ((input (concat command "\n"))
-        (twelf-server-buffer (twelf-get-server-buffer))
-        (twelf-server-process (twelf-server-process twelf-server-buffer)))
-    (if twelf-server-echo-commands
-       (let ((previous-buffer (current-buffer)))
-         (if twelf-server-display-commands
-             (display-server-buffer twelf-server-buffer))
-         (set-buffer twelf-server-buffer)
-         (goto-char (point-max))
-         (insert input)
-         (set-marker (process-mark twelf-server-process) (point-max))
-         (setq *twelf-error-pos* (point-max))
-         (set-buffer previous-buffer)))
-    (setq *twelf-last-input-buffer* twelf-server-buffer)
-    (setq *twelf-server-last-process-mark*
-         (marker-position (process-mark twelf-server-process)))
-    (comint-send-string twelf-server-process input)))
-
-(defun twelf-accept-process-output (process timeout)
-  "Incompatibility workaround for versions of accept-process-output.
-In case the function accepts no TIMEOUT argument, we wait potentially
-forever (until the user aborts, typically with \\[keyboard-quit])."
-  (condition-case nil                  ; do not keep track of error message
-      (accept-process-output process timeout)
-    (wrong-number-of-arguments
-     (accept-process-output process))))
-
-(defun twelf-server-wait (&optional displayp ok-message abort-message)
-  "Wait for server acknowledgment and beep if error occurred.
-If optional argument DISPLAYP is non-NIL, or if an error occurred, the
-Twelf server buffer is displayed.  Optional second and third arguments
-OK-MESSAGE and ABORT-MESSAGE are the strings to show upon successful
-completion or abort of the server which default to \"Server OK\" and
-\"Server ABORT\"."
-  (let* ((chunk-count 0)
-        (last-point *twelf-server-last-process-mark*)
-        (previous-buffer (current-buffer))
-        (previous-match-data (match-data))
-        (twelf-server-buffer (twelf-get-server-buffer))
-        (twelf-server-process (get-buffer-process twelf-server-buffer)))
-    (unwind-protect
-       (catch 'done
-         (set-buffer twelf-server-buffer)
-         (while t
-           (goto-char last-point)
-           (if (re-search-forward "\\(%% OK %%\n\\)\\|\\(%% ABORT %%\n\\)"
-                                  (point-max) 'limit)
-               (cond ((match-beginning 1)
-                      (if displayp
-                          (display-server-buffer twelf-server-buffer))
-                      (message (or ok-message "Server OK"))
-                      (throw 'done nil))
-                     ((match-beginning 2)
-                      (display-server-buffer twelf-server-buffer)
-                      (error (or abort-message "Server ABORT"))
-                      (throw 'done nil)))
-             (cond ((or (not (twelf-accept-process-output
-                              twelf-server-process twelf-server-timeout))
-                        (= last-point (point)))
-                    (display-server-buffer twelf-server-buffer)
-                    (message "Server TIMEOUT, continuing Emacs")
-                    (throw 'done nil))
-                   (t (setq chunk-count (+ chunk-count 1))
-                      (if (= (mod chunk-count 10) 0)
-                          (message (make-string (/ chunk-count 10) ?#)))
-                      (sit-for 0))))))
-      (store-match-data previous-match-data)
-      (set-buffer previous-buffer))))
-
-(defun twelf-server-quit ()
-  "Kill the Twelf server process."
-  (interactive)
-  (twelf-server-send-command "OS.exit"))
-
-(defun twelf-server-interrupt ()
-  "Interrupt the Twelf server process."
-  (interactive)
-  (interrupt-process (twelf-server-process)))
-
-(defun twelf-reset ()
-  "Reset the global signature of Twelf maintained by the server."
-  (interactive)
-  (twelf-server-send-command "reset"))
-
-(defun twelf-config-directory ()
-  "Returns directory with current Twelf server configuration."
-  (let ((config-file (buffer-file-name *twelf-config-buffer*)))
-    (file-name-directory config-file)))
-
-;(defun relativize-file-name (filename dir)
-;  "Relativize FILENAME with respect to DIR, if possible."
-;  (if (string= dir (file-name-directory filename))
-;      (file-name-nondirectory filename)
-;    filename))
-
-(defun twelf-server-configure (config-file &optional ok-message)
-  "Initializes the Twelf server configuration from CONFIG-FILE.
-A configuration file is a list of relative file names in
-dependency order.  Lines starting with % are treated as comments.
-Starts a Twelf servers if necessary."
-  (interactive
-   (list (if twelf-config-mode (buffer-file-name)
-          (expand-file-name
-           (read-file-name "Visit config file: (default sources.cfg) "
-                           default-directory
-                           (concat default-directory "sources.cfg")
-                           nil ; don't require match for now
-                           )))))
-  (let* ((config-file (if (file-directory-p config-file)
-                         (concat config-file "sources.cfg")
-                       config-file))
-        (config-file-os (twelf-convert-standard-filename config-file))
-        (config-dir (file-name-directory config-file))
-        (config-dir-os (twelf-convert-standard-filename config-dir))
-        (config-buffer (set-buffer (or (get-file-buffer config-file)
-                                       (find-file-noselect config-file))))
-        config-list)
-    (setq *twelf-config-buffer* config-buffer)
-    (if (and (not (verify-visited-file-modtime (get-file-buffer config-file)))
-            (yes-or-no-p "Config file has changed, read new contents? "))
-       (revert-buffer t t))
-    (setq config-list (twelf-server-read-config))
-    (twelf-server-process)                ; Start process if necessary
-    (let* ((_ (set-buffer (twelf-get-server-buffer)))
-          (cd-command
-           (if (equal default-directory config-dir)
-               nil
-             (setq default-directory config-dir)
-             (concat "OS.chDir " config-dir-os)))
-          (_ (set-buffer config-buffer)))
-      (cond ((not (null cd-command))
-            (twelf-server-send-command cd-command)
-            (twelf-server-wait nil ""
-                               "Server ABORT: Could not change directory")))
-      (twelf-server-send-command
-       (concat "Config.read " config-file-os))
-      (twelf-server-wait nil (or ok-message "Server OK")
-                      "Server ABORT: Could not be configured")
-      ;; *twelf-config-buffer* should still be current buffer here
-      (setq *twelf-config-time* (visited-file-modtime))
-      (setq *twelf-config-list* config-list))))
-
-;(defun twelf-server-add-file (filename)
-;  "Adds a file to the current configuration."
-;  (interactive
-;   (list (expand-file-name
-;          (read-file-name "File to add: " (twelf-config-directory)))))
-;  (let ((relative-file (file-relative-name filename (twelf-config-directory)))
-;      temp-time)
-;    (save-excursion
-;      (set-buffer *twelf-config-buffer*)
-;      (goto-char (point-max))
-;      (if (not (= (point) (point-min)))
-;          (progn
-;            (backward-char 1)
-;            (if (looking-at "\n")
-;                (forward-char 1)
-;              (forward-char 1)
-;              (insert "\n"))))
-;      (insert (concat relative-file "\n"))
-;      (save-buffer)
-;      (setq temp-time (visited-file-modtime)))
-;    (twelf-server-send-command
-;     (concat "Config.read " (buffer-file-name *twelf-config-buffer*)))
-;    (twelf-server-wait nil "" "Server ABORT: File could not be added to 
configuration")
-;    (setq *twelf-config-list* (cons filename *twelf-config-list*))
-;    (setq *twelf-config-time* temp-time)))
-
-(defun natp (x)
-  "Checks if X is an integer greater or equal to 0."
-  (and (integerp x) (>= x 0)))
-
-(defun twelf-read-nat ()
-  "Reads a natural number from the minibuffer."
-  (let ((num nil))
-    (while (not (natp num))
-      (setq num (read-from-minibuffer "Number: " (if num (prin1-to-string num))
-                                     nil t t))
-      (if (not (natp num)) (beep)))
-    num))
-
-(defun twelf-read-bool ()
-  "Read a boolean in mini-buffer."
-  (completing-read "Boolean: "
-                  '(("true" . true) ("false" . false))
-                  nil t))
-
-(defun twelf-read-limit ()
-  "Read a limit (* or natural number) in mini-buffer."
-  (let ((input (read-string "Limit (* or nat): ")))
-    (if (equal input "*")
-       input
-      (let ((n (string-to-number input)))
-       (if (and (integerp n) (> n 0))
-           n
-         (error "Number must be non-negative integer"))))))
-
-(defun twelf-read-strategy ()
-  "Read a strategy in mini-buffer."
-  (completing-read "Strategy: "
-                  '(("FRS" . "FRS") ("RFS" . "RFS"))
-                  nil t))
-
-(defun twelf-read-value (argtype)
-  "Call the read function appropriate for ARGTYPE and return result."
-  (funcall (cdr (assoc argtype *twelf-read-functions*))))
-
-(defun twelf-set (parm value)
-  "Sets the Twelf parameter PARM to VALUE.
-When called interactively, prompts for parameter and value, supporting
-completion."
-  (interactive
-   (let* ((parm (completing-read
-                "Parameter: " *twelf-parm-table* nil t))
-         (argtype (cdr (assoc parm *twelf-parm-table*)))
-         (value (twelf-read-value argtype)))
-     (list parm value)))
-  (track-parm parm value)              ; track, if necessary
-  (twelf-server-send-command (concat "set " parm " " value)))
-
-(defun twelf-set-parm (parm)
-  "Prompts for and set the value of Twelf parameter PARM.
-Used in menus."
-  (let* ((argtype (cdr (assoc parm *twelf-parm-table*)))
-        (value (and argtype (twelf-read-value argtype))))
-    (if (null argtype)
-       (error "Unknown parameter")
-      (twelf-set parm value))))
-
-(defun track-parm (parm value)
-  "Tracks Twelf parameter values in Emacs."
-  (if (assoc parm *twelf-track-parms*)
-      (set (cdr (assoc parm *twelf-track-parms*)) value)))
-
-(defun twelf-toggle-double-check ()
-  "Toggles doubleCheck parameter of Twelf."
-  (let ((value (if (string-equal twelf-double-check "false")
-                  "true" "false")))
-    (twelf-set "doubleCheck" value)))
-
-(defun twelf-toggle-print-implicit ()
-  "Toggles Print.implicit parameter of Twelf."
-  (let ((value (if (string-equal twelf-print-implicit "false")
-                  "true" "false")))
-    (twelf-set "Print.implicit" value)))
-
-(defun twelf-get (parm)
-  "Prints the value of the Twelf parameter PARM.
-When called interactively, promts for parameter, supporting completion."
-  (interactive (list (completing-read "Parameter: " *twelf-parm-table* nil t)))
-  (twelf-server-send-command (concat "get " parm))
-  (twelf-server-wait)
-  (save-window-excursion
-    (let ((twelf-server-buffer (twelf-get-server-buffer)))
-      (set-buffer twelf-server-buffer)
-      (goto-char *twelf-server-last-process-mark*)
-      ;; We are now at the beginning of the output
-      (end-of-line 1)
-      (message (buffer-substring *twelf-server-last-process-mark* (point))))))
-
-(defun twelf-timers-reset ()
-  "Reset the Twelf timers."
-  (interactive)
-  (twelf-server-send-command "Timers.reset"))
-
-(defun twelf-timers-show ()
-  "Show and reset the Twelf timers."
-  (interactive)
-  (twelf-server-send-command "Timers.show")
-  (twelf-server-wait t))
-
-(defun twelf-timers-check ()
-  "Show the Twelf timers without resetting them."
-  (interactive)
-  (twelf-server-send-command "Timers.show")
-  (twelf-server-wait t))
-
-(defun twelf-server-restart ()
-  "Restarts server and re-initializes configuration.
-This is primarily useful during debugging of the Twelf server code or
-if the Twelf server is hopelessly wedged."
-  (interactive)
-  (twelf-server twelf-server-program)
-  (twelf-server-configure (if *twelf-config-buffer*
-                           (buffer-file-name *twelf-config-buffer*)
-                         "sources.cfg")
-                       "Server configured, now checking...")
-  (twelf-check-config))
-
-;;;----------------------------------------------------------------------
-;;; Twelf Config minor mode
-;;;----------------------------------------------------------------------
-
-(defun twelf-config-mode (&optional prefix)
-  "Toggles minor mode for Twelf configuration files.
-This affects \\<twelf-mode-map>
- twelf-server-configure (\\[twelf-server-configure])
- twelf-save-check-config (\\[twelf-save-check-config])
-"
-  (interactive "P")
-  (make-local-variable 'twelf-config-mode)
-  (cond ((not (assq 'twelf-config-mode minor-mode-alist))
-        (setq minor-mode-alist
-              (cons '(twelf-config-mode " Config") minor-mode-alist))))
-  (cond ((or (not twelf-config-mode) prefix)
-        (setq twelf-config-mode t)
-        (run-hooks 'twelf-config-mode-hook))
-       (t (setq twelf-config-mode t))))
-
-(defun twelf-config-mode-check (&optional buffer)
-  "Switch on the Twelf Config minor mode if the ends in `.cfg'."
-  (if (string-match "\\.cfg$" (buffer-file-name (or buffer (current-buffer))))
-      (twelf-config-mode t)))
-
-;;;----------------------------------------------------------------------
-;;; Support for creating a TAGS file for current Twelf server configuration
-;;;----------------------------------------------------------------------
-
-(defun twelf-tag (&optional tags-filename)
-  "Create tags file for current configuration.
-If the current configuration is sources.cfg, the tags file is TAGS.
-If current configuration is named FILE.cfg, tags file will be named FILE.tag
-Errors are displayed in the Twelf server buffer.
-Optional argument TAGS-FILENAME specifies alternative filename."
-  (interactive)
-  (twelf-server-sync-config)
-  (let* ((error-buffer (twelf-get-server-buffer))
-        (config-filename (buffer-file-name *twelf-config-buffer*))
-        (tags-file
-         (or tags-filename
-             (if (string-equal "sources.cfg"
-                               (file-name-nondirectory config-filename))
-                 (concat (file-name-directory config-filename "TAGS"))
-               (concat (file-name-sans-extension config-filename)
-                       ".tag")))))
-    (save-excursion
-      (set-buffer error-buffer)
-      (goto-char (point-max))
-      (insert "Tagging configuration " config-filename " in file " tags-file 
"\n"))
-    (set-buffer *twelf-config-buffer*)
-    (twelf-tag-files (rev-relativize *twelf-config-list* default-directory)
-                  tags-file error-buffer)
-    (if (get-buffer-process error-buffer)
-       (set-marker (process-mark (get-buffer-process error-buffer))
-                   (point-max)))))
-
-(defun twelf-tag-files (filelist &optional tags-filename error-buffer)
-  "Create tags file for FILELIST, routing errors to buffer *tags-errors*.
-Optional argument TAGS-FILENAME specifies alternative filename (default: TAGS),
-optional argument ERROR-BUFFER specifies alternative buffer for error message
-(default: *tags-errors*)."
-  (let* ((tags-filename (or tags-filename "TAGS"))
-        (tags-buffer (find-file-noselect tags-filename))
-        (error-buffer (or error-buffer (new-temp-buffer "*tags-errors*"))))
-    (save-excursion
-      (set-buffer tags-buffer)
-      (if (equal (point-min) (point-max))
-         nil
-       ;;(pop-to-buffer tags-buffer)
-       ;;(if (yes-or-no-p "Delete current tags information? ")
-       (delete-region (point-min) (point-max))
-       ;;)
-       ))
-    (switch-to-buffer-other-window error-buffer)
-    (while (not (null filelist))
-      (twelf-tag-file (car filelist) tags-buffer error-buffer)
-      (setq filelist (cdr filelist)))
-    (save-excursion
-      (set-buffer tags-buffer)
-      (save-buffer))))
-
-(defun twelf-tag-file (filename tags-buffer error-buffer)
-  "Deposit tag information for FILENAME in TAGS-BUFFER, errors in 
ERROR-BUFFER."
-  (let ((src-buffer (find-file-noselect filename))
-       file-start file-end end-of-id tag-string)
-    (save-excursion
-      (set-buffer tags-buffer)
-      (goto-char (point-max))
-      (insert "\f\n" filename ",0\n")
-      (setq file-start (point))
-      (save-excursion
-       (set-buffer src-buffer)
-       (goto-char (point-min))
-       (while (twelf-next-decl filename error-buffer)
-         (setq end-of-id (point))
-         (beginning-of-line 1)
-         (setq tag-string
-               (concat (buffer-substring (point) end-of-id)
-                       "\C-?" (current-line-absolute) "," (point) "\n"))
-         (goto-char end-of-id)
-         (if (not (twelf-end-of-par))
-             (let ((error-line (current-line-absolute)))
-               (save-excursion
-                 (set-buffer error-buffer)
-                 (goto-char (point-max))
-                 (insert filename ":" (int-to-string error-line)
-                         " Warning: missing period\n"))))
-         (save-excursion
-           (set-buffer tags-buffer)
-           (insert tag-string))))
-      (setq file-end (point-max))
-      (goto-char (- file-start 2))
-      (delete-char 1)
-      (insert (int-to-string (- file-end file-start)))
-      (goto-char (point-max)))))
-
-(defun twelf-next-decl (filename error-buffer)
-  "Set point after the identifier of the next declaration.
-Return the declared identifier or `nil' if none was found.
-FILENAME and ERROR-BUFFER are used if something appears wrong."
-  (let ((id nil)
-       end-of-id
-       beg-of-id)
-    (skip-twelf-comments-and-whitespace)
-    (while (and (not id) (not (eobp)))
-      (setq beg-of-id (point))
-      (if (zerop (skip-chars-forward *twelf-id-chars*))
-         ;; Not looking at id: skip ahead
-         (skip-ahead filename (current-line-absolute) "No identifier"
-                     error-buffer)
-       (setq end-of-id (point))
-       (skip-twelf-comments-and-whitespace)
-       (if (not (looking-at ":"))
-           ;; Not looking at valid decl: skip ahead
-           (skip-ahead filename (current-line-absolute end-of-id) "No colon"
-                       error-buffer)
-         (goto-char end-of-id)
-         (setq id (buffer-substring beg-of-id end-of-id))))
-      (skip-twelf-comments-and-whitespace))
-    id))
-
-(defun skip-ahead (filename line message error-buffer)
-  "Skip ahead when syntactic error was found.
-A parsable error message constited from FILENAME, LINE, and MESSAGE is
-deposited in ERROR-BUFFER."
-  (if error-buffer
-      (save-excursion
-       (set-buffer error-buffer)
-       (goto-char (point-max))
-       (insert filename ":" (int-to-string line) " Warning: " message "\n")
-       (setq *twelf-error-pos* (point))))
-  (twelf-end-of-par))
-
-(defun current-line-absolute (&optional char-pos)
-  "Return line number of CHAR-POS (default: point) in current buffer.
-Ignores any possible buffer restrictions."
-  (1+ (count-lines 1 (or char-pos (point)))))
-
-(defun new-temp-buffer (&optional name)
-  "Create or delete contents of buffer named \"*temp*\" and return it.
-Optional argument NAME specified an alternative name."
-  (if (not name) (setq name "*temp*"))
-  (if (get-buffer name)
-      (save-excursion
-       (set-buffer name)
-       (delete-region (point-min) (point-max))
-       (get-buffer name))
-    (get-buffer-create name)))
-
-(defun rev-relativize (filelist dir)
-  "Reverse and relativize FILELIST with respect to DIR."
-  (let ((newlist nil))
-    (while (not (null filelist))
-      (setq newlist
-           (cons (file-relative-name (car filelist) dir) newlist))
-      (setq filelist (cdr filelist)))
-    newlist))
-
-
-;;;----------------------------------------------------------------------
-;;; Twelf-SML mode
-;;;----------------------------------------------------------------------
-
-(defvar twelf-sml-mode-map nil
-  "The keymap used in Twelf-SML mode.")
-
-(cond ((not twelf-sml-mode-map)
-       ;;(setq twelf-sml-mode-map (full-copy-sparse-keymap comint-mode-map))
-       ;; fixed for Emacs 19.25.  -fp Thu Oct 27 09:08:44 1994
-       (setq twelf-sml-mode-map (copy-keymap comint-mode-map))
-       (install-basic-twelf-keybindings twelf-sml-mode-map)
-       ))
-
-(defconst twelf-sml-prompt-regexp "^\\- \\|^\\?\\- ")
-
-(defun expand-dir (dir)
-  "Expand argument and check that it is a directory."
-  (let ((expanded-dir (file-name-as-directory (expand-file-name dir))))
-    (if (not (file-directory-p expanded-dir))
-       (error "%s is not a directory" dir))
-    expanded-dir))
-
-(defun twelf-sml-cd (dir)
-  "Make DIR become the Twelf-SML process' buffer's default directory and
-furthermore issue an appropriate command to the inferior Twelf-SML process."
-  (interactive "DChange default directory: ")
-  (let ((expanded-dir (expand-dir dir)))
-    (save-excursion
-      (set-buffer (twelf-sml-process-buffer))
-      (setq default-directory expanded-dir)
-      (comint-simple-send (twelf-sml-process) (concat "Twelf.OS.chDir \"" 
expanded-dir "\";")))
-    ;;(pwd)
-    ))
-
-(defconst twelf-sml-cd-regexp "^\\s *cd\\s *\"\\([^\"]*\\)\""
-  "Regular expression used to match cd commands in Twelf-SML buffer.")
-
-(defun twelf-sml-directory-tracker (input)
-  "Checks input for cd commands and changes default directory in buffer.
-As a side-effect, it sets *twelf-last-region-sent* to NIL to indicate 
interactive
-input.  As a second side-effect, it resets the *twelf-error-pos*.
-Used as comint-input-sentinel in Twelf-SML buffer."
-  (if (twelf-input-filter input)
-      (setq *twelf-last-region-sent* nil))
-  (setq *twelf-last-input-buffer* (current-buffer))
-  (setq *twelf-error-pos* (marker-position (process-mark (twelf-sml-process))))
-  (cond ((string-match twelf-sml-cd-regexp input)
-        (let ((expanded-dir (expand-dir (substring input
-                                                   (match-beginning 1)
-                                                   (match-end 1)))))
-          (setq default-directory expanded-dir)
-          (pwd)))))
-
-(defun twelf-sml-mode ()
-  "Major mode for interacting with an inferior Twelf-SML process.
-
-The following commands are available:
-\\{twelf-sml-mode-map}
-
-An Twelf-SML process can be started with \\[twelf-sml].
-
-Customisation: Entry to this mode runs the hooks on twelf-sml-mode-hook.
-
-You can send queries to the inferior Twelf-SML process from other buffers.
-
-Commands:
-Return after the end of the process' output sends the text from the
-    end of process to point.
-Return before the end of the process' output copies the current line
-    to the end of the process' output, and sends it.
-Delete converts tabs to spaces as it moves back.
-Tab indents for Twelf; with argument, shifts rest
-    of expression rigidly with the current line.
-C-M-q does Tab on each line starting within following expression.
-Paragraphs are separated only by blank lines.  % start single comments,
-delimited comments are enclosed in %{...}%.
-If you accidentally suspend your process, use \\[comint-continue-subjob]
-to continue it."
-  (interactive)
-  (kill-all-local-variables)
-  (comint-mode)
-  (setq comint-prompt-regexp twelf-sml-prompt-regexp)
-  (setq comint-input-filter 'twelf-input-filter)
-  ;; changed for XEmacs 19.16 Sat Jun 13 11:28:53 1998
-  (add-hook 'comint-input-filter-functions 'twelf-sml-directory-tracker
-           nil t)
-  (twelf-mode-variables)
-
-  ;; For sequencing through error messages:
-  (make-local-variable '*twelf-error-pos*)
-  (setq *twelf-error-pos* (point-max))
-  ;; Workaround for problem with Lucid Emacs version of comint.el:
-  ;; must exclude double quotes " and must include $ and # in filenames.
-  (make-local-variable 'comint-match-partial-pathname-chars)
-  (setq comint-match-partial-pathname-chars
-       "^][<>{}()!^&*\\|?`'\" \t\n\r\b")
-
-  (setq major-mode 'twelf-sml-mode)
-  (setq mode-name "Twelf-SML")
-  (setq mode-line-process '(": %s"))
-  (use-local-map twelf-sml-mode-map)
-
-  (run-hooks 'twelf-sml-mode-hook))
-
-(defun twelf-sml (&optional cmd)
-  "Run an inferior Twelf-SML process in a buffer *twelf-sml*.
-If there is a process already running in *twelf-sml*, just
-switch to that buffer.  With argument, allows you to change the program
-which defaults to the value of twelf-sml-program.  Runs the hooks from
-twelf-sml-mode-hook (after the comint-mode-hook is run).
-
-Type \\[describe-mode] in the process buffer for a list of commands."
-  (interactive (list (and current-prefix-arg
-                         (read-string "Run Twelf-SML: " twelf-sml-program))))
-  (let ((cmd (or cmd twelf-sml-program)))
-    (cond ((not (comint-check-proc (twelf-sml-process-buffer)))
-          ;; process does not already exist
-          (set-buffer (apply 'make-comint "twelf-sml" cmd nil twelf-sml-args))
-          ;; in case we are using SML mode (for error tracking)
-          (if (boundp 'sml-buffer)
-              (set 'sml-buffer (twelf-sml-process-buffer)))
-          (twelf-sml-mode))))
-  (switch-to-buffer (twelf-sml-process-buffer)))
-
-(defun switch-to-twelf-sml (eob-p)
-  "Switch to the Twelf-SML process buffer.
-With argument, positions cursor at end of buffer."
-  (interactive "P")
-  (if (twelf-sml-process-buffer)
-      (pop-to-buffer (twelf-sml-process-buffer))
-      (error "No current process buffer. "))
-  (cond (eob-p
-        (push-mark)
-        (goto-char (point-max)))))
-
-(defun display-twelf-sml-buffer (&optional buffer)
-  "Display the Twelf-SML buffer so that the end of output is visible."
-  ;; Accept output from Twelf-SML process
-  (sit-for 1)
-  (let* ((twelf-sml-buffer (if (null buffer) (twelf-sml-process-buffer)
-                      buffer))
-        (_ (set-buffer twelf-sml-buffer))
-        (twelf-sml-process (twelf-sml-process))
-        (proc-mark (process-mark twelf-sml-process))
-        (_ (display-buffer twelf-sml-buffer))
-        (twelf-sml-window (get-buffer-window twelf-sml-buffer)))
-    (if (not (pos-visible-in-window-p proc-mark twelf-sml-window))
-       (progn
-         (push-mark proc-mark)
-         (set-window-point twelf-sml-window proc-mark)))))
-
-(defun twelf-sml-send-string (string)
-  "Send the given string to the Twelf-SML process."
-  (setq *twelf-last-input-buffer* (twelf-sml-process-buffer))
-  (comint-send-string (twelf-sml-process) string))
-
-(defun twelf-sml-send-region (start end &optional and-go)
-  "Send the current region to the inferior Twelf-SML process.
-Prefix argument means switch-to-twelf-sml afterwards.
-If the region is short, it is sent directly, via COMINT-SEND-REGION."
-  (interactive "r\nP")
-  (if (> start end)
-      (twelf-sml-send-region end start and-go)
-    ;; (setq twelf-sml-last-region-sent (list (current-buffer) start end))
-    (let ((cur-buffer (current-buffer))
-         (twelf-sml-buffer (twelf-sml-process-buffer)))
-      (switch-to-buffer twelf-sml-buffer)
-      ;; (setq sml-error-pos (marker-position (process-mark 
(twelf-sml-process))))
-      (setq *twelf-last-input-buffer* twelf-sml-buffer)
-      (switch-to-buffer cur-buffer))
-    (comint-send-region (twelf-sml-process) start end)
-    (if (not (string= (buffer-substring (1- end) end) "\n"))
-       (comint-send-string (twelf-sml-process) "\n"))
-    ;; Next two lines mess up when an Twelf error occurs, since the
-    ;; newline is not read and later messes up counting.
-    ;; (if (not and-go)
-    ;;  (comint-send-string (twelf-sml-process) "\n"))
-    (if and-go (switch-to-twelf-sml t)
-      (if twelf-sml-display-queries (display-twelf-sml-buffer)))))
-
-(defun twelf-sml-send-query (&optional and-go)
-  "Send the current declaration to the inferior Twelf-SML process as a query.
-Prefix argument means switch-to-twelf-sml afterwards."
-  (interactive "P")
-  (let* ((par (twelf-current-decl))
-        (query-start (nth 0 par))
-        (query-end (nth 1 par)))
-    (twelf-sml-set-mode 'TWELF)
-    (twelf-sml-send-region query-start query-end and-go)))
-
-(defun twelf-sml-send-newline (&optional and-go)
-  "Send a newline to the inferior Twelf-SML process.
-If a prefix argument is given, switches to Twelf-SML buffer afterwards."
-  (interactive "P")
-  (twelf-sml-send-string "\n")
-  (if and-go (switch-to-twelf-sml t)
-    (if twelf-sml-display-queries (display-twelf-sml-buffer))))
-
-(defun twelf-sml-send-semicolon (&optional and-go)
-  "Send a semi-colon to the inferior Twelf-SML process.
-If a prefix argument is given, switched to Twelf-SML buffer afterwards."
-  (interactive "P")
-  (twelf-sml-send-string ";\n")
-  (if and-go (switch-to-twelf-sml t)
-    (if twelf-sml-display-queries (display-twelf-sml-buffer))))
-
-(defun twelf-sml-status (&optional buffer)
-  "Returns the status of the Twelf-SML process.
-This employs a heuristic, looking at the contents of the Twelf-SML buffer.
-Results:
- NONE --- no process
- ML   --- ML top level
- TWELF  --- Twelf top level
- MORE --- asking whether to find the next solution
- UNKNOWN --- process is running, but can't tell status."
-  (let* ((twelf-sml-buffer (or buffer (twelf-sml-process-buffer)))
-        (twelf-sml-process (get-buffer-process twelf-sml-buffer)))
-    (if (null twelf-sml-process)
-       'NONE
-      (save-excursion
-       (set-buffer twelf-sml-buffer)
-       (let ((buffer-end (buffer-substring (max (point-min) (- (point-max) 3))
-                                           (point-max))))
-         (cond ((string-match "\\?- " buffer-end) 'TWELF)
-               ((string-match "\n- " buffer-end) 'ML)
-               ((string-match "More\\? " buffer-end) 'MORE)
-               (t 'UNKNOWN)))))))
-
-(defvar twelf-sml-init "Twelf.Config.load (Twelf.Config.read 
\"sources.cfg\");\n"
-  "Initial command sent to Twelf-SML process when started during 
twelf-sml-set-mode 'TWELF.")
-
-(defun twelf-sml-set-mode (mode &optional buffer)
-  "Attempts to read and if necessary correct the mode of the Twelf-SML buffer.
-This does not check if the status has been achieved.  It returns NIL
-if the status is unknown and T if it believes the status should have
-been achieved.  This allows for asynchronous operation."
-  (cond
-    ((eq mode 'ML)
-     (let ((status (twelf-sml-status)))
-       (cond ((eq status 'NONE) (twelf-sml) 't)
-            ((eq status 'ML) 't)
-            ((eq status 'TWELF) (twelf-sml-send-string "") 't)
-            ((eq status 'MORE) (twelf-sml-send-string "q\n") 't)
-            ((eq status 'UNKNOWN) nil))))
-    ((eq mode 'TWELF)
-     (let ((status (twelf-sml-status)))
-       (cond ((eq status 'NONE)
-             (twelf-sml)
-             (twelf-sml-send-string twelf-sml-init)
-             (twelf-sml-send-string "Twelf.top ();\n") 't)
-            ((eq status 'ML)
-             (twelf-sml-send-string "Twelf.top ();\n") 't)
-            ((eq status 'TWELF) 't)
-            ((eq status 'MORE) (twelf-sml-send-string "\n") 't)
-            ((eq status 'UNKNOWN) nil))))
-    (t (error "twelf-sml-set-mode: illegal mode %s" mode))))
-
-(defun twelf-sml-quit ()
-  "Kill the Twelf-SML process."
-  (interactive)
-  (kill-process (twelf-sml-process)))
-
-(defun twelf-sml-process-buffer ()
-  "Returns the current Twelf-SML process buffer."
-  (get-buffer "*twelf-sml*"))
-
-(defun twelf-sml-process (&optional buffer)
-  "Returns the current Twelf-SML process."
-  (let ((proc (get-buffer-process (or buffer (twelf-sml-process-buffer)))))
-    (or proc
-       (error "No current process."))))
-
-;;;----------------------------------------------------------------------
-;;; 2Twelf-SML minor mode for Twelf
-;;; Some keybindings now refer to Twelf-SML instead of the Twelf server.
-;;; Toggle with twelf-to-twelf-sml-mode
-;;;----------------------------------------------------------------------
-
-(defvar twelf-to-twelf-sml-mode nil
-  "Non-NIL means the minor mode is in effect.")
-
-(defun install-twelf-to-twelf-sml-keybindings (map)
-  ;; Process commands:
-  (define-key map "\C-c\C-r" 'twelf-sml-send-region)
-  (define-key map "\C-c\C-e" 'twelf-sml-send-query)
-  (define-key map "\C-c\C-m" 'twelf-sml-send-newline)
-  (define-key map "\C-c\n" 'twelf-sml-send-newline)
-  (define-key map "\C-c;" 'twelf-sml-send-semicolon)
-  (define-key map "\C-cd" 'twelf-sml-cd)
-  )
-
-(defvar twelf-to-twelf-sml-mode-map nil
-  "Keymap for twelf-to-twelf-sml minor mode.")
-
-(cond ((not twelf-to-twelf-sml-mode-map)
-       (setq twelf-to-twelf-sml-mode-map (make-sparse-keymap))
-       (install-basic-twelf-keybindings twelf-to-twelf-sml-mode-map)
-       (install-twelf-keybindings twelf-to-twelf-sml-mode-map)
-       ;; The next line shadows certain bindings to refer to
-       ;; Twelf-SML instead of the Twelf server.
-       (install-twelf-to-twelf-sml-keybindings twelf-to-twelf-sml-mode-map)))
-
-(defun twelf-to-twelf-sml-mode (&optional prefix)
-  "Toggles minor mode for sending queries to Twelf-SML instead of Twelf server.
-Specifically:   \\<twelf-to-twelf-sml-mode-map>
- \\[twelf-sml-send-query] (for sending queries),
- \\[twelf-sml-send-newline] (for sending newlines) and
- \\[twelf-sml-send-semicolon] (for sending `;')
-are rebound.
-
-Mode map
-========
-\\{twelf-to-twelf-sml-mode-map}
-"
-  (interactive "P")
-  (make-local-variable 'twelf-to-twelf-sml-mode)
-  (cond ((not (assq 'twelf-to-twelf-sml-mode minor-mode-alist))
-        (setq minor-mode-alist
-              (cons '(twelf-to-twelf-sml-mode " 2Twelf-SML")
-                    minor-mode-alist))))
-  (cond ((or (not twelf-to-twelf-sml-mode) prefix)
-        (setq twelf-to-twelf-sml-mode t)
-        (use-local-map twelf-to-twelf-sml-mode-map)
-        (run-hooks 'twelf-to-twelf-sml-mode-hook))
-       (t
-        (setq twelf-to-twelf-sml-mode nil)
-        (use-local-map twelf-mode-map))))
-
-;;;----------------------------------------------------------------------
-;;; Twelf mode menus
-;;; requires auc-menu utilities
-;;;----------------------------------------------------------------------
-
-(cond
- ((string-match "XEmacs" emacs-version) ;; XEmacs nee Lucid Emacs
-  (defun radio (label callback condition)
-    (vector label callback ':style 'radio ':selected condition))
-  (defun toggle (label callback condition)
-    (vector label callback ':style 'toggle ':selected condition))
-  (defun disable-form (label callback condition)
-    (vector label callback condition))
-  )
- (t ;; FSF Emacs 19
-  (defun radio (label callback condition)
-    (vector label callback t))
-  (defun toggle (label callback condition)
-    (vector label callback t))
-  (defun disable-form (label callback condition)
-    (cond ((symbolp condition) (vector label callback condition))
-         (t (vector label callback t))))
-  ))
-
-(defconst twelf-at-point-menu
-  '("At Point"
-    ["Constant" twelf-type-const t]
-    ;["Type" twelf-type-at-point nil]  ;disabled for Twelf 1.2
-    ;["Expected Type" twelf-expected-type-at-point nil] ;disabled
-    ;["List Completions" twelf-completions-at-point nil]       ;disabled
-    ;["Complete" twelf-complete nil] ;disabled
-    )
-  "Menu for commands applying at point.")
-
-(defconst twelf-server-state-menu
-  '("Server State"
-    ["Configure" twelf-server-configure t]
-    ["Interrupt" twelf-server-interrupt t]
-    ["Reset" twelf-reset t]
-    ["Start" twelf-server t]
-    ["Restart" twelf-server-restart t]
-    ["Quit" twelf-server-quit t])
-  "Menu for commands affecting server state.")
-
-(defconst twelf-error-menu
-  '("Error Tracking"
-    ["Next" twelf-next-error t]
-    ["Goto" twelf-goto-error t])
-  "Menu for error commands.")
-
-(defconst twelf-tags-menu
-  '("Tags"
-    ["Find" find-tag t]
-    ["Find Other Window" find-tag-other-window t]
-    ["Query Replace" tags-query-replace t]
-    ["Search" tags-search t]
-    ["Continue" tags-loop-continue t]
-    ["Create/Update" twelf-tag t])
-  "Menu for tag commands.")
-
-(defun twelf-toggle-server-display-commands ()
-  (setq twelf-server-display-commands (not twelf-server-display-commands)))
-
-(defconst twelf-options-menu
-  `("Options"
-    (, (toggle "Display Commands" '(twelf-toggle-server-display-commands)
-              'twelf-server-display-commands))
-    ("chatter"
-     (, (radio "0" '(twelf-set "chatter" 0) '(= twelf-chatter 0)))
-     (, (radio "1" '(twelf-set "chatter" 1) '(= twelf-chatter 1)))
-     (, (radio "2" '(twelf-set "chatter" 2) '(= twelf-chatter 2)))
-     (, (radio "3*" '(twelf-set "chatter" 3) '(= twelf-chatter 3)))
-     (, (radio "4" '(twelf-set "chatter" 4) '(= twelf-chatter 4)))
-     (, (radio "5" '(twelf-set "chatter" 5) '(= twelf-chatter 5)))
-     (, (radio "6" '(twelf-set "chatter" 6) '(= twelf-chatter 6))))
-    (, (toggle "doubleCheck" '(twelf-toggle-double-check)
-              '(string-equal twelf-double-check "true")))
-    ("Print."
-     (, (toggle "implicit" '(twelf-toggle-print-implicit)
-               '(string-equal twelf-print-implicit "true")))
-     ["depth" (twelf-set-parm "Print.depth") t]
-     ["length" (twelf-set-parm "Print.length") t]
-     ["indent" (twelf-set-parm "Print.indent") t]
-     ["width" (twelf-set-parm "Print.width") t])
-    ("Prover."
-     ["strategy" (twelf-set-parm "Prover.strategy") t]
-     ["maxSplit" (twelf-set-parm "Prover.maxSplit") t]
-     ["maxRecurse" (twelf-set-parm "Prover.maxRecurse") t])
-    ;;["Trace" nil nil]
-    ;; (, (radio "0" '(twelf-set "trace" 0) '(= twelf-trace 0)))
-    ;; (, (radio "1" '(twelf-set "trace 1) '(= twelf-trace 1)))
-    ;; (, (radio "2" '(twelf-set "trace" 2) '(= twelf-trace 2))))
-    ;;["Untrace" nil nil]
-    ;;(, (disable-form "Untrace" '(twelf-set "trace" 0)
-    ;;        '(not (= twelf-trace 0))))
-    ["Reset Menubar" twelf-reset-menu t])
-  "Menu to change options in Twelf mode.")
-
-(defconst twelf-timers-menu
-  '("Timing"
-    ["Show and Reset" twelf-timers-show t]
-    ["Check" twelf-timers-check t]
-    ["Reset" twelf-timers-reset t]))
-
-;(autoload 'toggle-twelf-font-immediate "twelf-font"
-;  "Toggle experimental immediate highlighting in font-lock mode.")
-(autoload 'twelf-font-fontify-decl "twelf-font"
-  "Fontify current declaration using font-lock minor mode.")
-(autoload 'twelf-font-fontify-buffer "twelf-font"
-  "Fontify current buffer using font-lock minor mode.")
-
-(defconst twelf-syntax-menu
-  `("Syntax Highlighting"
-    ["Highlight Declaration" twelf-font-fontify-decl t]
-    ["Highlight Buffer" twelf-font-fontify-buffer t]
-    ;;(, (toggle "Immediate Highlighting" 'toggle-twelf-font-immediate
-    ;;'font-lock-mode))
-    )
-  "Menu for syntax highlighting in Twelf mode.")
-
-(easy-menu-define twelf-menu (list twelf-mode-map)
-  "Menu for Twelf mode.
-This may be selected from the menubar.  In XEmacs, also bound to Button3."
-  (list
-   "Twelf"
-   ["Display Server" twelf-server-display t]
-   ["Check Configuration" twelf-save-check-config t]
-   ["Check File" twelf-save-check-file t]
-   ["Check Declaration" twelf-check-declaration t]
-   twelf-at-point-menu
-   twelf-error-menu
-   twelf-options-menu
-   twelf-syntax-menu
-   twelf-tags-menu
-   twelf-timers-menu
-   twelf-server-state-menu
-   ["Info" twelf-info t]))
-
-(defun twelf-add-menu ()
-  "Add Twelf menu to menubar."
-  (easy-menu-add twelf-menu twelf-mode-map))
-
-(defun twelf-remove-menu ()
-  "Remove Twelf menu from menubar."
-  (easy-menu-remove twelf-menu))
-
-(defun twelf-reset-menu ()
-  "Reset Twelf menu."
-  (twelf-remove-menu)
-  (twelf-add-menu))
-
-;;;----------------------------------------------------------------------
-;;; Twelf Server mode menu
-;;;----------------------------------------------------------------------
-
-(easy-menu-define twelf-server-menu (list twelf-server-mode-map)
-  "Menu for Twelf Server mode.
-This may be selected from the menubar.  In XEmacs, also bound to Button3."
-  (list
-   "Twelf-Server"
-   ;; ["Display Server" twelf-server-display t]
-   ["Check Configuration" twelf-save-check-config t]
-   ;; ["Check File" twelf-save-check-file nil]
-   ;; ["Check Declaration" twelf-check-declaration nil]
-   ;; ["Check Query" twelf-check-query nil]
-   ;; ["Solve Query" twelf-solve-query nil]
-   ;; ["At Point" () nil]
-   twelf-error-menu
-   twelf-options-menu
-   twelf-tags-menu
-   twelf-server-state-menu
-   ["Info" twelf-info t]))
-
-(defun twelf-server-add-menu ()
-  "Add Twelf menu to menubar."
-  (easy-menu-add twelf-server-menu twelf-server-mode-map))
-
-(defun twelf-server-remove-menu ()
-  "Remove Twelf menu from menubar."
-  (easy-menu-remove twelf-server-menu))
-
-(defun twelf-server-reset-menu ()
-  "Reset Twelf menu."
-  (twelf-server-remove-menu)
-  (twelf-server-add-menu))
-
-(provide 'twelf-old)
diff --git a/twelf/twelf.el b/twelf/twelf.el
deleted file mode 100644
index 236846f..0000000
--- a/twelf/twelf.el
+++ /dev/null
@@ -1,209 +0,0 @@
-;; twelf.el  Proof General instance for Twelf
-;;
-;; Copyright (C) 2000 LFCS Edinburgh.
-;; License:   GPL (GNU GENERAL PUBLIC LICENSE)
-;; Author:    David Aspinall <David.Aspinall@ed.ac.uk>
-;;
-;; $Id$
-;;
-;;
-;; TODO:
-;;   Info doc menu entry
-;;   X-Symbol upgrade/test?  Mule XE better?
-;;
-
-
-(require 'proof-easy-config)            ; easy configure mechanism
-
-(require 'twelf-font)                  ; font lock configuration
-;; (require 'twelf-old)
-;; FIXME: put parts of old code into twelf-syntax or similar
-
-;;
-;; User configuration settings for Twelf PG
-;;
-(defcustom twelf-root-dir
-  "/usr/local/twelf/"
-  "*Root of twelf installation.  Default /usr/local/twelf suits RPM package."
-  :type 'file
-  :group 'twelf)
-
-(defcustom twelf-info-dir
-  (concat twelf-root-dir "doc/info/")
-  "*Directory of Twelf Infor files."
-  :type 'file
-  :group 'twelf)
-
-;;
-;; Instantiation of Proof General
-;;
-(proof-easy-config 'twelf "Twelf"
- proof-prog-name                "twelf-server"
- proof-assistant-home-page       "http://www.cs.cmu.edu/~twelf/";
-
- proof-terminal-char             ?\.
- proof-script-comment-start             "%"    ;; for inserting comments
- proof-script-comment-end               ""
- proof-script-comment-start-regexp      "%[%{ \t\n\f]" ;; recognizing
- proof-script-comment-end-regexp        "%}\\|\n"      ;; comments
-
- proof-shell-auto-terminate-commands nil ; server commands don't end with .
- proof-shell-strip-crs-from-input nil   ; server needs CRs with readDecl
-
- proof-auto-multiple-files       t
- proof-shell-cd-cmd              "OS.chDir %s"
- proof-shell-interrupt-regexp    "interrupt"
-
- proof-shell-annotated-prompt-regexp "%% [OA][KB]O?R?T? %%\n"
- proof-shell-error-regexp        "Server error:"
- proof-shell-quit-cmd            "quit"
- proof-shell-restart-cmd        "reset"
-
- ;; "Eager annotations" mark messages Proof General should display
- ;; or recognize while the prover is pontificating
- proof-shell-eager-annotation-start
- "^\\[Opening \\|\\[Closing "
- proof-shell-eager-annotation-end "\n"
-
- ;; next setting is just to prevent warning
- proof-save-command-regexp     proof-no-regexp)
-
-
-;; unset: all of the interactive proof commands
-;; These don't really apply, I don't think, because Twelf
-;; only has fully automatic prover at the moment.
-;; Also, there is no concept of "undo" to remove declarations
-;; (can simply repeat them, tho.)
-;; proof-goal-command-regexp       "^%theorem"
-;; proof-save-command-regexp       "" ;; FIXME: empty?
-;; proof-goal-with-hole-regexp     "^%theorem\w-+\\(.*\\)\w-+:"
-;; proof-save-with-hole-regexp     "" ;; FIXME
-;; proof-non-undoables-regexp
-;; proof-goal-command              "%theorem %s."
-;; proof-save-command              "%prove "
-;; remaining strings are left over from Isabelle example
-;; proof-kill-goal-command         "Goal \"PROP no_goal_set\";"
-;; proof-showproof-command         "pr()"
-;; proof-undo-n-times-cmd          "pg_repeat undo %s;"
-;; proof-shell-start-goals-regexp  "Level [0-9]"
-;; proof-shell-end-goals-regexp    "val it"
-;; proof-shell-init-cmd
-;; proof-shell-proof-completed-regexp "^No subgoals!"
-
-
-;;
-;; Twelf server doesn't take declarations directly:
-;; we need to pre-process script input slightly
-;;
-
-(defun twelf-add-read-declaration ()
-  "A hook value for `proof-shell-insert-hook'."
-  (if (eq action 'proof-done-advancing)
-      (setq string (concat "readDecl\n" string))))
-
-(add-hook 'proof-shell-insert-hook 'twelf-add-read-declaration)
-
-
-;;
-;; Syntax table
-;;
-
-;; Taken from old Emacs mode, renamed fns to be convention compliant
-(defun twelf-set-syntax (char entry)
-  (modify-syntax-entry char entry twelf-mode-syntax-table))
-(defun twelf-set-word  (char) (twelf-set-syntax char "w   "))
-(defun twelf-set-symbol (char) (twelf-set-syntax char "_   "))
-
-(defun twelf-map-string (func string)
-  (if (string= "" string)
-      ()
-    (funcall func (string-to-char string))
-    (twelf-map-string func (substring string 1))))
-
-;; A-Z and a-z are already word constituents
-;; For fontification, it would be better if _ and ' were word constituents
-(twelf-map-string
- 'twelf-set-word "!&$^+/<=>?@~|#*`;,-0123456789\\") ; word constituents
-(twelf-map-string 'twelf-set-symbol "_'")         ; symbol constituents
-;; Delimited comments are %{ }%, see 1234 below.
-(twelf-set-syntax ?\ "    ")            ; whitespace
-(twelf-set-syntax ?\t "    ")           ; whitespace
-; da: this old entry is wrong: it says % always starts a comment
-;(twelf-set-syntax ?% "< 14")            ; comment begin
-; This next one is much better,
-(twelf-set-syntax ?% ". 14")            ; comment begin/second char
-(twelf-set-syntax ?\n ">   ")           ; comment end
-(twelf-set-syntax ?: ".   ")            ; punctuation
-(twelf-set-syntax ?. ".   ")            ; punctuation
-(twelf-set-syntax ?\( "()  ")           ; open delimiter
-(twelf-set-syntax ?\) ")(  ")           ; close delimiter
-(twelf-set-syntax ?\[ "(]  ")           ; open delimiter
-(twelf-set-syntax ?\] ")[  ")           ; close delimiter
-;(twelf-set-syntax ?\{ "(}2 ")           ; open delimiter
-;(twelf-set-syntax ?\} "){ 3")           ; close delimiter
-;; Actually, strings are illegal but we include:
-(twelf-set-syntax ?\" "\"   ")          ; string quote
-;; \ is not an escape, but a word constituent (see above)
-;;(twelf-set-syntax ?\\ "/   ")         ; escape
-
-
-
-;;
-;; Syntax highlighting (from twelf-old.el, NEEDS WORK)
-;;
-;; Highlighting is maybe a nuisance for twelf because of its funny syntax.
-;; But font lock could perhaps be got to work with recent versions.
-;; That would be better than the present mechanism, which doesn't lock,
-;; doesn't work well with X Symbol (which really needs locking), and
-;; even breaks the background colouring for some reason (presumably
-;; the Twelf faces)
-
-(require 'twelf-font)
-(add-hook 'twelf-mode-hook 'twelf-mode-extra-config)
-
-(defun twelf-mode-extra-config ()
-  (make-local-hook 'font-lock-after-fontify-buffer-hook)
-  (add-hook 'font-lock-after-fontify-buffer-hook
-           'twelf-font-fontify-buffer nil 'local)
-  (font-lock-mode))
-
-(defconst twelf-syntax-menu
-  '("Syntax Highlighting"
-    ["Highlight Declaration" twelf-font-fontify-decl t]
-    ["Highlight Buffer" twelf-font-fontify-buffer t]
-    ;;(, (toggle "Immediate Highlighting" 'toggle-twelf-font-immediate
-    ;;'font-lock-mode))
-      )
-  "Menu for syntax highlighting in Twelf mode.")
-
-
-;;
-;; Setting Twelf options via Proof General
-;;
-
-(defpacustom chatter 1
-  "Value for chatter."
-  :type 'integer
-  :setting "set chatter %i")
-
-(defpacustom double-check nil
-  "Double-check declarations after type reconstruction."
-  :type 'boolean
-  :setting "set doubleCheck %b")
-(defpacustom print-implicit nil
-  "Show implicit arguments."
-  :type 'boolean
-  :setting "set Print.implict %b")
-
-;; etc
-
-
-;;
-;; Twelf menu
-;;
-
-(defpgdefault menu-entries
-  (cdr twelf-syntax-menu))
-
-
-(provide 'twelf)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]