casl-mode.el revision 876096baba5bb126049ecde28ff6644fae78d7a3
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;;;###autoload
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(autoload 'turn-on-casl-indent "casl-indent" "Turn on CASL indentation." t)
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;;;;;;;;;;;;;;;;;;;;;;;;;;
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; Copyright: (c) Heng Jiang, Klaus L�ttich, Uni Bremen 2007
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; License: LGPL, see LICENSE.txt or LIZENZ.txt
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; Contact: hets-users@informatik.uni-bremen.de
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;;;;;;;;;;;;;;;;;;;;;;;;;;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; Version number
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Version of CASL-Mode")
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich "Major mode for editing (heterogeneous) CASL specifications."
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(defvar casl-mode-map (let ((keymap (make-keymap)))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (define-key keymap "\C-c\C-n" 'casl-compile-goto-next-error)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Keymap for CASL major mode")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; Are we running FSF Emacs or XEmacs?
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "non-nil if we are running XEmacs, nil otherwise.")
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang;; ====================== S Y N T A X T A B L E ==================
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang;; Syntax table for CASL major mode
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang "Syntax table for CASL mode.")
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang ;; Indicate that underscore may be part of a word
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang ;; Some of these are actually OK by default.
18d7a52788fff16e6f8d5a9f13dfb87080a3e245Heng Jiang "!#$&*+.,/\\\\:<=>?@^|~")
9312e4bac069d53091c92e20b03dcb4e07f40f9fHeng Jiang ;; commenting-out plus including other kinds of comment
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang;; Various mode variables.
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich (setq comment-start-skip "%[{[]") ;; %[%{[]() *")
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang (setq comment-indent-function 'casl-comment-indent)
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich (set (make-local-variable 'comment-end-skip) "[\]}]%")
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang;; Find the indentation level for a comment.
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang ;; if the line is blank, put the comment at the beginning,
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang ;; else at comment-column
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang (if (bolp) 0 (max (1+ (current-column)) comment-column)))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; ============= K E Y W O R D H I G H L I G H T I N G ============
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang(defvar casl-black-komma-face 'casl-black-komma-face
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang "Face name to use for black komma.")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(defvar casl-annotation-face 'casl-annotation-face
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "CASL mode face for Annotations")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(setq casl-annotation-face 'font-lock-constant-face)
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang(setq casl-name-face 'font-lock-variable-name-face)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(defvar casl-library-name-face 'casl-library-name-face)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(setq casl-library-name-face 'font-lock-type-face)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang(defvar casl-other-name-face 'casl-other-name-face)
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang (setq casl-other-name-face 'casl-blue-komma-face)
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang (setq casl-other-name-face 'font-lock-function-name-face)
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang(defvar casl-string-char-face 'casl-string-char-face)
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang(setq casl-string-char-face 'font-lock-string-face)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; Syntax highlighting of CASL
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder;; "Warning: Do not design an element of font-lock-keywords to match
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder;; text which spans lines; this does not work reliably. While
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder;; font-lock-fontify-buffer handles multi-line patterns correctly,
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder;; updating when you edit the buffer does not, since it considers
20bcb42e212faef728ac606e69dc1f9de55a9988Heng Jiang;; text one line at a time." (from the GNU Emacs Lisp Reference Manual)
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; order of all the following highlighting rules is significant,
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; ony change if really needed
9312e4bac069d53091c92e20b03dcb4e07f40f9fHeng Jiang '("%%.*$" (0 (symbol-value 'casl-comment-face) keep t)))
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich "Special Comment")
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich;; Alternativ for Annotation
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich ;; always highlight closing )%
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\(\)%\\)[^%]"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("%\\w+\\b[^\n]*$"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("[^%]\\(%\([^)]*?\)%\\)[^%]"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (1 (symbol-value 'casl-annotation-face) keep t))
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich ;; %word( ... )%
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\(%\\sw+\([^)]*?\)%\\)[^%]"
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich "Annotation")
20bcb42e212faef728ac606e69dc1f9de55a9988Heng Jiang ;; reserved keyword
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\(\\<\\|\\s-+\\)\\(/\\\\\\|\\\\/\\|=>\\|<=>\\|and\\|arch\\|assoc\\|behaviourally\\|closed\\|comm\\|else\\|end\\|exists\\|fit\\|flexible\\|forall\\|free\\|generated\\|given\\|hide\\|idem\\|if\\|local\\|modality\\|not\\|orElse\\|refined\\|refinement\\|reveal\\|spec\\|then\\|to\\|unit\\|via\\|view\\|when\\|within\\|with\\|\\(\\(op\\|pred\\|var\\|type\\|sort\\)s?\\)\\)[,;]?[ \t\n]"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("[,;.]" (0 (symbol-value 'casl-black-komma-face) t t))
20bcb42e212faef728ac606e69dc1f9de55a9988Heng Jiang ;; after forall don't highlight
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\\bforall\\b\\(.*\\)"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang (1 (symbol-value 'casl-black-komma-face) keep t))
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder ;; Keywords of loading Library
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\(\\<\\|\\s-+\\)\\(logic\\|from\\|get\\|library\\|version\\)[ :\t\n]+"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Library and Logic name
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\b\\(library\\|logic\\)\\s-+\\(\\(\\w\\|/\\)+\\)\\(\\s-*->\\s-*\\(\\(\\w\\|/\\)+\\)\\)?[ \t\n]"
f5c7d6d3f873962ccbe63276243e88030ce8801dHeng Jiang (2 (symbol-value 'casl-library-name-face) keep t)
f5c7d6d3f873962ccbe63276243e88030ce8801dHeng Jiang (5 (symbol-value 'casl-library-name-face) keep t))
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang ;; name of from, get and given
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\b\\(get\\|given\\)[ \t\n]+\\(\\(\\sw+\\s-*\\(,[ \t\n]*\\|$\\)\\)+\\)\\(=\\|:\\|$\\)"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\bfrom[ \t]+\\(.+\\)\\(get\\|$\\)"
9312e4bac069d53091c92e20b03dcb4e07f40f9fHeng Jiang (1 (symbol-value 'casl-library-name-face) keep t))
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang ;; the name of specification and view
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\\(\\<\\|\\[\\)\\(spec\\|view\\)\\s-+\\(\\w+\\)[ \t]*\\(\\[\\s-*\\([A-Z]\\w*\\).*\\s-*\\]\\)?\\s-*.*\\([]=:]\\|::=\\)"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; then, and + name
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\b\\(and\\|then\\)[ \t\n]*\\([A-Z]\\w*\\)\\s-*\\(\\[\\([A-Z]\\sw*\\).*\\]\\)?"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder ;; names before and after to
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("[ \t\n]*\\(\\sw+\\)[ \t\n]+to[ \t\n]+\\(\\(\\sw+\\)\\s-*\\(\\[\\([A-Z]\\sw*\\).*\\]\\)?[, \t]*\\)?"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder ;; instance name of specification
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang '("\\<spec.+=\\s-*\\(%\\sw+\\s-*\\)?[ \t\n]*\\([A-Z]\\w*\\)\\s-*\\(\\[\\s-*\\([A-Z]\\w*\\).*\\s-*\\]\\)?"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder ;; Basic signature: sort X, Y, Z
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("\\(\\<\\|\\s-+\\)sorts?[ \t\n]+\\(\\(\\sw+\\s-*\\(\\[\\s-*\\(\\sw\\|,\\)+\\s-*\\]\\s-*\\)?\\(,\\(\\s-\\)*\\|$\\|<\\|;\\|=\\)\\(=\\|<\\|;\\|,\\)*[ \t\n]*\\)+\\)"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Basic signature: op ,pred and var name
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\\(\\(^[^.{%]\\)\\s-*\\|\\bops?\\b\\|\\bpreds?\\b\\|\\bvars?\\b\\)\\([^:{()\n]*\\)\\(\(.*\)\\)?:\\??[^?.:=%].*;?[ \t]*$"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (2 (symbol-value 'casl-other-name-face) keep t)
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang ;; highlight a line with , an end
20bcb42e212faef728ac606e69dc1f9de55a9988Heng Jiang '("^\\(\\(\\(__\\s-*[^_\n]+\\s-*__\\|[^.,:>\n]+\\)\\s-*,\\s-*\\)+\\)$"
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang ;; names before and after '|->'
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder '("[ \t\n]*\\(__[^|_]+__\\|[^[ \t\n]+\\)\\s-*\\(\\[\\([A-Z]\\w*\\).*\\]\\)?[ \t\n]*|->[ \t\n]*\\(__[^|_]+__\\|[^[ \t\n]+\\)\\s-*\\(\\[\\([A-Z]\\w*\\).*\\]\\)?[, \t]*"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (1 (symbol-value 'casl-other-name-face) keep t)
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (3 (symbol-value 'casl-other-name-face) keep t)
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (4 (symbol-value 'casl-other-name-face) keep t)
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (6 (symbol-value 'casl-other-name-face) keep t))
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang ;; type name
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\\(\\btype\\|\\bfree type\\)?\\s-+\\(\\sw+\\)\\s-+\\(\\sw*\\|\\[\\(\\s-*\\sw+\\s-*\\)\\]\\)[ \t\n]*::?=[ \t\n]*\\(\\(\_\_[^_]+\_\_\\|[^|][^(|]+\\)\\s-*\\(\(.*\)\\)?\\)"
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (2 (symbol-value 'casl-other-name-face) keep t)
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang ;; constructor
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang '("\|\\s-+\\(\_\_[^|_]+\_\_\\|[^|][^(|]+\\)\\s-*\\(\([^|]+\)\\)?[ \t\n]*"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\(\\(\\(\\sw\\|,\\)*\\)\\s-*:\\??[^)]*\)"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang '("\([^;]*;\\s-*\\(\\sw+\\)\\s-*:\\??.*\)"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang "Reserved keywords highlighting")
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang;; String and Char
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (list '("\\(\\(\"\\|^>[ \t]*\\\\\\)\\([^\"\\\\\n]\\|\\\\.\\)*\\(\"\\|\\\\[ \t]*$\\)\\|'\\([^'\\\\\n]\\|\\\\.[^'\n]*\\)'\\)"
1c7aefd3163ebc1cd1f56ed93f39a7d688b97fedHeng Jiang (0 (symbol-value 'casl-string-char-face) keep t))
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder "Syntax highlighting of String and Char")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; Define default highlighting level
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; (defvar casl-font-lock-syntax-highligthing casl-font-lock-keywords
9312e4bac069d53091c92e20b03dcb4e07f40f9fHeng Jiang(defvar casl-font-lock-syntax-highligthing (symbol-value 'casl-font-lock-string)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Default syntax highlighting level in CASL mode")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; ======================= R U N H E T S =======================
79a7f2de0a7e933d26b64d35b2801618ff015954Klaus Luettich "*the additional options for running hets.")
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Run hets process to compile the current CASL file."
d6814e7c7056c8078084f4fd0c627bfcebe935b0Heng Jiang (setq run-option (concat run-option current " "))))
d6814e7c7056c8078084f4fd0c627bfcebe935b0Heng Jiang (setq hets-command (concat casl-hets-program run-option casl-hets-file-name))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Pop up the compilation buffer.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; (display-buffer outbuf nil t)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; (set-buffer outbuf)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Start the compilation.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Set the EMACS variable, but
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; don't override users' setting of $EMACS.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (proc (start-process-shell-command "hets-compile" outbuf
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (set-process-sentinel proc 'casl-compilation-sentinel)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (set-process-filter proc 'casl-compilation-filter)
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder "Run hets process with options (from casl-hets-options) to compile the
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang current CASL file."
d6814e7c7056c8078084f4fd0c627bfcebe935b0Heng Jiang (setq run-option-r (concat run-option-r " " option2))
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang "Run hets process with -g and other options (from variable casl-hets-options)
262ff0b92f2ba957c821ce8d9b4ee2f554cdf701Heng Jiang to compile the current CASL file."
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang;; sentinel and filter of asynchronous process of hets
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang;; Called when compilation process changes state.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang "Sentinel for compilation buffers."
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; buffer killed
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; save-excursion isn't the right thing if
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; process-buffer is current-buffer
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Write something in the compilation buffer
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; and hack its mode line.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (casl-compilation-handle-exit (process-status proc)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Since the buffer and mode line will show that the
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; process is dead, we can delete it now. Otherwise it
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; will stay around until M-x list-processes.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; (setq compilation-in-progress (delq proc compilation-in-progress))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang;; show the message from hets compile direct on *hets-run* buffer
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Insert the text, advancing the process marker.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang(defun casl-compilation-handle-exit (process-status exit-status msg)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang "Write msg in the current buffer and hack its mode-line-process."
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Record where we put the message, so we can ignore it
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; later on.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; (goto-char omax)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (insert " at " (substring (current-time-string) 0 19))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (setq mode-line-process (format ":%s [%s]" process-status (cdr status)))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Force mode line redisplay soon.
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; Automatically parse (and mouse-highlight) error messages:
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (message "%s errors have been found." (length casl-error-list)))
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang;; also functions with old hets-program?
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Error Parser"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;;;(pop-to-buffer compiler-buffer)
d6814e7c7056c8078084f4fd0c627bfcebe935b0Heng Jiang (if (not (or (looking-at "Fail") (and (looking-at "\\*\\*\\*") (looking-at "[0-9]+\\.[0-9]+-[0-9]+\\.[0-9]*"))))
b3c65285705f6d184b5f8b00b1a328d96b6b19c5Heng Jiang (if (not (search-forward ":" (save-excursion (end-of-line) (point)) t 1))
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang (re-search-backward "\\(\(\\|\\s-+\\)\\([^.]+\\.\\(casl\\|het\\)\\)" nil t 1)
f5ca7e49a6d1602c3f3a12ea6723fa67fea5757aHeng Jiang (re-search-forward ":\\([0-9]+\\)\\.\\([0-9]+\\)\\(-[0-9]+\\.[0-9]*\\)?[:,]" (save-excursion (end-of-line) (point)) t 1)
b3c65285705f6d184b5f8b00b1a328d96b6b19c5Heng Jiang (when (not (string= (match-string-no-properties 0) ""))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (setq error-colnum (match-string-no-properties 2))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang (nconc casl-error-list (list (list file-name error-line error-colnum error-window-point))))
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang "search the next error position from error-list, and move to it."
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; if error-list is empty ...
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (if (member (get-buffer "*hets-run*") (buffer-list))
876096baba5bb126049ecde28ff6644fae78d7a3Christian Maeder (message "this file have not yet been compiled."))
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang ;; (message "DEBUG<Goto Error>: file: %s, line: %s, column: %s" error-file-name error-line error-column)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; if the file already opened ...
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (pop-to-buffer (get-file-buffer error-file-name))
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; switch to hets-run window to jump to next error message
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ;; return to current file
c51b5677113ce7260c44afb3c5932eea6c875e27Heng Jiang (move-to-column (- (string-to-number error-column) 1))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (message "goto next error... line: %s column: %s" error-line error-column)
b3c65285705f6d184b5f8b00b1a328d96b6b19c5Heng Jiang (setq casl-error-list (nconc casl-error-list (list this-error)))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; ================= C A S L M A J O R M O D E ===============
f5ca7e49a6d1602c3f3a12ea6723fa67fea5757aHeng Jiang;; casl major mode setup
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; Definition of CASL major mode
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang "Major mode for editing CASL models"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Load keymap
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Load syntax table
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; (casl-create-syntax-table)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Highlight CASL keywords
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; Support for compile.el
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; We just substitute our own functions to go to the error.
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang (set (make-local-variable 'compile-auto-highlight) 40)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ;; FIXME: This has global impact! -stef
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang;; CASL-mode ends here