# HG changeset patch # User Lute Kamstra # Date 1111425057 0 # Node ID 65f5b049afac3204fc45771683c3b3a49cadf03e # Parent 1771db839aa602b7a816af554fbb390eca49c823 Don't prevent compilation. Don't require generic. Follow coding conventions. Minor code cleanup. (etc-fstab-generic-mode): Add some keywords. diff -r 1771db839aa6 -r 65f5b049afac lisp/generic-x.el --- a/lisp/generic-x.el Mon Mar 21 17:10:06 2005 +0000 +++ b/lisp/generic-x.el Mon Mar 21 17:10:57 2005 +0000 @@ -1,6 +1,6 @@ -;;; generic-x.el --- Extra Modes for generic-mode -*- no-byte-compile: t -*- +;;; generic-x.el --- Extra Modes for generic-mode -;; Copyright (C) 1997, 1998, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 2003, 2005 Free Software Foundation, Inc. ;; Author: Peter Breton ;; Created: Tue Oct 08 1996 @@ -34,7 +34,7 @@ ;; (require 'generic-x) ;; ;; You can decide which modes to load by setting the variable -;; `generic-extras-enable-list'. Some platform-specific modes are +;; `generic-extras-enable-list'. Some platform-specific modes are ;; affected by the variables `generic-define-mswindows-modes' and ;; `generic-define-unix-modes' (which see). ;; @@ -92,7 +92,6 @@ ;;; Code: -(require 'generic) (require 'font-lock) (defgroup generic-x nil @@ -103,53 +102,52 @@ (defcustom generic-extras-enable-list nil "*List of generic modes to enable by default. -Each entry in the list should be a symbol. -The variables `generic-define-mswindows-modes' and `generic-define-unix-modes' -also affect which generic modes are defined. -Please note that if you set this variable after generic-x is loaded, -you must reload generic-x to enable the specified modes." +Each entry in the list should be a symbol. The variables +`generic-define-mswindows-modes' and `generic-define-unix-modes' +also affect which generic modes are defined. Please note that if +you set this variable after generic-x is loaded, you must reload +generic-x to enable the specified modes." :group 'generic-x - :type '(repeat sexp) - ) + :type '(repeat sexp)) (defcustom generic-define-mswindows-modes - (memq system-type (list 'windows-nt 'ms-dos)) + (memq system-type '(windows-nt ms-dos)) "*If non-nil, some MS-Windows specific generic modes will be defined." :group 'generic-x - :type 'boolean - ) + :type 'boolean) (defcustom generic-define-unix-modes - (not (memq system-type (list 'windows-nt 'ms-dos))) + (not (memq system-type '(windows-nt ms-dos))) "*If non-nil, some Unix specific generic modes will be defined." :group 'generic-x - :type 'boolean - ) + :type 'boolean) (and generic-define-mswindows-modes - (setq generic-extras-enable-list - (append (list 'bat-generic-mode 'ini-generic-mode - 'inf-generic-mode 'rc-generic-mode - 'reg-generic-mode 'rul-generic-mode - 'hosts-generic-mode - 'apache-conf-generic-mode - 'apache-log-generic-mode - ) - generic-extras-enable-list))) + (setq generic-extras-enable-list + (append (list 'bat-generic-mode + 'ini-generic-mode + 'inf-generic-mode + 'rc-generic-mode + 'reg-generic-mode + 'rul-generic-mode + 'hosts-generic-mode + 'apache-conf-generic-mode + 'apache-log-generic-mode) + generic-extras-enable-list))) (and generic-define-unix-modes (setq generic-extras-enable-list (append (list 'apache-conf-generic-mode 'apache-log-generic-mode 'samba-generic-mode - 'hosts-generic-mode 'fvwm-generic-mode + 'hosts-generic-mode + 'fvwm-generic-mode 'x-resource-generic-mode 'alias-generic-mode 'inetd-conf-generic-mode 'etc-services-generic-mode 'etc-passwd-generic-mode - 'etc-fstab-generic-mode - ) + 'etc-fstab-generic-mode) generic-extras-enable-list))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -157,382 +155,345 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Apache -(and - (memq 'apache-conf-generic-mode generic-extras-enable-list) +(when (memq 'apache-conf-generic-mode generic-extras-enable-list) -(define-generic-mode 'apache-conf-generic-mode - (list ?#) - nil - '(("^\\s-*\\(<.*>\\)" 1 'font-lock-constant-face) - ("^\\s-*\\(\\sw+\\)\\s-" 1 'font-lock-variable-name-face)) - (list "srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'") - (list - (function - (lambda () +(define-generic-mode apache-conf-generic-mode + (list ?#) + nil + '(("^\\s-*\\(<.*>\\)" 1 'font-lock-constant-face) + ("^\\s-*\\(\\sw+\\)\\s-" 1 'font-lock-variable-name-face)) + (list "srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'") + (list + (function + (lambda () (setq imenu-generic-expression '((nil "^\\([-A-Za-z0-9_]+\\)" 1) ("*Directories*" "^\\s-*]+\\)>" 1) - ("*Locations*" "^\\s-*]+\\)>" 1) - )) - ))) - "Generic mode for Apache or HTTPD configuration files.")) + ("*Locations*" "^\\s-*]+\\)>" 1)))))) + "Generic mode for Apache or HTTPD configuration files.")) -(and - (memq 'apache-log-generic-mode generic-extras-enable-list) +(when (memq 'apache-log-generic-mode generic-extras-enable-list) -(define-generic-mode 'apache-log-generic-mode +(define-generic-mode apache-log-generic-mode nil nil ;; Hostname ? user date request return-code number-of-bytes '(("^\\([-a-zA-z0-9.]+\\) - [-A-Za-z]+ \\(\\[.*\\]\\)" (1 font-lock-constant-face) - (2 font-lock-variable-name-face)) - ) + (2 font-lock-variable-name-face))) (list "access_log\\'") nil "Mode for Apache log files")) ;;; Samba -(and - (memq 'samba-generic-mode generic-extras-enable-list) +(when (memq 'samba-generic-mode generic-extras-enable-list) -(define-generic-mode 'samba-generic-mode - (list ?\; ?#) - nil - '( - ("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face) - ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)" - (1 'font-lock-variable-name-face) - (2 'font-lock-type-face)) - ) - (list "smb\\.conf\\'") - (list 'generic-bracket-support) - "Generic mode for Samba configuration files.")) +(define-generic-mode samba-generic-mode + (list ?\; ?#) + nil + '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face) + ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)" + (1 'font-lock-variable-name-face) + (2 'font-lock-type-face))) + (list "smb\\.conf\\'") + (list 'generic-bracket-support) + "Generic mode for Samba configuration files.")) ;;; Fvwm ;; This is pretty basic. Also, modes for other window managers could ;; be defined as well. -(and -(memq 'fvwm-generic-mode generic-extras-enable-list) +(when (memq 'fvwm-generic-mode generic-extras-enable-list) -(define-generic-mode 'fvwm-generic-mode - (list ?#) - (list - "AddToMenu" - "AddToFunc" - "ButtonStyle" - "EndFunction" - "EndPopup" - "Function" - "IconPath" - "Key" - "ModulePath" - "Mouse" - "PixmapPath" - "Popup" - "Style" - ) - nil - (list "\\.fvwmrc\\'" "\\.fvwm2rc\\'") - nil - "Generic mode for FVWM configuration files.")) +(define-generic-mode fvwm-generic-mode + (list ?#) + (list + "AddToMenu" + "AddToFunc" + "ButtonStyle" + "EndFunction" + "EndPopup" + "Function" + "IconPath" + "Key" + "ModulePath" + "Mouse" + "PixmapPath" + "Popup" + "Style") + nil + (list "\\.fvwmrc\\'" "\\.fvwm2rc\\'") + nil + "Generic mode for FVWM configuration files.")) ;;; X Resource ;; I'm pretty sure I've seen an actual mode to do this, but I don't ;; think it's standard with Emacs -(and - (memq 'x-resource-generic-mode generic-extras-enable-list) +(when (memq 'x-resource-generic-mode generic-extras-enable-list) -(define-generic-mode 'x-resource-generic-mode - (list ?!) - nil - '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face)) - (list "\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'") - nil - "Generic mode for X Resource configuration files.")) +(define-generic-mode x-resource-generic-mode + (list ?!) + nil + '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face)) + (list "\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'") + nil + "Generic mode for X Resource configuration files.")) ;;; Hosts -(and - (memq 'hosts-generic-mode generic-extras-enable-list) +(when (memq 'hosts-generic-mode generic-extras-enable-list) -(define-generic-mode 'hosts-generic-mode - (list ?#) - (list "localhost") - '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face)) - (list "[hH][oO][sS][tT][sS]\\'") - nil - "Generic mode for HOSTS files.")) +(define-generic-mode hosts-generic-mode + (list ?#) + (list "localhost") + '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face)) + (list "[hH][oO][sS][tT][sS]\\'") + nil + "Generic mode for HOSTS files.")) ;;; Windows INF files -(and - (memq 'inf-generic-mode generic-extras-enable-list) +(when (memq 'inf-generic-mode generic-extras-enable-list) -(define-generic-mode 'inf-generic-mode - (list ?\;) - nil - '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face)) - (list "\\.[iI][nN][fF]\\'") - (list 'generic-bracket-support) - "Generic mode for MS-Windows INF files.")) +(define-generic-mode inf-generic-mode + (list ?\;) + nil + '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face)) + (list "\\.[iI][nN][fF]\\'") + (list 'generic-bracket-support) + "Generic mode for MS-Windows INF files.")) ;;; Windows INI files ;; Should define escape character as well! -(and - (memq 'ini-generic-mode generic-extras-enable-list) +(when (memq 'ini-generic-mode generic-extras-enable-list) -(define-generic-mode 'ini-generic-mode - (list ?\;) - nil - '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face) - ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$" - (1 font-lock-function-name-face) - (2 font-lock-variable-name-face))) - (list "\\.[iI][nN][iI]\\'") - (list - (function - (lambda () - (setq imenu-generic-expression - '((nil "^\\[\\(.*\\)\\]" 1) - ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1))) - ))) - "Generic mode for MS-Windows INI files.")) +(define-generic-mode ini-generic-mode + (list ?\;) + nil + '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face) + ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$" + (1 font-lock-function-name-face) + (2 font-lock-variable-name-face))) + (list "\\.[iI][nN][iI]\\'") + (list + (function + (lambda () + (setq imenu-generic-expression + '((nil "^\\[\\(.*\\)\\]" 1) + ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))))) + "Generic mode for MS-Windows INI files.")) ;;; Windows REG files ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax! -(and - (memq 'reg-generic-mode generic-extras-enable-list) +(when (memq 'reg-generic-mode generic-extras-enable-list) -(define-generic-mode 'reg-generic-mode - '(?\;) - '("key" "classes_root" "REGEDIT" "REGEDIT4") - '(("\\(\\[.*]\\)" 1 'font-lock-constant-face) - ("^\\([^\n\r]*\\)\\s-*=" 1 'font-lock-variable-name-face)) - '("\\.[rR][eE][gG]\\'") - (list - (function - (lambda () - (setq imenu-generic-expression - '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) - "Generic mode for MS-Windows Registry files.")) +(define-generic-mode reg-generic-mode + '(?\;) + '("key" "classes_root" "REGEDIT" "REGEDIT4") + '(("\\(\\[.*]\\)" 1 'font-lock-constant-face) + ("^\\([^\n\r]*\\)\\s-*=" 1 'font-lock-variable-name-face)) + '("\\.[rR][eE][gG]\\'") + (list + (function + (lambda () + (setq imenu-generic-expression + '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) + "Generic mode for MS-Windows Registry files.")) ;;; DOS/Windows BAT files -(if (not (memq 'bat-generic-mode generic-extras-enable-list)) - nil -(define-generic-mode 'bat-generic-mode - nil - nil +(when (memq 'bat-generic-mode generic-extras-enable-list) + +(define-generic-mode bat-generic-mode + nil + nil + (list + ;; Make this one first in the list, otherwise comments will + ;; be over-written by other variables + (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t) + (list "^[ \t]*\\(::.*\\)" 1 'font-lock-comment-face t) + (list + "^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)" + '(1 font-lock-builtin-face) + '(2 font-lock-constant-face t t)) + ;; Any text (except ON/OFF) following ECHO is a string. + (list + "^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)" + '(1 font-lock-builtin-face) + '(3 font-lock-constant-face t t) + '(5 font-lock-string-face t t)) + ;; These keywords appear as the first word on a line. (Actually, they + ;; can also appear after "if ..." or "for ..." clause, but since they + ;; are frequently used in simple text, we punt.) + ;; In `generic-bat-mode-setup-function' we make the keywords + ;; case-insensitive + (generic-make-keywords-list (list - ;; Make this one first in the list, otherwise comments will - ;; be over-written by other variables - (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t) - (list "^[ \t]*\\(::.*\\)" 1 'font-lock-comment-face t) - (list - "^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)" - '(1 font-lock-builtin-face) - '(2 font-lock-constant-face t t)) - ;; Any text (except ON/OFF) following ECHO is a string. - (list - "^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)" - '(1 font-lock-builtin-face) - '(3 font-lock-constant-face t t) - '(5 font-lock-string-face t t)) - ;; These keywords appear as the first word on a line. (Actually, they - ;; can also appear after "if ..." or "for ..." clause, but since they - ;; are frequently used in simple text, we punt.) - ;; In `generic-bat-mode-setup-function' we make the keywords - ;; case-insensitive - (generic-make-keywords-list - (list - "for" - "if" - ) - 'font-lock-keyword-face "^[@ \t]*") - ;; These keywords can be anywhere on a line - ;; In `generic-bat-mode-setup-function' we make the keywords - ;; case-insensitive - (generic-make-keywords-list - (list - "do" - "exist" - "errorlevel" - "goto" - "not" - ) 'font-lock-keyword-face) - ;; These are built-in commands. Only frequently-used ones are listed. - (generic-make-keywords-list - (list - "CALL" "call" "Call" - "CD" "cd" "Cd" - "CLS" "cls" "Cls" - "COPY" "copy" "Copy" - "DEL" "del" "Del" - "ECHO" "echo" "Echo" - "MD" "md" "Md" - "PATH" "path" "Path" - "PAUSE" "pause" "Pause" - "PROMPT" "prompt" "Prompt" - "RD" "rd" "Rd" - "REN" "ren" "Ren" - "SET" "set" "Set" - "START" "start" "Start" - "SHIFT" "shift" "Shift" - ) 'font-lock-builtin-face "[ \t|\n]") - (list "^[ \t]*\\(:\\sw+\\)" 1 'font-lock-function-name-face t) - (list "\\(%\\sw+%\\)" 1 'font-lock-variable-name-face t) - (list "\\(%[0-9]\\)" 1 'font-lock-variable-name-face t) - (list "\\(/[^/ \"\t\n]+\\)" 1 'font-lock-type-face) - (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face) - (list "[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?" - '(1 font-lock-keyword-face) - '(2 font-lock-function-name-face nil t)) - (list "[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?" - '(1 font-lock-builtin-face) - '(2 font-lock-variable-name-face t t)) - - ) + "for" + "if") + 'font-lock-keyword-face "^[@ \t]*") + ;; These keywords can be anywhere on a line + ;; In `generic-bat-mode-setup-function' we make the keywords + ;; case-insensitive + (generic-make-keywords-list + (list + "do" + "exist" + "errorlevel" + "goto" + "not") + 'font-lock-keyword-face) + ;; These are built-in commands. Only frequently-used ones are listed. + (generic-make-keywords-list (list - "\\.[bB][aA][tT]\\'" - "\\`[cC][oO][nN][fF][iI][gG]\\." - "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\." ) - (list 'generic-bat-mode-setup-function) - "Generic mode for MS-Windows BAT files.") - - (defvar bat-generic-mode-syntax-table nil - "Syntax table in use in bat-generic-mode buffers.") - - (defvar bat-generic-mode-keymap (make-sparse-keymap) - "Keymap for bet-generic-mode.") + "CALL" "call" "Call" + "CD" "cd" "Cd" + "CLS" "cls" "Cls" + "COPY" "copy" "Copy" + "DEL" "del" "Del" + "ECHO" "echo" "Echo" + "MD" "md" "Md" + "PATH" "path" "Path" + "PAUSE" "pause" "Pause" + "PROMPT" "prompt" "Prompt" + "RD" "rd" "Rd" + "REN" "ren" "Ren" + "SET" "set" "Set" + "START" "start" "Start" + "SHIFT" "shift" "Shift") + 'font-lock-builtin-face "[ \t|\n]") + (list "^[ \t]*\\(:\\sw+\\)" 1 'font-lock-function-name-face t) + (list "\\(%\\sw+%\\)" 1 'font-lock-variable-name-face t) + (list "\\(%[0-9]\\)" 1 'font-lock-variable-name-face t) + (list "\\(/[^/ \"\t\n]+\\)" 1 'font-lock-type-face) + (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face) + (list "[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?" + '(1 font-lock-keyword-face) + '(2 font-lock-function-name-face nil t)) + (list "[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?" + '(1 font-lock-builtin-face) + '(2 font-lock-variable-name-face t t))) + (list + "\\.[bB][aA][tT]\\'" + "\\`[cC][oO][nN][fF][iI][gG]\\." + "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\." ) + (list 'generic-bat-mode-setup-function) + "Generic mode for MS-Windows BAT files.") - (defun bat-generic-mode-compile () - "Run the current BAT file in a compilation buffer." - (interactive) - (let ((compilation-buffer-name-function - (function - (lambda(ign) - (concat "*" (buffer-file-name) "*"))) - ) - ) - (compile - (concat (w32-shell-name) " -c " (buffer-file-name))))) +(defvar bat-generic-mode-syntax-table nil + "Syntax table in use in bat-generic-mode buffers.") + +(defvar bat-generic-mode-keymap (make-sparse-keymap) + "Keymap for bet-generic-mode.") - (defun bat-generic-mode-run-as-comint () - "Run the current BAT file in a comint buffer." - (interactive) - (require 'comint) - (let* ((file (buffer-file-name)) - (buf-name (concat "*" file "*"))) - (save-excursion - (set-buffer - (get-buffer-create buf-name)) - (erase-buffer) - (comint-mode) - (comint-exec - buf-name - file - (w32-shell-name) - nil - (list - "-c" - file - ) - ) - (display-buffer buf-name)))) - - (define-key bat-generic-mode-keymap "\C-c\C-c" 'bat-generic-mode-compile) +(defun bat-generic-mode-compile () + "Run the current BAT file in a compilation buffer." + (interactive) + (let ((compilation-buffer-name-function + (function + (lambda(ign) + (concat "*" (buffer-file-name) "*"))))) + (compile + (concat (w32-shell-name) " -c " (buffer-file-name))))) - ;; Make underscores count as words - (if bat-generic-mode-syntax-table - nil - (setq bat-generic-mode-syntax-table (make-syntax-table)) - (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table)) +(defun bat-generic-mode-run-as-comint () + "Run the current BAT file in a comint buffer." + (interactive) + (require 'comint) + (let* ((file (buffer-file-name)) + (buf-name (concat "*" file "*"))) + (save-excursion + (set-buffer + (get-buffer-create buf-name)) + (erase-buffer) + (comint-mode) + (comint-exec + buf-name + file + (w32-shell-name) + nil + (list "-c" file)) + (display-buffer buf-name)))) + +(define-key bat-generic-mode-keymap "\C-c\C-c" 'bat-generic-mode-compile) - ;; bat-generic-mode doesn't use the comment functionality of generic-mode - ;; because it has a three-letter comment-string, so we do it - ;; here manually instead - (defun generic-bat-mode-setup-function () - (make-local-variable 'parse-sexp-ignore-comments) - (make-local-variable 'comment-start) - (make-local-variable 'comment-start-skip) - (make-local-variable 'comment-end) - (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1)) - parse-sexp-ignore-comments t - comment-end "" - comment-start "REM " - comment-start-skip "[Rr][Ee][Mm] *" - ) - (set-syntax-table bat-generic-mode-syntax-table) - ;; Make keywords case-insensitive - (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)) - (use-local-map bat-generic-mode-keymap) - ) - ) +;; Make underscores count as words +(unless bat-generic-mode-syntax-table + (setq bat-generic-mode-syntax-table (make-syntax-table)) + (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table)) + +;; bat-generic-mode doesn't use the comment functionality of generic-mode +;; because it has a three-letter comment-string, so we do it +;; here manually instead +(defun generic-bat-mode-setup-function () + (make-local-variable 'parse-sexp-ignore-comments) + (make-local-variable 'comment-start) + (make-local-variable 'comment-start-skip) + (make-local-variable 'comment-end) + (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1)) + parse-sexp-ignore-comments t + comment-end "" + comment-start "REM " + comment-start-skip "[Rr][Ee][Mm] *") + (set-syntax-table bat-generic-mode-syntax-table) + ;; Make keywords case-insensitive + (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)) + (use-local-map bat-generic-mode-keymap))) ;;; Mailagent ;; Mailagent is a Unix mail filtering program. Anyone wanna do a generic mode ;; for procmail? -(and - (memq 'mailagent-rules-generic-mode generic-extras-enable-list) +(when (memq 'mailagent-rules-generic-mode generic-extras-enable-list) -(define-generic-mode 'mailagent-rules-generic-mode - (list ?#) - (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT") - '(("^\\(\\sw+\\)\\s-*=" 1 'font-lock-variable-name-face) - ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-constant-face)) - (list "\\.rules\\'") - (list 'mailagent-rules-setup-function) - "Mode for Mailagent rules files.") +(define-generic-mode mailagent-rules-generic-mode + (list ?#) + (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT") + '(("^\\(\\sw+\\)\\s-*=" 1 'font-lock-variable-name-face) + ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-constant-face)) + (list "\\.rules\\'") + (list 'mailagent-rules-setup-function) + "Mode for Mailagent rules files.") (defun mailagent-rules-setup-function () - (make-local-variable 'imenu-generic-expression) - (setq imenu-generic-expression - '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))) - ) + (make-local-variable 'imenu-generic-expression) + (setq imenu-generic-expression + '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))) ;; Solaris/Sys V prototype files -(and - (memq 'prototype-generic-mode generic-extras-enable-list) +(when (memq 'prototype-generic-mode generic-extras-enable-list) -(define-generic-mode 'prototype-generic-mode - (list ?#) - nil - '( - ("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$" - (2 font-lock-constant-face) - (3 font-lock-keyword-face)) - ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$" - (1 font-lock-constant-face) - (2 font-lock-keyword-face) - (3 font-lock-variable-name-face)) - ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$" - (1 font-lock-keyword-face) - (3 font-lock-variable-name-face)) - ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$" - (1 font-lock-keyword-face) - (2 font-lock-variable-name-face)) - ) - (list "prototype\\'") - nil - "Mode for Sys V prototype files.")) +(define-generic-mode prototype-generic-mode + (list ?#) + nil + '(("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$" + (2 font-lock-constant-face) + (3 font-lock-keyword-face)) + ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$" + (1 font-lock-constant-face) + (2 font-lock-keyword-face) + (3 font-lock-variable-name-face)) + ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$" + (1 font-lock-keyword-face) + (3 font-lock-variable-name-face)) + ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$" + (1 font-lock-keyword-face) + (2 font-lock-variable-name-face))) + (list "prototype\\'") + nil + "Mode for Sys V prototype files.")) ;; Solaris/Sys V pkginfo files -(and - (memq 'pkginfo-generic-mode generic-extras-enable-list) +(when (memq 'pkginfo-generic-mode generic-extras-enable-list) -(define-generic-mode 'pkginfo-generic-mode - (list ?#) - nil - '( - ("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$" - (1 font-lock-keyword-face) - (2 font-lock-variable-name-face)) - ) - (list "pkginfo\\'") - nil - "Mode for Sys V pkginfo files.")) +(define-generic-mode pkginfo-generic-mode + (list ?#) + nil + '(("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$" + (1 font-lock-keyword-face) + (2 font-lock-variable-name-face))) + (list "pkginfo\\'") + nil + "Mode for Sys V pkginfo files.")) ;; Javascript mode ;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU] -(define-generic-mode 'javascript-generic-mode +(define-generic-mode javascript-generic-mode (list "//" '("/*" . "*/")) (list "break" @@ -594,27 +555,23 @@ "synchronized" "throws" "transient" - "true" - ) + "true") (list (list "^\\s-*function\\s-+\\([A-Za-z0-9_]+\\)" - '(1 font-lock-function-name-face)) - (list "^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)" - '(1 font-lock-variable-name-face)) - ) + '(1 font-lock-function-name-face)) + (list "^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)" + '(1 font-lock-variable-name-face))) (list "\\.js\\'") (list (function (lambda () (setq imenu-generic-expression '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1) - ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1) - )) - ))) + ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1)))))) "Mode for JavaScript files.") ;; VRML files -(define-generic-mode 'vrml-generic-mode +(define-generic-mode vrml-generic-mode (list ?#) (list "DEF" @@ -644,8 +601,7 @@ "textureTransform" "title" "transparency" - "type" - ) + "type") (list (list "USE\\s-+\\([-A-Za-z0-9_]+\\)" '(1 font-lock-constant-face)) @@ -656,8 +612,7 @@ '(1 font-lock-function-name-face)) (list "^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)" - '(2 font-lock-variable-name-face)) - ) + '(2 font-lock-variable-name-face))) (list "\\.wrl\\'") (list (function @@ -666,12 +621,11 @@ '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1) ("*Definitions*" "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{" - 1))) - ))) + 1)))))) "Generic Mode for VRML files.") ;; Java Manifests -(define-generic-mode 'java-manifest-generic-mode +(define-generic-mode java-manifest-generic-mode (list ?#) (list "Name" @@ -681,26 +635,23 @@ "Signature-Version" "Magic" "Java-Bean" - "Depends-On" - ) + "Depends-On") '(("^Name:\\s-+\\([^\n\r]*\\)$" (1 font-lock-variable-name-face)) ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$" - (2 font-lock-constant-face)) - ) + (2 font-lock-constant-face))) (list "[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'") nil "Mode for Java Manifest files") ;; Java properties files -(define-generic-mode 'java-properties-generic-mode +(define-generic-mode java-properties-generic-mode (list ?! ?#) nil (let ((java-properties-key "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)") (java-properties-value - "\\([^\r\n]*\\)") - ) + "\\([^\r\n]*\\)")) ;; Property and value can be separated in a number of different ways: ;; * whitespace ;; * an equal sign @@ -711,143 +662,133 @@ (list (concat "^" java-properties-key elt java-properties-value "$") '(1 font-lock-constant-face) - '(4 font-lock-variable-name-face) - ))) + '(4 font-lock-variable-name-face)))) ;; These are the separators - (list ":\\s-*" "\\s-+" "\\s-*=\\s-*") - ) - ) + (list ":\\s-*" "\\s-+" "\\s-*=\\s-*"))) nil (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\([^#! \t\n\r=:]+\\)" 1))) - ))) + '((nil "^\\([^#! \t\n\r=:]+\\)" 1)))))) "Mode for Java properties files.") ;; C shell alias definitions -(and - (memq 'alias-generic-mode generic-extras-enable-list) +(when (memq 'alias-generic-mode generic-extras-enable-list) -(define-generic-mode 'alias-generic-mode +(define-generic-mode alias-generic-mode (list ?#) (list "alias" "unalias") '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+" (1 font-lock-variable-name-face)) ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$" - (1 font-lock-variable-name-face)) - ) + (1 font-lock-variable-name-face))) (list "alias\\'") (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2))) - ))) - "Mode for C Shell alias files.") -) + '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))))) + "Mode for C Shell alias files.")) ;;; Windows RC files ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira) -(and - (memq 'rc-generic-mode generic-extras-enable-list) +(when (memq 'rc-generic-mode generic-extras-enable-list) -(define-generic-mode 'rc-generic-mode -;; (list ?\/) - (list "//") - '("ACCELERATORS" - "AUTO3STATE" - "AUTOCHECKBOX" - "AUTORADIOBUTTON" - "BITMAP" - "BOTTOMMARGIN" - "BUTTON" - "CAPTION" - "CHARACTERISTICS" - "CHECKBOX" - "CLASS" - "COMBOBOX" - "CONTROL" - "CTEXT" - "CURSOR" - "DEFPUSHBUTTON" - "DESIGNINFO" - "DIALOG" - "DISCARDABLE" - "EDITTEXT" - "EXSTYLE" - "FONT" - "GROUPBOX" - "GUIDELINES" - "ICON" - "LANGUAGE" - "LEFTMARGIN" - "LISTBOX" - "LTEXT" - "MENUITEM SEPARATOR" - "MENUITEM" - "MENU" - "MOVEABLE" - "POPUP" - "PRELOAD" - "PURE" - "PUSHBOX" - "PUSHBUTTON" - "RADIOBUTTON" - "RCDATA" - "RIGHTMARGIN" - "RTEXT" - "SCROLLBAR" - "SEPARATOR" - "STATE3" - "STRINGTABLE" - "STYLE" - "TEXTINCLUDE" - "TOOLBAR" - "TOPMARGIN" - "VERSIONINFO" - "VERSION" - ) - ;; the choice of what tokens go where is somewhat arbitrary, - ;; as is the choice of which value tokens are included, as - ;; the choice of face for each token group - (list - (eval-when-compile - (generic-make-keywords-list - (list - "FILEFLAGSMASK" - "FILEFLAGS" - "FILEOS" - "FILESUBTYPE" - "FILETYPE" - "FILEVERSION" - "PRODUCTVERSION" - ) 'font-lock-type-face)) - (eval-when-compile - (generic-make-keywords-list - (list - "BEGIN" - "BLOCK" - "END" - "VALUE" - ) 'font-lock-function-name-face)) - '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face) - '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) - '("^#[ \t]*\\(elif\\|if\\)\\>" - ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil - (1 font-lock-constant-face) (2 font-lock-variable-name-face nil t))) - '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?" +(define-generic-mode rc-generic-mode + ;; (list ?\/) + (list "//") + '("ACCELERATORS" + "AUTO3STATE" + "AUTOCHECKBOX" + "AUTORADIOBUTTON" + "BITMAP" + "BOTTOMMARGIN" + "BUTTON" + "CAPTION" + "CHARACTERISTICS" + "CHECKBOX" + "CLASS" + "COMBOBOX" + "CONTROL" + "CTEXT" + "CURSOR" + "DEFPUSHBUTTON" + "DESIGNINFO" + "DIALOG" + "DISCARDABLE" + "EDITTEXT" + "EXSTYLE" + "FONT" + "GROUPBOX" + "GUIDELINES" + "ICON" + "LANGUAGE" + "LEFTMARGIN" + "LISTBOX" + "LTEXT" + "MENUITEM SEPARATOR" + "MENUITEM" + "MENU" + "MOVEABLE" + "POPUP" + "PRELOAD" + "PURE" + "PUSHBOX" + "PUSHBUTTON" + "RADIOBUTTON" + "RCDATA" + "RIGHTMARGIN" + "RTEXT" + "SCROLLBAR" + "SEPARATOR" + "STATE3" + "STRINGTABLE" + "STYLE" + "TEXTINCLUDE" + "TOOLBAR" + "TOPMARGIN" + "VERSIONINFO" + "VERSION") + ;; the choice of what tokens go where is somewhat arbitrary, + ;; as is the choice of which value tokens are included, as + ;; the choice of face for each token group + (list + (eval-when-compile + (generic-make-keywords-list + (list + "FILEFLAGSMASK" + "FILEFLAGS" + "FILEOS" + "FILESUBTYPE" + "FILETYPE" + "FILEVERSION" + "PRODUCTVERSION") + 'font-lock-type-face)) + (eval-when-compile + (generic-make-keywords-list + (list + "BEGIN" + "BLOCK" + "END" + "VALUE") + 'font-lock-function-name-face)) + '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face) + '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) + '("^#[ \t]*\\(elif\\|if\\)\\>" + ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil (1 font-lock-constant-face) (2 font-lock-variable-name-face nil t))) - (list "\\.[rR][cC]$") - nil - "Generic mode for MS-Windows Resource files.")) + '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?" + (1 font-lock-constant-face) (2 font-lock-variable-name-face nil t))) + (list "\\.[rR][cC]$") + nil + "Generic mode for MS-Windows Resource files.")) ;; InstallShield RUL files ;; Contributed by Alfred.Correira@Pervasive.Com ;; Bugfixes by "Rolf Sandau" -(and -(memq 'rul-generic-mode generic-extras-enable-list) +(when (memq 'rul-generic-mode generic-extras-enable-list) + ;;; build the regexp strings using regexp-opt (defvar installshield-statement-keyword-list (list @@ -882,8 +823,7 @@ "typedef" "until" "void" - "while" - ) + "while") "Statement keywords used in InstallShield 3 and 5.") (defvar installshield-system-functions-list @@ -907,39 +847,39 @@ "ChangeDirectory" "CloseFile" "CmdGetHwndDlg" - "ComponentAddItem" ; differs between IS3 and IS5 - "ComponentCompareSizeRequired" ; IS5 only + "ComponentAddItem" ; differs between IS3 and IS5 + "ComponentCompareSizeRequired" ; IS5 only "ComponentDialog" - "ComponentError" ; IS5 only - "ComponentFileEnum" ; IS5 only - "ComponentFileInfo" ; IS5 only - "ComponentFilterLanguage" ; IS5 only - "ComponentFilterOS" ; IS5 only - "ComponentGetData" ; IS5 only - "ComponentGetItemInfo" ; IS3 only - "ComponentGetItemSize" ; differs between IS3 and IS5 - "ComponentIsItemSelected" ; differs between IS3 and IS5 + "ComponentError" ; IS5 only + "ComponentFileEnum" ; IS5 only + "ComponentFileInfo" ; IS5 only + "ComponentFilterLanguage" ; IS5 only + "ComponentFilterOS" ; IS5 only + "ComponentGetData" ; IS5 only + "ComponentGetItemInfo" ; IS3 only + "ComponentGetItemSize" ; differs between IS3 and IS5 + "ComponentIsItemSelected" ; differs between IS3 and IS5 "ComponentListItems" - "ComponentMoveData" ; IS5 only - "ComponentSelectItem" ; differs between IS3 and IS5 - "ComponentSetData" ; IS5 only - "ComponentSetItemInfo" ; IS3 only - "ComponentSetTarget" ; IS5 only - "ComponentSetupTypeEnum" ; IS5 only - "ComponentSetupTypeGetData" ; IS5 only - "ComponentSetupTypeSet" ; IS5 only + "ComponentMoveData" ; IS5 only + "ComponentSelectItem" ; differs between IS3 and IS5 + "ComponentSetData" ; IS5 only + "ComponentSetItemInfo" ; IS3 only + "ComponentSetTarget" ; IS5 only + "ComponentSetupTypeEnum" ; IS5 only + "ComponentSetupTypeGetData" ; IS5 only + "ComponentSetupTypeSet" ; IS5 only "ComponentTotalSize" - "ComponentValidate" ; IS5 only - "CompressAdd" ; IS3 only - "CompressDel" ; IS3 only - "CompressEnum" ; IS3 only - "CompressGet" ; IS3 only - "CompressInfo" ; IS3 only + "ComponentValidate" ; IS5 only + "CompressAdd" ; IS3 only + "CompressDel" ; IS3 only + "CompressEnum" ; IS3 only + "CompressGet" ; IS3 only + "CompressInfo" ; IS3 only "CopyFile" "CreateDir" "CreateFile" "CreateProgramFolder" - "DeinstallSetReference" ; IS5 only + "DeinstallSetReference" ; IS5 only "DeinstallStart" "Delay" "DeleteDir" @@ -965,12 +905,12 @@ "FileDeleteLine" "FileGrep" "FileInsertLine" - "FileSetBeginDefine" ; IS3 only - "FileSetEndDefine" ; IS3 only - "FileSetPerformEz" ; IS3 only - "FileSetPerform" ; IS3 only - "FileSetReset" ; IS3 only - "FileSetRoot" ; IS3 only + "FileSetBeginDefine" ; IS3 only + "FileSetEndDefine" ; IS3 only + "FileSetPerformEz" ; IS3 only + "FileSetPerform" ; IS3 only + "FileSetReset" ; IS3 only + "FileSetRoot" ; IS3 only "FindAllDirs" "FindAllFiles" "FindFile" @@ -1024,7 +964,7 @@ "Path" "PlaceBitmap" "PlaceWindow" - "PlayMMedia" ; IS5 only + "PlayMMedia" ; IS5 only "ProgDefGroupType" "RegDBCreateKeyEx" "RegDBDeleteValue" @@ -1084,7 +1024,7 @@ "SdSelectFolder" "SdSetSequentialItems" "SdSetStatic" - "SdSetupTypeEx" ; IS5 only + "SdSetupTypeEx" ; IS5 only "SdSetupType" "SdShowAnyDialog" "SdShowDlgEdit1" @@ -1101,14 +1041,14 @@ "SetColor" "SetFont" "SetDialogTitle" - "SetDisplayEffect" ; IS5 only + "SetDisplayEffect" ; IS5 only "SetFileInfo" "SetForegroundWindow" "SetStatusWindow" "SetTitle" "SetupType" "ShowProgramFolder" - "Split" ; IS3 only + "Split" ; IS3 only "SprintfBox" "Sprintf" "StatusUpdate" @@ -1129,8 +1069,7 @@ "Welcome" "WriteLine" "WriteProfString" - "XCopyFile" - ) + "XCopyFile") "System functions defined in InstallShield 3 and 5.") (defvar installshield-system-variables-list @@ -1163,8 +1102,7 @@ "WINDISK" "WINMAJOR" "WINSYSDIR" - "WINSYSDISK" - ) + "WINSYSDISK") "System variables used in InstallShield 3 and 5.") (defvar installshield-types-list @@ -1186,8 +1124,7 @@ "RGB" "SHORT" "STRINGLIST" - "STRING" - ) + "STRING") "Type keywords used in InstallShield 3 and 5.") ;;; some might want to skip highlighting these to improve performance @@ -1397,111 +1334,104 @@ "WINMINOR" "WIN32SINSTALLED" "WIN32SMAJOR" - "WIN32SMINOR" - ) + "WIN32SMINOR") "Function argument constants used in InstallShield 3 and 5.") -(progn - (defvar rul-generic-mode-syntax-table nil - "Syntax table to use in rul-generic-mode buffers.") +(defvar rul-generic-mode-syntax-table nil + "Syntax table to use in rul-generic-mode buffers.") + +(setq rul-generic-mode-syntax-table + (make-syntax-table c++-mode-syntax-table)) - (setq rul-generic-mode-syntax-table - (make-syntax-table c++-mode-syntax-table)) +(modify-syntax-entry ?\r "> b" rul-generic-mode-syntax-table) +(modify-syntax-entry ?\n "> b" rul-generic-mode-syntax-table) - (modify-syntax-entry ?\r "> b" rul-generic-mode-syntax-table) - (modify-syntax-entry ?\n "> b" rul-generic-mode-syntax-table) - - (modify-syntax-entry ?/ ". 124b" rul-generic-mode-syntax-table) - (modify-syntax-entry ?* ". 23" rul-generic-mode-syntax-table) +(modify-syntax-entry ?/ ". 124b" rul-generic-mode-syntax-table) +(modify-syntax-entry ?* ". 23" rul-generic-mode-syntax-table) - ;; here manually instead - (defun generic-rul-mode-setup-function () - (make-local-variable 'parse-sexp-ignore-comments) - (make-local-variable 'comment-start) - (make-local-variable 'comment-start-skip) - (make-local-variable 'comment-end) - (setq imenu-generic-expression - '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)) - parse-sexp-ignore-comments t - comment-end "*/" - comment-start "/*" -;; comment-end "" -;; comment-start "//" -;; comment-start-skip "" - ) -;; (set-syntax-table rul-generic-mode-syntax-table) - (setq font-lock-syntax-table rul-generic-mode-syntax-table) - ) +;; here manually instead +(defun generic-rul-mode-setup-function () + (make-local-variable 'parse-sexp-ignore-comments) + (make-local-variable 'comment-start) + (make-local-variable 'comment-start-skip) + (make-local-variable 'comment-end) + (setq imenu-generic-expression + '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)) + parse-sexp-ignore-comments t + comment-end "*/" + comment-start "/*" +;;; comment-end "" +;;; comment-start "//" +;;; comment-start-skip "" + ) + ;; (set-syntax-table rul-generic-mode-syntax-table) + (setq font-lock-syntax-table rul-generic-mode-syntax-table)) - ;; moved mode-definition behind defun-definition to be warning-free - 15.11.02/RSan - (define-generic-mode 'rul-generic-mode - ;; Using "/*" and "*/" doesn't seem to be working right - (list "//" '("/*" . "*/" )) - installshield-statement-keyword-list - (list - ;; preprocessor constructs - '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" - 1 font-lock-string-face) - '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?" - (1 font-lock-reference-face) - (2 font-lock-variable-name-face nil t)) - ;; indirect string constants - '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face) - ;; gotos - '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face) - '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?" - (1 font-lock-keyword-face) - (2 font-lock-reference-face nil t)) - ;; system variables - (generic-make-keywords-list - installshield-system-variables-list - 'font-lock-variable-name-face "[^_]" "[^_]") - ;; system functions - (generic-make-keywords-list - installshield-system-functions-list - 'font-lock-function-name-face "[^_]" "[^_]") - ;; type keywords - (generic-make-keywords-list - installshield-types-list - 'font-lock-type-face "[^_]" "[^_]") - ;; function argument constants - (generic-make-keywords-list - installshield-funarg-constants-list - 'font-lock-variable-name-face "[^_]" "[^_]") ; is this face the best choice? - ) - (list "\\.[rR][uU][lL]$") - (list 'generic-rul-mode-setup-function) - "Generic mode for InstallShield RUL files.") -) +;; moved mode-definition behind defun-definition to be warning-free - 15.11.02/RSan +(define-generic-mode rul-generic-mode + ;; Using "/*" and "*/" doesn't seem to be working right + (list "//" '("/*" . "*/" )) + installshield-statement-keyword-list + (list + ;; preprocessor constructs + '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" + 1 font-lock-string-face) + '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?" + (1 font-lock-reference-face) + (2 font-lock-variable-name-face nil t)) + ;; indirect string constants + '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face) + ;; gotos + '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face) + '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?" + (1 font-lock-keyword-face) + (2 font-lock-reference-face nil t)) + ;; system variables + (generic-make-keywords-list + installshield-system-variables-list + 'font-lock-variable-name-face "[^_]" "[^_]") + ;; system functions + (generic-make-keywords-list + installshield-system-functions-list + 'font-lock-function-name-face "[^_]" "[^_]") + ;; type keywords + (generic-make-keywords-list + installshield-types-list + 'font-lock-type-face "[^_]" "[^_]") + ;; function argument constants + (generic-make-keywords-list + installshield-funarg-constants-list + 'font-lock-variable-name-face "[^_]" "[^_]")) ; is this face the best choice? + (list "\\.[rR][uU][lL]$") + (list 'generic-rul-mode-setup-function) + "Generic mode for InstallShield RUL files.") + (define-skeleton rul-if - "Insert an if statement." - "condition: " - "if(" str ") then" \n - > _ \n - ( "other condition, %s: " - > "elseif(" str ") then" \n - > \n) - > "else" \n - > \n - resume: - > "endif;" - ) + "Insert an if statement." + "condition: " + "if(" str ") then" \n + > _ \n + ( "other condition, %s: " + > "elseif(" str ") then" \n + > \n) + > "else" \n + > \n + resume: + > "endif;") (define-skeleton rul-function "Insert a function statement." "function: " "function " str " ()" \n ( "local variables, %s: " - > " " str ";" \n) + > " " str ";" \n) > "begin" \n > _ \n resume: - > "end;") - -) + > "end;")) ;; Additions by ACorreir@pervasive-sw.com (Alfred Correira) -(define-generic-mode 'mailrc-generic-mode +(define-generic-mode mailrc-generic-mode (list ?#) (list "alias" @@ -1512,8 +1442,7 @@ "ignore" "set" "source" - "unset" - ) + "unset") '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" (2 font-lock-constant-face) (3 font-lock-variable-name-face)) ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$" @@ -1525,10 +1454,9 @@ "Mode for mailrc files.") ;; Inetd.conf -(and - (memq 'inetd-conf-generic-mode generic-extras-enable-list) +(when (memq 'inetd-conf-generic-mode generic-extras-enable-list) -(define-generic-mode 'inetd-conf-generic-mode +(define-generic-mode inetd-conf-generic-mode (list ?#) (list "stream" @@ -1537,142 +1465,139 @@ "udp" "wait" "nowait" - "internal" - ) - '( - ("^\\([-A-Za-z0-9_]+\\)" - 1 'font-lock-type-face) - ) + "internal") + '(("^\\([-A-Za-z0-9_]+\\)" + 1 'font-lock-type-face)) '("/etc/inetd.conf\\'") (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1))) - ))) - ) -) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) ;; Services -(and - (memq 'etc-services-generic-mode generic-extras-enable-list) +(when (memq 'etc-services-generic-mode generic-extras-enable-list) -(define-generic-mode 'etc-services-generic-mode +(define-generic-mode etc-services-generic-mode (list ?#) (list "tcp" "udp" - "ddp" - ) - '( - ("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/" + "ddp") + '(("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/" (1 'font-lock-type-face) - (2 'font-lock-variable-name-face) - ) - ) + (2 'font-lock-variable-name-face))) '("/etc/services\\'") (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1))) - ))) - ) -) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) ;; Password and Group files -(and - (memq 'etc-passwd-generic-mode generic-extras-enable-list) +(when (memq 'etc-passwd-generic-mode generic-extras-enable-list) -(define-generic-mode 'etc-passwd-generic-mode +(define-generic-mode etc-passwd-generic-mode nil ;; No comment characters (list "root") ;; Only one keyword (list - (list - (concat - "^" - ;; User name -- Never blank! - "\\([^:]+\\)" - ":" - ;; Password, UID and GID - (mapconcat - 'identity - (make-list 3 "\\([^:]+\\)") - ":" - ) - ":" - ;; GECOS/Name -- might be blank - "\\([^:]*\\)" - ":" - ;; Home directory and shell - "\\([^:]+\\)" - ":?" - "\\([^:]*\\)" - "$" - ) - '(1 'font-lock-type-face) - '(5 'font-lock-variable-name-face) - '(6 'font-lock-constant-face) - '(7 'font-lock-warning-face) - ) - '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$" - (1 'font-lock-type-face) - (4 'font-lock-variable-name-face) - ) - ) + (list + (concat + "^" + ;; User name -- Never blank! + "\\([^:]+\\)" + ":" + ;; Password, UID and GID + (mapconcat + 'identity + (make-list 3 "\\([^:]+\\)") + ":") + ":" + ;; GECOS/Name -- might be blank + "\\([^:]*\\)" + ":" + ;; Home directory and shell + "\\([^:]+\\)" + ":?" + "\\([^:]*\\)" + "$") + '(1 'font-lock-type-face) + '(5 'font-lock-variable-name-face) + '(6 'font-lock-constant-face) + '(7 'font-lock-warning-face)) + '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$" + (1 'font-lock-type-face) + (4 'font-lock-variable-name-face))) '("/etc/passwd\\'" "/etc/group\\'") (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\):" 1))) - ))) - ) -) + '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))))) ;; Fstab -(and - (memq 'etc-fstab-generic-mode generic-extras-enable-list) +(when (memq 'etc-fstab-generic-mode generic-extras-enable-list) -(define-generic-mode 'etc-fstab-generic-mode +(define-generic-mode etc-fstab-generic-mode (list ?#) (list + "adfs" + "affs" + "autofs" + "coda" + "coherent" + "cramfs" + "devpts" + "efs" "ext2" - "fd" + "ext3" + "hfs" + "hpfs" "iso9660" + "jfs" + "minix" + "msdos" + "ncpfs" "nfs" + "ntfs" "proc" - "swap" + "qnx4" + "reiserfs" + "romfs" + "smbfs" + "sysv" + "tmpfs" + "udf" "ufs" - ) - '( - ("^\\([/-A-Za-z0-9_]+\\)\\s-+\\([/-A-Za-z0-9_]+\\)" + "umsdos" + "vfat" + "xenix" + "xfs" + "swap" + "auto" + "ignore") + '(("^\\([/-A-Za-z0-9_]+\\)\\s-+\\([/-A-Za-z0-9_]+\\)" (1 'font-lock-type-face) - (2 'font-lock-variable-name-face) - ) - ) + (2 'font-lock-variable-name-face))) '("/etc/[v]*fstab\\'") (list (function (lambda () (setq imenu-generic-expression - '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1))) - ))) - ) -) + '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) ;; From Jacques Duthen (defvar show-tabs-generic-mode-font-lock-defaults-1 - '( ;; trailing spaces must come before... - ("[ \t]+$" . 'show-tabs-space-face) - ;; ...embedded tabs - ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face)))) + '( ;; trailing spaces must come before... + ("[ \t]+$" . 'show-tabs-space-face) + ;; ...embedded tabs + ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face)))) (defvar show-tabs-generic-mode-font-lock-defaults-2 - '( ;; trailing spaces must come before... - ("[ \t]+$" . 'show-tabs-space-face) - ;; ...tabs - ("\t+" . 'show-tabs-tab-face))) + '( ;; trailing spaces must come before... + ("[ \t]+$" . 'show-tabs-space-face) + ;; ...tabs + ("\t+" . 'show-tabs-tab-face))) (defface show-tabs-tab-face '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) @@ -1692,10 +1617,10 @@ "Font Lock mode face used to highlight spaces." :group 'show-tabs) -(define-generic-mode 'show-tabs-generic-mode +(define-generic-mode show-tabs-generic-mode () ;; no comment char () ;; no keywords - show-tabs-generic-mode-font-lock-defaults-1 + show-tabs-generic-mode-font-lock-defaults-1 () ;; no auto-mode-alist ;; (list 'show-tabs-generic-mode-hook-fun) nil @@ -1705,41 +1630,37 @@ ;; DNS modes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-generic-mode 'named-boot-generic-mode - ;;List of comment characters - (list ?\;) - ;;List of keywords +(define-generic-mode named-boot-generic-mode + ;; List of comment characters + (list ?\;) + ;; List of keywords (list "cache" "primary" "secondary" "forwarders" "limit" "options" "directory" "check-names") - ;;List of additional font-lock-expressions + ;; List of additional font-lock-expressions (list (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face) (list "^directory\\s-+\\(.*\\)" 1 'font-lock-variable-name-face) (list "^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)" (list 2 'font-lock-variable-name-face) - (list 3 'font-lock-constant-face)) - ) - ;;List of additional automode-alist expressions + (list 3 'font-lock-constant-face))) + ;; List of additional automode-alist expressions (list "/etc/named.boot\\'") - ;;List of set up functions to call - nil - ) + ;; List of set up functions to call + nil) -(define-generic-mode 'named-database-generic-mode - ;;List of comment characters +(define-generic-mode named-database-generic-mode + ;; List of comment characters (list ?\;) - ;;List of keywords + ;; List of keywords (list "IN" "NS" "CNAME" "SOA" "PTR" "MX" "A") - ;;List of additional font-lock-expressions + ;; List of additional font-lock-expressions (list (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face) - (list "^\\([.A-Za-z0-9]+\\)" 1 'font-lock-variable-name-face) - ) - ;;List of additional automode-alist expressions + (list "^\\([.A-Za-z0-9]+\\)" 1 'font-lock-variable-name-face)) + ;; List of additional automode-alist expressions nil - ;;List of set up functions to call - nil - ) + ;; List of set up functions to call + nil) (defvar named-database-time-string "%Y%m%d%H" "Timestring for named serial numbers.") @@ -1747,27 +1668,25 @@ (defun named-database-print-serial () "Print a serial number based on the current date." (interactive) - (insert (format-time-string named-database-time-string (current-time))) - ) + (insert (format-time-string named-database-time-string (current-time)))) -(define-generic-mode 'resolve-conf-generic-mode - ;;List of comment characters +(define-generic-mode resolve-conf-generic-mode + ;; List of comment characters (list ?#) - ;;List of keywords + ;; List of keywords (list "nameserver" "domain" "search" "sortlist" "options") - ;;List of additional font-lock-expressions + ;; List of additional font-lock-expressions nil - ;;List of additional automode-alist expressions + ;; List of additional automode-alist expressions (list "/etc/resolv[e]?.conf\\'") - ;;List of set up functions to call - nil - ) + ;; List of set up functions to call + nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Modes for spice and common electrical engineering circuit netlist formats ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-generic-mode 'spice-generic-mode +(define-generic-mode spice-generic-mode nil (list "and" @@ -1784,8 +1703,7 @@ "vccap" "vccs" "vcr" - "vcvs" - ) + "vcvs") '( ("^\\s-*\\([*].*\\)" 1 'font-lock-comment-face) (" \\(\\$ .*\\)$" 1 'font-lock-comment-face) @@ -1795,8 +1713,7 @@ ("^\\s-*\\([.]\\w+\\>\\)" 1 'font-lock-keyword-face) ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face) ("\\('[^']+'\\)" 1 'font-lock-string-face) - ("\\(\"[^\"]+\"\\)" 1 'font-lock-string-face) - ) + ("\\(\"[^\"]+\"\\)" 1 'font-lock-string-face)) (list "\\.[sS][pP]\\'" "\\.[sS][pP][iI]\\'" "\\.[sS][pP][iI][cC][eE]\\'" @@ -1806,24 +1723,20 @@ ;; Make keywords case-insensitive (function (lambda() - (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)))) - ) - "Generic mode for SPICE circuit netlist files." - ) + (setq font-lock-defaults (list 'generic-font-lock-defaults nil t))))) + "Generic mode for SPICE circuit netlist files.") -(define-generic-mode 'ibis-generic-mode +(define-generic-mode ibis-generic-mode (list ?|) nil '( ("[[]\\([^]]*\\)[]]" 1 'font-lock-keyword-face) - ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face) - ) + ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face)) (list "\\.[iI][bB][sS]\\'") (list 'generic-bracket-support) - "Generic mode for IBIS circuit netlist files." - ) + "Generic mode for IBIS circuit netlist files.") -(define-generic-mode 'astap-generic-mode +(define-generic-mode astap-generic-mode nil (list "analyze" @@ -1838,16 +1751,13 @@ "print" "run" "controls" - "table" - ) - '( - ("^\\s-*\\([*].*\\)" 1 'font-lock-comment-face) + "table") + '(("^\\s-*\\([*].*\\)" 1 'font-lock-comment-face) (";\\s-*\\([*].*\\)" 1 'font-lock-comment-face) ("^\\s-*\\([.]\\w+\\>\\)" 1 'font-lock-keyword-face) ("\\('[^']+'\\)" 1 'font-lock-string-face) ("\\(\"[^\"]+\"\\)" 1 'font-lock-string-face) - ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face) - ) + ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face)) (list "\\.[aA][pP]\\'" "\\.[aA][sS][xX]\\'" "\\.[aA][sS][tT][aA][pP]\\'" @@ -1859,15 +1769,13 @@ ;; Make keywords case-insensitive (function (lambda() - (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)))) - ) - "Generic mode for ASTAP circuit netlist files." - ) + (setq font-lock-defaults (list 'generic-font-lock-defaults nil t))))) + "Generic mode for ASTAP circuit netlist files.") -(define-generic-mode 'etc-modules-conf-generic-mode - ;;List of comment characters +(define-generic-mode etc-modules-conf-generic-mode + ;; List of comment characters (list ?#) - ;;List of keywords + ;; List of keywords (list "above" "alias" @@ -1900,13 +1808,12 @@ "pre-remove" "remove" "persistdir") - ;;List of additional font-lock-expressions + ;; List of additional font-lock-expressions nil - ;;List of additional automode-alist expressions + ;; List of additional automode-alist expressions (list "/etc/modules.conf" "/etc/conf.modules") - ;;List of set up functions to call - nil - ) + ;; List of set up functions to call + nil) (provide 'generic-x)