;;; modula2.el --- Modula-2 editing support package
-;; Author: Michael Schmidt <michael@pbinfo.UUCP>
+;; Author: Michael Schmidt <michael@pbinfo.UUCP>
;; Tom Perrine <Perrin@LOGICON.ARPA>
+;; Maintainer: FSF
;; Keywords: languages
+;; This file is part of GNU Emacs.
+
;; The authors distributed this without a copyright notice
;; back in 1988, so it is in the public domain. The original included
;; the following credit:
;;; Code:
+(defgroup modula2 nil
+ "Major mode for editing Modula-2 code."
+ :prefix "m2-"
+ :group 'languages)
+
;;; Added by Tom Perrine (TEP)
(defvar m2-mode-syntax-table nil
"Syntax table in use in Modula-2 buffers.")
-(defvar m2-compile-command "m2c"
- "Command to compile Modula-2 programs")
+(defcustom m2-compile-command "m2c"
+ "Command to compile Modula-2 programs."
+ :type 'string
+ :group 'modula2)
-(defvar m2-link-command "m2l"
- "Command to link Modula-2 programs")
+(defcustom m2-link-command "m2l"
+ "Command to link Modula-2 programs."
+ :type 'string
+ :group 'modula2)
-(defvar m2-link-name nil
- "Name of the executable.")
+(defcustom m2-link-name nil
+ "Name of the Modula-2 executable."
+ :type '(choice (const nil) string)
+ :group 'modula2)
-(defvar m2-end-comment-column nil
- "*Column for aligning the end of a comment, in Modula-2.")
+(defcustom m2-end-comment-column 75
+ "*Column for aligning the end of a comment, in Modula-2."
+ :type 'integer
+ :group 'modula2)
(if m2-mode-syntax-table
()
(define-key map "\C-c\C-c" 'm2-compile)
(setq m2-mode-map map)))
-(defvar m2-indent 5 "*This variable gives the indentation in Modula-2-Mode")
-
+(defcustom m2-indent 5
+ "*This variable gives the indentation in Modula-2-Mode."
+ :type 'integer
+ :group 'modula2)
+
;;;###autoload
(defun modula-2-mode ()
"This is a mode intended to support program development in Modula-2.
(make-local-variable 'comment-column)
(setq comment-column 41)
(make-local-variable 'm2-end-comment-column)
- (setq m2-end-comment-column 75)
(set-syntax-table m2-mode-syntax-table)
(make-local-variable 'paragraph-start)
(setq paragraph-start (concat "$\\|" page-delimiter))
(setq font-lock-defaults
'((m3-font-lock-keywords
m3-font-lock-keywords-1 m3-font-lock-keywords-2)
- nil nil ((?_ . "w") (?. . "w")) nil
+ nil nil ((?_ . "w") (?. . "w") (?< . ". 1") (?> . ". 4")) nil
;; Obsoleted by Emacs 19.35 parse-partial-sexp's COMMENTSTOP.
;(font-lock-comment-start-regexp . "(\\*")
))
(run-hooks 'm2-mode-hook))
\f
-;; Regexps written with help from Ron Forrester <ron@orcad.com>.
-
+;; Regexps written with help from Ron Forrester <ron@orcad.com>
+;; and Spencer Allain <sallain@teknowledge.com>.
(defconst m3-font-lock-keywords-1
'(
;;
(1 font-lock-keyword-face)
(font-lock-match-c-style-declaration-item-and-skip-to-next
nil (goto-char (match-end 0))
- (1 font-lock-reference-face)))
+ (1 font-lock-constant-face)))
;;
;; Pragmas as warnings.
- ("<\\*.*\\*>" . font-lock-warning-face)
+ ;; Spencer Allain <sallain@teknowledge.com> says do them as comments...
+ ;; ("<\\*.*\\*>" . font-lock-warning-face)
+ ;; ... but instead we fontify the first word.
+ ("<\\*[ \t]*\\(\\sw+\\)" 1 font-lock-warning-face prepend)
)
"Subdued level highlighting for Modula-3 modes.")
(append m3-font-lock-keywords-1
(eval-when-compile
(let ((m3-types
-; (make-regexp
-; '("INTEGER" "BITS" "BOOLEAN" "CARDINAL" "CHAR" "FLOAT"
-; "LONGREAL" "REAL" "REFANY" "ADDRESS" "ARRAY" "TEXT"))
- (concat "A\\(DDRESS\\|RRAY\\)\\|B\\(ITS\\|OOLEAN\\)\\|"
- "C\\(ARDINAL\\|HAR\\)\\|FLOAT\\|INTEGER\\|LONGREAL\\|"
- "RE\\(AL\\|FANY\\)\\|TEXT"))
+ (regexp-opt
+ '("INTEGER" "BITS" "BOOLEAN" "CARDINAL" "CHAR" "FLOAT" "REAL"
+ "LONGREAL" "REFANY" "ADDRESS" "ARRAY" "SET" "TEXT"
+ "MUTEX" "ROOT" "EXTENDED")))
(m3-keywords
-; (make-regexp
-; '("AND" "ANY" "AS" "BEGIN" "BRANDED" "BY" "CASE" "CONST" "DIV"
-; "DO" "ELSE" "ELSIF" "EVAL" "EXCEPT" "EXIT" "EXTENDED" "FINALLY"
-; "FOR" "IF" "IN" "LOCK" "LOOP" "METHODS" "MOD" "MUTEX" "NOT"
-; "OBJECT" "OF" "OR" "OVERRIDES" "READONLY" "RECORD" "REF"
-; "REPEAT" "RETURN" "REVEAL" "ROOT" "SET" "THEN" "TO" "TRY"
-; "TYPE" "TYPECASE" "UNSAFE" "UNTIL" "UNTRACED" "VAR" "VALUE"
-; "WHILE" "WITH"))
- (concat "A\\(N[DY]\\|S\\)\\|B\\(EGIN\\|RANDED\\|Y\\)\\|"
- "C\\(ASE\\|ONST\\)\\|D\\(IV\\|O\\)\\|"
- "E\\(LS\\(E\\|IF\\)\\|VAL\\|"
- "X\\(CEPT\\|IT\\|TENDED\\)\\)\\|F\\(INALLY\\|OR\\)\\|"
- "I[FN]\\|LO\\(CK\\|OP\\)\\|M\\(ETHODS\\|OD\\|UTEX\\)\\|"
- "NOT\\|O\\([FR]\\|BJECT\\|VERRIDES\\)\\|"
- "R\\(E\\(ADONLY\\|CORD\\|F\\|PEAT\\|TURN\\|VEAL\\)\\|"
- "OOT\\)\\|SET\\|T\\(HEN\\|O\\|RY\\|YPE\\(\\|CASE\\)\\)\\|"
- "UN\\(SAFE\\|T\\(IL\\|RACED\\)\\)\\|VA\\(LUE\\|R\\)\\|"
- "W\\(HILE\\|ITH\\)"))
+ (regexp-opt
+ '("AND" "ANY" "AS" "BEGIN" "BRANDED" "BY" "CASE" "CONST" "DIV"
+ "DO" "ELSE" "ELSIF" "EVAL" "EXCEPT" "EXIT" "FINALLY"
+ "FOR" "GENERIC" "IF" "IN" "LOCK" "LOOP" "METHODS" "MOD" "NOT"
+ "OBJECT" "OF" "OR" "OVERRIDES" "READONLY" "RECORD" "REF"
+ "REPEAT" "RETURN" "REVEAL" "THEN" "TO" "TRY"
+ "TYPE" "TYPECASE" "UNSAFE" "UNTIL" "UNTRACED" "VAR" "VALUE"
+ "WHILE" "WITH")))
(m3-builtins
-; (make-regexp
-; '("ABS" "ADR" "ADRSIZE" "BITSIZE" "BYTESIZE" "CEILING"
-; "DEC" "DISPOSE" "FIRST" "FLOOR" "INC" "ISTYPE" "LAST"
-; "LOOPHOLE" "MAX" "MIN" "NARROW" "NEW" "NUMBER" "ORD"
-; "ROUND" "SUBARRAY" "TRUNC" "TYPECODE" "VAL"))
- (concat "A\\(BS\\|DR\\(\\|SIZE\\)\\)\\|B\\(ITSIZE\\|YTESIZE\\)\\|"
- "CEILING\\|D\\(EC\\|ISPOSE\\)\\|F\\(IRST\\|LOOR\\)\\|"
- "I\\(NC\\|STYPE\\)\\|L\\(AST\\|OOPHOLE\\)\\|"
- "M\\(AX\\|IN\\)\\|N\\(ARROW\\|EW\\|UMBER\\)\\|ORD\\|"
- "ROUND\\|SUBARRAY\\|T\\(RUNC\\|YPECODE\\)\\|VAL"))
+ (regexp-opt
+ '("ABS" "ADR" "ADRSIZE" "BITSIZE" "BYTESIZE" "CEILING"
+ "DEC" "DISPOSE" "FIRST" "FLOOR" "INC" "ISTYPE" "LAST"
+ "LOOPHOLE" "MAX" "MIN" "NARROW" "NEW" "NUMBER" "ORD"
+ "ROUND" "SUBARRAY" "TRUNC" "TYPECODE" "VAL")))
)
(list
;;
;; Fontify tokens as function names.
'("\\<\\(END\\|EXCEPTION\\|RAISES?\\)\\>[ \t{]*"
(1 font-lock-keyword-face)
- (font-lock-match-c-style-declaration-item-and-skip-to-next nil nil
+ (font-lock-match-c-style-declaration-item-and-skip-to-next
+ nil (goto-char (match-end 0))
(1 font-lock-function-name-face)))
;;
;; Fontify constants as references.
- '("\\<\\(FALSE\\|NIL\\|NULL\\|TRUE\\)\\>" . font-lock-reference-face)
+ '("\\<\\(FALSE\\|NIL\\|NULL\\|TRUE\\)\\>" . font-lock-constant-face)
))))
"Gaudy level highlighting for Modula-3 modes.")
(defun m2-stdio ()
(interactive)
(insert "
-FROM TextIO IMPORT
+FROM TextIO IMPORT
WriteCHAR, ReadCHAR, WriteINTEGER, ReadINTEGER,
WriteCARDINAL, ReadCARDINAL, WriteBOOLEAN, ReadBOOLEAN,
WriteREAL, ReadREAL, WriteBITSET, ReadBITSET,
(find-file-other-window
(concat (substring (buffer-name) 0 -3) ".mi")))))
+(provide 'modula2)
+
+;;; arch-tag: a21df1cb-5ece-4709-9219-1e7cd2d85d90
;;; modula2.el ends here