b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;;;###autoload
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;;;;;;;;;;;;;;;;;;;;;;;;;;
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; $Haeder$
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Copyright: (c) Heng Jiang, Uni Bremen 2007
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; License: LGPL, see LICENSE.txt or LIZENZ.txt
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Contact: hets-users@informatik.uni-bremen.de
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;;;;;;;;;;;;;;;;;;;;;;;;;;
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Version number
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defconst hpf-mode-version "0.1"
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Version of HPF-Mode")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defgroup hpf nil
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Major mode for editing (heterogeneous) HPF specifications."
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang :group 'languages
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang :prefix "hpf-")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-mode-hook nil)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-mode-map (let ((keymap (make-keymap)))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (define-key keymap "\C-c\C-c" 'comment-region)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang keymap)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Keymap for HPF major mode")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Are we running FSF Emacs or XEmacs?
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-running-xemacs
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (string-match "Lucid\\|XEmacs" emacs-version)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "non-nil if we are running XEmacs, nil otherwise.")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; ====================== S Y N T A X T A B L E ==================
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Syntax table for HPF major mode
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-mode-syntax-table nil
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Syntax table for HPF mode.")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(if hpf-mode-syntax-table
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ()
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (let ((table (make-syntax-table)))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Indicate that underscore may be part of a word
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (modify-syntax-entry ?_ "w" table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (modify-syntax-entry ?\t " " table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (modify-syntax-entry ?\" "\"" table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (modify-syntax-entry ?\' "\'" table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (mapcar (lambda (x)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (modify-syntax-entry x "_" table))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Some of these are actually OK by default.
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "!#$&*+.,/\\\\:<=>?@^|~")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; commenting-out plus including other kinds of comment
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq hpf-mode-syntax-table table))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang )
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Various mode variables.
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defun hpf-vars ()
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (kill-all-local-variables)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'comment-start)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq comment-start "#")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'comment-padding)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq comment-padding 0)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'comment-start-skip)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq comment-start-skip "#") ;; %[%{[]() *")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'comment-column)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq comment-column 40)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'comment-indent-function)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; ============= K E Y W O R D H I G H L I G H T I N G ============
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defface hpf-black-komma-face
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang `((t (:foreground "black")))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ""
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang :group 'basic-faces)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defface hpf-blue-komma-face
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang `((t (:foreground "blue")))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ""
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang :group 'basic-faces)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-black-komma-face 'hpf-black-komma-face
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Face name to use for black komma.")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-annotation-face 'hpf-annotation-face
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "HPF mode face for Annotations")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-annotation-face 'font-lock-constant-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-name-face 'hpf-name-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-name-face 'font-lock-variable-name-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-keyword-face 'hpf-keyword-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-keyword-face 'font-lock-keyword-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-library-name-face 'hpf-library-name-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-library-name-face 'font-lock-type-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-builtin-face 'hpf-builtin-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-builtin-face 'font-lock-builtin-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-comment-face 'hpf-comment-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-comment-face 'font-lock-comment-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-other-name-face 'hpf-other-name-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(if (featurep 'xemacs)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq hpf-other-name-face 'hpf-blue-komma-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq hpf-other-name-face 'font-lock-function-name-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-string-char-face 'hpf-string-char-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(setq hpf-string-char-face 'font-lock-string-face)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Syntax highlighting of HPF
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; "Warning: Do not design an element of font-lock-keywords to match
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; text which spans lines; this does not work reliably. While
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; font-lock-fontify-buffer handles multi-line patterns correctly,
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; updating when you edit the buffer does not, since it considers
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; text one line at a time." (from the GNU Emacs Lisp Reference Manual)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; order of all the following highlighting rules is significant,
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; ony change if really needed
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Comment
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defconst hpf-font-lock-specialcomment
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (list
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang '("#.*$" (0 (symbol-value 'hpf-comment-face) keep t)))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Special Comment")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defconst hpf-font-lock-keywords
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (append hpf-font-lock-specialcomment
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (list
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("[,;.]" (0 (symbol-value 'casl-black-komma-face) t t))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; commands
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)\\(use\\|dg\\|dg-all\\|show-dg-goals\\|show-theory-goals\\|show-theory\\|node-info\\|show-taxonomy\\|show-concepts\\|translate\\|prover\\|proof-script\\|cons-check\\|prove\\|prove-all\\|begin-script\\|end-script\\)[ \t\n]"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (2 (symbol-value 'hpf-keyword-face) keep t))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; axiom-selection
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)\\(with\\|excluding\\)\\s-+\\(.*\\)[ \t\n]"
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (2 (symbol-value 'hpf-keyword-face) keep t))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; dg-commands GOALs
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\dg\\|dg-all\\)\\s-+\\(auto\\|glob-subsume\\|glob-decomp\\|loc-infer\\|loc-decomp\\|hide-thm\\|thm-hide\\|basic\\)\\s-+\\(\\w+\\)?\\(->\\([0-9]+\\)\\)?\\(->\\(\\w+\\)\\)?[ \t\n]"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (2 (symbol-value 'hpf-keyword-face) keep t)
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (3 (symbol-value 'hpf-other-name-face) keep t)
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (5 (symbol-value 'hpf-other-name-face) keep t)
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (7 (symbol-value 'hpf-other-name-face) keep t))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Reserved keywords highlighting")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang(defconst hpf-font-lock-idname
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (append hpf-font-lock-keywords
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (list
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; use PATH
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)use\\s-+\\(.*\\)$"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (2 (symbol-value 'hpf-library-name-face) keep t))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; goal
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; See dg-commands
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; COMORPHISM
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)translate\\s-+\\(.*\\)$"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (2 (symbol-value 'hpf-other-name-face) keep t))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; PROVER
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)\\(prover\\|cons-check\\)\\s-+\\(.*\\)$"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (3 (symbol-value 'hpf-builtin-face) keep t))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang ;; Formula
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang '("\\(\\<\\|\\s-+\\)\\(prove\\|prove-all\\)\\s-+\\(\\(\\w\\|\\s-\\)*\\)\\s-+\\(with\\|exlcuding\\|$\\)"
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (3 (symbol-value 'hpf-other-name-face) keep t))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang )))
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; String and Char
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defconst hpf-font-lock-string
6cad57c376847a1caa42dbc691dbfa705e410af6Heng Jiang (append hpf-font-lock-idname
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (list '("\\(\\(\"\\|^>[ \t]*\\\\\\)\\([^\"\\\\\n]\\|\\\\.\\)*\\(\"\\|\\\\[ \t]*$\\)\\|'\\([^'\\\\\n]\\|\\\\.[^'\n]*\\)'\\)"
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (0 (symbol-value 'hpf-string-char-face) keep t))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Syntax highlighting of String and Char")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Define default highlighting level
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; (defvar hpf-font-lock-syntax-highligthing hpf-font-lock-keywords
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defvar hpf-font-lock-syntax-highligthing (symbol-value 'hpf-font-lock-string)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Default syntax highlighting level in HPF mode")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; ================= C A S L M A J O R M O D E ===============
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; hpf major mode setup
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; Definition of HPF major mode
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(defun hpf-mode ()
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang "Major mode for editing HPF models"
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (interactive)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (hpf-vars)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq major-mode 'hpf-mode)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq mode-name "HPF")
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Load keymap
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (use-local-map hpf-mode-map)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Load syntax table
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (set-syntax-table hpf-mode-syntax-table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; (hpf-create-syntax-table)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Highlight HPF keywords
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'font-lock-defaults)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq font-lock-defaults
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang '(hpf-font-lock-syntax-highligthing))
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (make-local-variable 'font-lock-keywords-only)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (setq font-lock-keywords-only nil)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; Support for compile.el
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang ;; We just substitute our own functions to go to the error.
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang (run-hooks 'hpf-mode-hook)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang )
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang(provide 'hpf-mode)
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang
b9b8f261fe6ee3907ec15372993cbfec33448c52Heng Jiang;; HPF-mode ends here