(math-read-expr-level): Declare as a function.
[bpt/emacs.git] / lisp / generic-x.el
CommitLineData
1fffafda 1;;; generic-x.el --- A collection of generic modes
ca1e63a5 2
c90f2757 3;; Copyright (C) 1997, 1998, 2001, 2002, 2003, 2004,
d7a0267c 4;; 2005, 2006, 2007 Free Software Foundation, Inc.
ca1e63a5
RS
5
6;; Author: Peter Breton <pbreton@cs.umb.edu>
7;; Created: Tue Oct 08 1996
8;; Keywords: generic, comment, font-lock
9
10;; This file is part of GNU Emacs.
11
12;; GNU Emacs is free software; you can redistribute it and/or modify
13;; it under the terms of the GNU General Public License as published by
b4aa6026 14;; the Free Software Foundation; either version 3, or (at your option)
ca1e63a5
RS
15;; any later version.
16
17;; GNU Emacs is distributed in the hope that it will be useful,
18;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;; GNU General Public License for more details.
21
22;; You should have received a copy of the GNU General Public License
23;; along with GNU Emacs; see the file COPYING. If not, write to the
086add15
LK
24;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
25;; Boston, MA 02110-1301, USA.
ca1e63a5
RS
26
27;;; Commentary:
28;;
76ee7bd5 29;; This file contains a collection of generic modes.
ffe0c7ef 30;;
ca1e63a5
RS
31;; INSTALLATION:
32;;
33;; Add this line to your .emacs file:
34;;
35;; (require 'generic-x)
36;;
37;; You can decide which modes to load by setting the variable
1fffafda
LK
38;; `generic-extras-enable-list'. Its default value is platform-
39;; specific. The recommended way to set this variable is through
40;; customize:
ffe0c7ef 41;;
1fffafda
LK
42;; M-x customize-option RET generic-extras-enable-list RET
43;;
44;; This lets you select generic modes from the list of available
45;; modes. If you manually set `generic-extras-enable-list' in your
46;; .emacs, do it BEFORE loading generic-x with (require 'generic-x).
47;;
48;; You can also send in new modes; if the file types are reasonably
49;; common, we would like to install them.
ca1e63a5 50;;
9285b8bc
LK
51;; DEFAULT GENERIC MODE:
52;;
53;; This file provides a hook which automatically puts a file into
54;; `default-generic-mode' if the first few lines of a file in
55;; fundamental mode start with a hash comment character. To disable
56;; this functionality, set the variable `generic-use-find-file-hook'
57;; to nil BEFORE loading generic-x. See the variables
58;; `generic-lines-to-scan' and `generic-find-file-regexp' for
59;; customization options.
60;;
ca1e63a5
RS
61;; PROBLEMS WHEN USED WITH FOLDING MODE:
62;;
762f539b 63;; [The following relates to the obsolete selective-display technique.
1fffafda 64;; Folding mode should use invisible text properties instead. -- Dave
762f539b
DL
65;; Love]
66;;
ca1e63a5 67;; From Anders Lindgren <andersl@csd.uu.se>
ffe0c7ef 68;;
ca1e63a5 69;; Problem summary: Wayne Adams has found a problem when using folding
1fffafda 70;; mode in conjunction with font-lock for a mode defined in
ca1e63a5
RS
71;; `generic-x.el'.
72;;
73;; The problem, as Wayne described it, was that error messages of the
74;; following form appeared when both font-lock and folding are used:
ffe0c7ef 75;;
ca1e63a5
RS
76;; > - various msgs including "Fontifying region...(error Stack
77;; > overflow in regexp matcher)" appear
ffe0c7ef 78;;
1fffafda
LK
79;; I have just tracked down the cause of the problem. The regexp's in
80;; `generic-x.el' do not take into account the way that folding hides
81;; sections of the buffer. The technique is known as
ca1e63a5 82;; `selective-display' and has been available for a very long time (I
1fffafda 83;; started using it back in the good old Emacs 18 days). Basically, a
ca1e63a5
RS
84;; section is hidden by creating one very long line were the newline
85;; character (C-j) is replaced by a linefeed (C-m) character.
ffe0c7ef 86;;
ca1e63a5
RS
87;; Many other hiding packages, besides folding, use the same technique,
88;; the problem should occur when using them as well.
ffe0c7ef 89;;
1fffafda 90;; The erroneous lines in `generic-x.el' look like the following (this
ca1e63a5 91;; example is from the `ini' section):
ffe0c7ef
PB
92;;
93;; '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face)
ca1e63a5 94;; ("^\\(.*\\)=" 1 'font-lock-variable-name-face)
ffe0c7ef 95;;
ca1e63a5
RS
96;; The intention of these lines is to highlight lines of the following
97;; form:
ffe0c7ef 98;;
ca1e63a5
RS
99;; [foo]
100;; bar = xxx
ffe0c7ef 101;;
1fffafda
LK
102;; However, since the `.' regexp symbol matches the linefeed character
103;; the entire folded section is searched, resulting in a regexp stack
ca1e63a5 104;; overflow.
ffe0c7ef 105;;
1fffafda
LK
106;; Solution suggestion: Instead of using ".", use the sequence
107;; "[^\n\r]". This will make the rules behave just as before, but
108;; they will work together with selective-display.
ca1e63a5
RS
109
110;;; Code:
111
1fffafda 112(eval-when-compile (require 'font-lock))
ca1e63a5 113
ef1c5063 114(defgroup generic-x nil
9285b8bc 115 "A collection of generic modes."
ef1c5063 116 :prefix "generic-"
9285b8bc 117 :group 'data
10714c98 118 :version "20.3")
ef1c5063 119
9285b8bc
LK
120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
121;; Default-Generic mode
122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
123
124(defcustom generic-use-find-file-hook t
125 "*If non-nil, add a hook to enter `default-generic-mode' automatically.
126This is done if the first few lines of a file in fundamental mode
127start with a hash comment character."
128 :group 'generic-x
129 :type 'boolean)
130
131(defcustom generic-lines-to-scan 3
132 "*Number of lines that `generic-mode-find-file-hook' looks at.
133Relevant when deciding whether to enter Default-Generic mode automatically.
134This variable should be set to a small positive number."
135 :group 'generic-x
136 :type 'integer)
137
138(defcustom generic-find-file-regexp "^#"
139 "*Regular expression used by `generic-mode-find-file-hook'.
140Files in fundamental mode whose first few lines contain a match
141for this regexp, should be put into Default-Generic mode instead.
142The number of lines tested for the matches is specified by the
143value of the variable `generic-lines-to-scan', which see."
144 :group 'generic-x
145 :type 'regexp)
146
147(defcustom generic-ignore-files-regexp "[Tt][Aa][Gg][Ss]\\'"
148 "*Regular expression used by `generic-mode-find-file-hook'.
149Files whose names match this regular expression should not be put
150into Default-Generic mode, even if they have lines which match
151the regexp in `generic-find-file-regexp'. If the value is nil,
152`generic-mode-find-file-hook' does not check the file names."
153 :group 'generic-x
154 :type '(choice (const :tag "Don't check file names" nil) regexp))
155
156;; This generic mode is always defined
d4fb185d 157(define-generic-mode default-generic-mode (list ?#) nil nil nil nil)
9285b8bc
LK
158
159;; A more general solution would allow us to enter generic-mode for
160;; *any* comment character, but would require us to synthesize a new
161;; generic-mode on the fly. I think this gives us most of what we
162;; want.
163(defun generic-mode-find-file-hook ()
164 "Hook function to enter Default-Generic mode automatically.
165
166Done if the first few lines of a file in Fundamental mode start
167with a match for the regexp in `generic-find-file-regexp', unless
168the file's name matches the regexp which is the value of the
169variable `generic-ignore-files-regexp'.
170
171This hook will be installed if the variable
172`generic-use-find-file-hook' is non-nil. The variable
173`generic-lines-to-scan' determines the number of lines to look at."
174 (when (and (eq major-mode 'fundamental-mode)
175 (or (null generic-ignore-files-regexp)
176 (not (string-match
177 generic-ignore-files-regexp
178 (file-name-sans-versions buffer-file-name)))))
179 (save-excursion
180 (goto-char (point-min))
181 (when (re-search-forward generic-find-file-regexp
182 (save-excursion
183 (forward-line generic-lines-to-scan)
184 (point)) t)
185 (goto-char (point-min))
186 (default-generic-mode)))))
187
9285b8bc
LK
188(and generic-use-find-file-hook
189 (add-hook 'find-file-hook 'generic-mode-find-file-hook))
190
191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
192;; Other Generic modes
193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
194
1fffafda
LK
195;; If you add a generic mode to this file, put it in one of these four
196;; lists as well.
197
198(defconst generic-default-modes
199 '(apache-conf-generic-mode
200 apache-log-generic-mode
201 hosts-generic-mode
202 java-manifest-generic-mode
203 java-properties-generic-mode
204 javascript-generic-mode
205 show-tabs-generic-mode
206 vrml-generic-mode)
207 "List of generic modes that are defined by default.")
208
209(defconst generic-mswindows-modes
210 '(bat-generic-mode
211 inf-generic-mode
212 ini-generic-mode
213 rc-generic-mode
214 reg-generic-mode
215 rul-generic-mode)
216 "List of generic modes that are defined by default on MS-Windows.")
217
218(defconst generic-unix-modes
219 '(alias-generic-mode
220 etc-fstab-generic-mode
221 etc-modules-conf-generic-mode
222 etc-passwd-generic-mode
223 etc-services-generic-mode
224 fvwm-generic-mode
225 inetd-conf-generic-mode
226 mailagent-rules-generic-mode
227 mailrc-generic-mode
228 named-boot-generic-mode
229 named-database-generic-mode
230 prototype-generic-mode
231 resolve-conf-generic-mode
232 samba-generic-mode
233 x-resource-generic-mode)
234 "List of generic modes that are defined by default on Unix.")
235
236(defconst generic-other-modes
237 '(astap-generic-mode
238 ibis-generic-mode
239 pkginfo-generic-mode
240 spice-generic-mode)
241 "List of generic mode that are not defined by default.")
ca1e63a5 242
ffe0c7ef 243(defcustom generic-define-mswindows-modes
d8677156 244 (memq system-type '(windows-nt ms-dos))
1fffafda
LK
245 "*Non-nil means the modes in `generic-mswindows-modes' will be defined.
246This is a list of MS-Windows specific generic modes. This variable
76ee7bd5 247only affects the default value of `generic-extras-enable-list'."
ca1e63a5 248 :group 'generic-x
1fffafda
LK
249 :type 'boolean
250 :version "22.1")
251(make-obsolete-variable 'generic-define-mswindows-modes 'generic-extras-enable-list "22.1")
ca1e63a5
RS
252
253(defcustom generic-define-unix-modes
d8677156 254 (not (memq system-type '(windows-nt ms-dos)))
1fffafda
LK
255 "*Non-nil means the modes in `generic-unix-modes' will be defined.
256This is a list of Unix specific generic modes. This variable only
76ee7bd5 257affects the default value of `generic-extras-enable-list'."
ca1e63a5 258 :group 'generic-x
1fffafda
LK
259 :type 'boolean
260 :version "22.1")
261(make-obsolete-variable 'generic-define-unix-modes 'generic-extras-enable-list "22.1")
262
263(defcustom generic-extras-enable-list
264 (append generic-default-modes
265 (if generic-define-mswindows-modes generic-mswindows-modes)
266 (if generic-define-unix-modes generic-unix-modes)
267 nil)
268 "List of generic modes to define.
269Each entry in the list should be a symbol. If you set this variable
270directly, without using customize, you must reload generic-x to put
271your changes into effect."
272 :group 'generic-x
273 :type (let (list)
274 (dolist (mode
275 (sort (append generic-default-modes
276 generic-mswindows-modes
277 generic-unix-modes
278 generic-other-modes
279 nil)
280 (lambda (a b)
281 (string< (symbol-name b)
282 (symbol-name a))))
283 (cons 'set list))
284 (push `(const ,mode) list)))
285 :set (lambda (s v)
286 (set-default s v)
287 (unless load-in-progress
288 (load "generic-x")))
289 :version "22.1")
ca1e63a5 290
ca1e63a5 291;;; Apache
d8677156
LK
292(when (memq 'apache-conf-generic-mode generic-extras-enable-list)
293
294(define-generic-mode apache-conf-generic-mode
82e38f3e 295 '(?#)
d8677156 296 nil
82e38f3e
LK
297 '(("^\\s-*\\(<.*>\\)" 1 font-lock-constant-face)
298 ("^\\s-*\\(\\sw+\\)\\s-" 1 font-lock-variable-name-face))
299 '("srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
d8677156
LK
300 (list
301 (function
302 (lambda ()
ffe0c7ef
PB
303 (setq imenu-generic-expression
304 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)
305 ("*Directories*" "^\\s-*<Directory\\s-*\\([^>]+\\)>" 1)
d8677156 306 ("*Locations*" "^\\s-*<Location\\s-*\\([^>]+\\)>" 1))))))
d4fb185d 307 "Generic mode for Apache or HTTPD configuration files."))
ffe0c7ef 308
d8677156 309(when (memq 'apache-log-generic-mode generic-extras-enable-list)
ffe0c7ef 310
d8677156 311(define-generic-mode apache-log-generic-mode
ffe0c7ef
PB
312 nil
313 nil
314 ;; Hostname ? user date request return-code number-of-bytes
315 '(("^\\([-a-zA-z0-9.]+\\) - [-A-Za-z]+ \\(\\[.*\\]\\)"
316 (1 font-lock-constant-face)
d8677156 317 (2 font-lock-variable-name-face)))
82e38f3e 318 '("access_log\\'")
ffe0c7ef 319 nil
76ee7bd5 320 "Mode for Apache log files."))
ffe0c7ef 321
ca1e63a5 322;;; Samba
d8677156
LK
323(when (memq 'samba-generic-mode generic-extras-enable-list)
324
325(define-generic-mode samba-generic-mode
82e38f3e 326 '(?\; ?#)
d8677156 327 nil
82e38f3e 328 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)
d8677156 329 ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)"
82e38f3e
LK
330 (1 font-lock-variable-name-face)
331 (2 font-lock-type-face)))
332 '("smb\\.conf\\'")
333 '(generic-bracket-support)
d4fb185d 334 "Generic mode for Samba configuration files."))
ca1e63a5
RS
335
336;;; Fvwm
337;; This is pretty basic. Also, modes for other window managers could
338;; be defined as well.
d8677156 339(when (memq 'fvwm-generic-mode generic-extras-enable-list)
ca1e63a5 340
d8677156 341(define-generic-mode fvwm-generic-mode
82e38f3e
LK
342 '(?#)
343 '("AddToMenu"
344 "AddToFunc"
345 "ButtonStyle"
346 "EndFunction"
347 "EndPopup"
348 "Function"
349 "IconPath"
350 "Key"
351 "ModulePath"
352 "Mouse"
353 "PixmapPath"
354 "Popup"
355 "Style")
d8677156 356 nil
82e38f3e 357 '("\\.fvwmrc\\'" "\\.fvwm2rc\\'")
d8677156 358 nil
d4fb185d 359 "Generic mode for FVWM configuration files."))
ca1e63a5
RS
360
361;;; X Resource
362;; I'm pretty sure I've seen an actual mode to do this, but I don't
363;; think it's standard with Emacs
d8677156 364(when (memq 'x-resource-generic-mode generic-extras-enable-list)
ca1e63a5 365
d8677156 366(define-generic-mode x-resource-generic-mode
82e38f3e 367 '(?!)
d8677156 368 nil
82e38f3e
LK
369 '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face))
370 '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
d8677156 371 nil
d4fb185d 372 "Generic mode for X Resource configuration files."))
ca1e63a5
RS
373
374;;; Hosts
d8677156 375(when (memq 'hosts-generic-mode generic-extras-enable-list)
ca1e63a5 376
d8677156 377(define-generic-mode hosts-generic-mode
82e38f3e
LK
378 '(?#)
379 '("localhost")
380 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face))
381 '("[hH][oO][sS][tT][sS]\\'")
d8677156 382 nil
d4fb185d 383 "Generic mode for HOSTS files."))
ca1e63a5
RS
384
385;;; Windows INF files
d8677156 386(when (memq 'inf-generic-mode generic-extras-enable-list)
ca1e63a5 387
d8677156 388(define-generic-mode inf-generic-mode
82e38f3e 389 '(?\;)
d8677156 390 nil
82e38f3e
LK
391 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face))
392 '("\\.[iI][nN][fF]\\'")
393 '(generic-bracket-support)
d4fb185d 394 "Generic mode for MS-Windows INF files."))
ca1e63a5
RS
395
396;;; Windows INI files
397;; Should define escape character as well!
d8677156
LK
398(when (memq 'ini-generic-mode generic-extras-enable-list)
399
400(define-generic-mode ini-generic-mode
82e38f3e 401 '(?\;)
d8677156 402 nil
82e38f3e 403 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)
d8677156
LK
404 ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$"
405 (1 font-lock-function-name-face)
406 (2 font-lock-variable-name-face)))
82e38f3e 407 '("\\.[iI][nN][iI]\\'")
d8677156
LK
408 (list
409 (function
410 (lambda ()
411 (setq imenu-generic-expression
412 '((nil "^\\[\\(.*\\)\\]" 1)
413 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1))))))
a2d66c78
LK
414 "Generic mode for MS-Windows INI files.
415You can use `ini-generic-mode-find-file-hook' to enter this mode
d4fb185d 416automatically for INI files whose names do not end in \".ini\".")
a2d66c78
LK
417
418(defun ini-generic-mode-find-file-hook ()
419 "Hook function to enter Ini-Generic mode automatically for INI files.
420Done if the first few lines of a file in Fundamental mode look
421like an INI file. You can add this hook to `find-file-hook'."
422 (and (eq major-mode 'fundamental-mode)
423 (save-excursion
424 (goto-char (point-min))
425 (and (looking-at "^\\s-*\\[.*\\]")
426 (ini-generic-mode)))))
427(defalias 'generic-mode-ini-file-find-file-hook 'ini-generic-mode-find-file-hook))
ca1e63a5
RS
428
429;;; Windows REG files
430;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
d8677156
LK
431(when (memq 'reg-generic-mode generic-extras-enable-list)
432
433(define-generic-mode reg-generic-mode
434 '(?\;)
435 '("key" "classes_root" "REGEDIT" "REGEDIT4")
ddb72af9 436 '(("\\(\\[.*\\]\\)" 1 font-lock-constant-face)
82e38f3e 437 ("^\\([^\n\r]*\\)\\s-*=" 1 font-lock-variable-name-face))
d8677156
LK
438 '("\\.[rR][eE][gG]\\'")
439 (list
440 (function
441 (lambda ()
442 (setq imenu-generic-expression
443 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
d4fb185d 444 "Generic mode for MS-Windows Registry files."))
ca1e63a5 445
d5f05c46
DN
446(declare-function w32-shell-name "w32-fns" ())
447
60bdd17f 448;;; DOS/Windows BAT files
d8677156
LK
449(when (memq 'bat-generic-mode generic-extras-enable-list)
450
451(define-generic-mode bat-generic-mode
452 nil
453 nil
82e38f3e 454 (eval-when-compile
ca1e63a5 455 (list
82e38f3e
LK
456 ;; Make this one first in the list, otherwise comments will
457 ;; be over-written by other variables
458 '("^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 font-lock-comment-face t)
459 '("^[ \t]*\\(::.*\\)" 1 font-lock-comment-face t)
460 '("^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)"
461 (1 font-lock-builtin-face)
462 (2 font-lock-constant-face t t))
463 ;; Any text (except ON/OFF) following ECHO is a string.
464 '("^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)"
465 (1 font-lock-builtin-face)
466 (3 font-lock-constant-face t t)
467 (5 font-lock-string-face t t))
468 ;; These keywords appear as the first word on a line. (Actually, they
469 ;; can also appear after "if ..." or "for ..." clause, but since they
470 ;; are frequently used in simple text, we punt.)
471 ;; In `generic-bat-mode-setup-function' we make the keywords
472 ;; case-insensitive
473 (generic-make-keywords-list
474 '("for"
475 "if")
16a013c2 476 font-lock-keyword-face "^[@ \t]*")
82e38f3e
LK
477 ;; These keywords can be anywhere on a line
478 ;; In `generic-bat-mode-setup-function' we make the keywords
479 ;; case-insensitive
480 (generic-make-keywords-list
481 '("do"
482 "exist"
483 "errorlevel"
484 "goto"
485 "not")
16a013c2 486 font-lock-keyword-face)
82e38f3e
LK
487 ;; These are built-in commands. Only frequently-used ones are listed.
488 (generic-make-keywords-list
489 '("CALL" "call" "Call"
490 "CD" "cd" "Cd"
491 "CLS" "cls" "Cls"
492 "COPY" "copy" "Copy"
493 "DEL" "del" "Del"
494 "ECHO" "echo" "Echo"
495 "MD" "md" "Md"
496 "PATH" "path" "Path"
497 "PAUSE" "pause" "Pause"
903ec1ba 498 "PROMPT" "prompt" "Prompt"
82e38f3e
LK
499 "RD" "rd" "Rd"
500 "REN" "ren" "Ren"
501 "SET" "set" "Set"
502 "START" "start" "Start"
503 "SHIFT" "shift" "Shift")
16a013c2 504 font-lock-builtin-face "[ \t|\n]")
82e38f3e
LK
505 '("^[ \t]*\\(:\\sw+\\)" 1 font-lock-function-name-face t)
506 '("\\(%\\sw+%\\)" 1 font-lock-variable-name-face t)
507 '("\\(%[0-9]\\)" 1 font-lock-variable-name-face t)
508 '("\\(/[^/ \"\t\n]+\\)" 1 font-lock-type-face)
509 '("[\t ]+\\([+-][^\t\n\" ]+\\)" 1 font-lock-type-face)
510 '("[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
511 (1 font-lock-keyword-face)
512 (2 font-lock-function-name-face nil t))
513 '("[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?"
514 (1 font-lock-builtin-face)
515 (2 font-lock-variable-name-face t t))))
516 '("\\.[bB][aA][tT]\\'"
6453a10e 517 "\\.[cC][mM][dD]\\'"
82e38f3e
LK
518 "\\`[cC][oO][nN][fF][iI][gG]\\."
519 "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.")
520 '(generic-bat-mode-setup-function)
6453a10e 521 "Generic mode for MS-Windows batch files.")
d8677156
LK
522
523(defvar bat-generic-mode-syntax-table nil
1fffafda 524 "Syntax table in use in `bat-generic-mode' buffers.")
d8677156
LK
525
526(defvar bat-generic-mode-keymap (make-sparse-keymap)
76ee7bd5 527 "Keymap for `bat-generic-mode'.")
d8677156
LK
528
529(defun bat-generic-mode-compile ()
530 "Run the current BAT file in a compilation buffer."
531 (interactive)
532 (let ((compilation-buffer-name-function
533 (function
534 (lambda(ign)
535 (concat "*" (buffer-file-name) "*")))))
536 (compile
537 (concat (w32-shell-name) " -c " (buffer-file-name)))))
538
a2d66c78 539(eval-when-compile (require 'comint))
d8677156
LK
540(defun bat-generic-mode-run-as-comint ()
541 "Run the current BAT file in a comint buffer."
542 (interactive)
543 (require 'comint)
544 (let* ((file (buffer-file-name))
545 (buf-name (concat "*" file "*")))
546 (save-excursion
547 (set-buffer
548 (get-buffer-create buf-name))
549 (erase-buffer)
550 (comint-mode)
551 (comint-exec
552 buf-name
553 file
554 (w32-shell-name)
555 nil
556 (list "-c" file))
557 (display-buffer buf-name))))
558
559(define-key bat-generic-mode-keymap "\C-c\C-c" 'bat-generic-mode-compile)
560
561;; Make underscores count as words
562(unless bat-generic-mode-syntax-table
563 (setq bat-generic-mode-syntax-table (make-syntax-table))
16a013c2 564 (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table))
d8677156 565
16a013c2
LK
566;; bat-generic-mode doesn't use the comment functionality of
567;; define-generic-mode because it has a three-letter comment-string,
568;; so we do it here manually instead
d8677156 569(defun generic-bat-mode-setup-function ()
82e38f3e
LK
570 (make-local-variable 'parse-sexp-ignore-comments)
571 (make-local-variable 'comment-start)
572 (make-local-variable 'comment-start-skip)
573 (make-local-variable 'comment-end)
574 (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1))
d8677156 575 parse-sexp-ignore-comments t
82e38f3e
LK
576 comment-end ""
577 comment-start "REM "
578 comment-start-skip "[Rr][Ee][Mm] *")
579 (set-syntax-table bat-generic-mode-syntax-table)
d8677156 580 ;; Make keywords case-insensitive
16a013c2 581 (setq font-lock-defaults '(generic-font-lock-keywords nil t))
d8677156 582 (use-local-map bat-generic-mode-keymap)))
ca1e63a5
RS
583
584;;; Mailagent
82e38f3e
LK
585;; Mailagent is a Unix mail filtering program. Anyone wanna do a
586;; generic mode for procmail?
d8677156
LK
587(when (memq 'mailagent-rules-generic-mode generic-extras-enable-list)
588
589(define-generic-mode mailagent-rules-generic-mode
82e38f3e
LK
590 '(?#)
591 '("SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
592 '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face)
593 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face))
594 '("\\.rules\\'")
16a013c2
LK
595 (list
596 (function
597 (lambda ()
598 (setq imenu-generic-expression
599 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))))
d4fb185d 600 "Mode for Mailagent rules files."))
ca1e63a5
RS
601
602;; Solaris/Sys V prototype files
d8677156
LK
603(when (memq 'prototype-generic-mode generic-extras-enable-list)
604
605(define-generic-mode prototype-generic-mode
82e38f3e 606 '(?#)
d8677156
LK
607 nil
608 '(("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
609 (2 font-lock-constant-face)
610 (3 font-lock-keyword-face))
611 ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
612 (1 font-lock-constant-face)
613 (2 font-lock-keyword-face)
614 (3 font-lock-variable-name-face))
615 ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$"
616 (1 font-lock-keyword-face)
617 (3 font-lock-variable-name-face))
618 ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
619 (1 font-lock-keyword-face)
620 (2 font-lock-variable-name-face)))
82e38f3e 621 '("prototype\\'")
d8677156 622 nil
d4fb185d 623 "Mode for Sys V prototype files."))
ca1e63a5
RS
624
625;; Solaris/Sys V pkginfo files
d8677156
LK
626(when (memq 'pkginfo-generic-mode generic-extras-enable-list)
627
628(define-generic-mode pkginfo-generic-mode
82e38f3e 629 '(?#)
d8677156
LK
630 nil
631 '(("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
632 (1 font-lock-keyword-face)
633 (2 font-lock-variable-name-face)))
82e38f3e 634 '("pkginfo\\'")
d8677156 635 nil
d4fb185d 636 "Mode for Sys V pkginfo files."))
ca1e63a5
RS
637
638;; Javascript mode
ffe0c7ef 639;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU]
1fffafda
LK
640(when (memq 'javascript-generic-mode generic-extras-enable-list)
641
d8677156 642(define-generic-mode javascript-generic-mode
82e38f3e
LK
643 '("//" ("/*" . "*/"))
644 '("break"
645 "case"
646 "continue"
647 "default"
648 "delete"
649 "do"
650 "else"
651 "export"
652 "for"
653 "function"
654 "if"
655 "import"
656 "in"
657 "new"
658 "return"
659 "switch"
660 "this"
661 "typeof"
662 "var"
663 "void"
664 "while"
665 "with"
666 ;; words reserved for ECMA extensions below
667 "catch"
668 "class"
669 "const"
670 "debugger"
671 "enum"
672 "extends"
673 "finally"
674 "super"
675 "throw"
676 "try"
677 ;; Java Keywords reserved by JavaScript
678 "abstract"
679 "boolean"
680 "byte"
681 "char"
682 "double"
683 "false"
684 "final"
685 "float"
686 "goto"
687 "implements"
688 "instanceof"
689 "int"
690 "interface"
691 "long"
692 "native"
693 "null"
694 "package"
695 "private"
696 "protected"
697 "public"
698 "short"
699 "static"
700 "synchronized"
701 "throws"
702 "transient"
703 "true")
704 '(("^\\s-*function\\s-+\\([A-Za-z0-9_]+\\)"
705 (1 font-lock-function-name-face))
706 ("^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)"
707 (1 font-lock-variable-name-face)))
708 '("\\.js\\'")
ca1e63a5 709 (list
ffe0c7ef 710 (function
ca1e63a5 711 (lambda ()
ffe0c7ef
PB
712 (setq imenu-generic-expression
713 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)
d8677156 714 ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1))))))
d4fb185d 715 "Mode for JavaScript files."))
ca1e63a5
RS
716
717;; VRML files
1fffafda
LK
718(when (memq 'vrml-generic-mode generic-extras-enable-list)
719
d8677156 720(define-generic-mode vrml-generic-mode
82e38f3e
LK
721 '(?#)
722 '("DEF"
723 "NULL"
724 "USE"
725 "Viewpoint"
726 "ambientIntensity"
727 "appearance"
728 "children"
729 "color"
730 "coord"
731 "coordIndex"
732 "creaseAngle"
733 "diffuseColor"
734 "emissiveColor"
735 "fieldOfView"
736 "geometry"
737 "info"
738 "material"
739 "normal"
740 "orientation"
741 "position"
742 "shininess"
743 "specularColor"
744 "texCoord"
745 "texture"
746 "textureTransform"
747 "title"
748 "transparency"
749 "type")
750 '(("USE\\s-+\\([-A-Za-z0-9_]+\\)"
751 (1 font-lock-constant-face))
752 ("DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
753 (1 font-lock-type-face)
754 (2 font-lock-constant-face))
755 ("^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
756 (1 font-lock-function-name-face))
757 ("^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
758 (2 font-lock-variable-name-face)))
759 '("\\.wrl\\'")
ca1e63a5 760 (list
ffe0c7ef 761 (function
ca1e63a5 762 (lambda ()
ffe0c7ef 763 (setq imenu-generic-expression
ca1e63a5 764 '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1)
ffe0c7ef 765 ("*Definitions*"
ca1e63a5 766 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
d8677156 767 1))))))
d4fb185d 768 "Generic Mode for VRML files."))
ca1e63a5
RS
769
770;; Java Manifests
1fffafda
LK
771(when (memq 'java-manifest-generic-mode generic-extras-enable-list)
772
d8677156 773(define-generic-mode java-manifest-generic-mode
82e38f3e
LK
774 '(?#)
775 '("Name"
776 "Digest-Algorithms"
777 "Manifest-Version"
778 "Required-Version"
779 "Signature-Version"
780 "Magic"
781 "Java-Bean"
782 "Depends-On")
ca1e63a5
RS
783 '(("^Name:\\s-+\\([^\n\r]*\\)$"
784 (1 font-lock-variable-name-face))
785 ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
d8677156 786 (2 font-lock-constant-face)))
82e38f3e 787 '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
ca1e63a5 788 nil
76ee7bd5 789 "Mode for Java Manifest files."))
ca1e63a5
RS
790
791;; Java properties files
1fffafda
LK
792(when (memq 'java-properties-generic-mode generic-extras-enable-list)
793
d8677156 794(define-generic-mode java-properties-generic-mode
82e38f3e 795 '(?! ?#)
ca1e63a5 796 nil
82e38f3e
LK
797 (eval-when-compile
798 (let ((java-properties-key
799 "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)")
800 (java-properties-value
801 "\\([^\r\n]*\\)"))
802 ;; Property and value can be separated in a number of different ways:
803 ;; * whitespace
804 ;; * an equal sign
805 ;; * a colon
806 (mapcar
807 (function
808 (lambda (elt)
809 (list
810 (concat "^" java-properties-key elt java-properties-value "$")
811 '(1 font-lock-constant-face)
812 '(4 font-lock-variable-name-face))))
813 ;; These are the separators
814 '(":\\s-*" "\\s-+" "\\s-*=\\s-*"))))
ca1e63a5 815 nil
bb53e1ee
RS
816 (list
817 (function
818 (lambda ()
ffe0c7ef 819 (setq imenu-generic-expression
d8677156 820 '((nil "^\\([^#! \t\n\r=:]+\\)" 1))))))
d4fb185d 821 "Mode for Java properties files."))
ca1e63a5
RS
822
823;; C shell alias definitions
d8677156 824(when (memq 'alias-generic-mode generic-extras-enable-list)
ef1c5063 825
d8677156 826(define-generic-mode alias-generic-mode
82e38f3e
LK
827 '(?#)
828 '("alias" "unalias")
ca1e63a5
RS
829 '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+"
830 (1 font-lock-variable-name-face))
831 ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$"
d8677156 832 (1 font-lock-variable-name-face)))
82e38f3e 833 '("alias\\'")
ca1e63a5
RS
834 (list
835 (function
836 (lambda ()
ffe0c7ef 837 (setq imenu-generic-expression
d8677156 838 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2))))))
d4fb185d 839 "Mode for C Shell alias files."))
ca1e63a5
RS
840
841;;; Windows RC files
842;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
d8677156
LK
843(when (memq 'rc-generic-mode generic-extras-enable-list)
844
845(define-generic-mode rc-generic-mode
82e38f3e
LK
846 ;; '(?\/)
847 '("//")
d8677156
LK
848 '("ACCELERATORS"
849 "AUTO3STATE"
850 "AUTOCHECKBOX"
851 "AUTORADIOBUTTON"
852 "BITMAP"
853 "BOTTOMMARGIN"
854 "BUTTON"
855 "CAPTION"
856 "CHARACTERISTICS"
857 "CHECKBOX"
858 "CLASS"
859 "COMBOBOX"
860 "CONTROL"
861 "CTEXT"
862 "CURSOR"
863 "DEFPUSHBUTTON"
864 "DESIGNINFO"
865 "DIALOG"
866 "DISCARDABLE"
867 "EDITTEXT"
868 "EXSTYLE"
869 "FONT"
870 "GROUPBOX"
871 "GUIDELINES"
872 "ICON"
873 "LANGUAGE"
874 "LEFTMARGIN"
875 "LISTBOX"
876 "LTEXT"
877 "MENUITEM SEPARATOR"
878 "MENUITEM"
879 "MENU"
880 "MOVEABLE"
881 "POPUP"
882 "PRELOAD"
883 "PURE"
884 "PUSHBOX"
885 "PUSHBUTTON"
886 "RADIOBUTTON"
887 "RCDATA"
888 "RIGHTMARGIN"
889 "RTEXT"
890 "SCROLLBAR"
891 "SEPARATOR"
892 "STATE3"
893 "STRINGTABLE"
894 "STYLE"
895 "TEXTINCLUDE"
896 "TOOLBAR"
897 "TOPMARGIN"
898 "VERSIONINFO"
899 "VERSION")
900 ;; the choice of what tokens go where is somewhat arbitrary,
901 ;; as is the choice of which value tokens are included, as
902 ;; the choice of face for each token group
82e38f3e
LK
903 (eval-when-compile
904 (list
d8677156 905 (generic-make-keywords-list
82e38f3e
LK
906 '("FILEFLAGSMASK"
907 "FILEFLAGS"
908 "FILEOS"
909 "FILESUBTYPE"
910 "FILETYPE"
911 "FILEVERSION"
912 "PRODUCTVERSION")
16a013c2 913 font-lock-type-face)
d8677156 914 (generic-make-keywords-list
82e38f3e
LK
915 '("BEGIN"
916 "BLOCK"
917 "END"
918 "VALUE")
16a013c2 919 font-lock-function-name-face)
82e38f3e
LK
920 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
921 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face)
922 '("^#[ \t]*\\(elif\\|if\\)\\>"
923 ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
924 (1 font-lock-constant-face)
925 (2 font-lock-variable-name-face nil t)))
926 '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
927 (1 font-lock-constant-face)
928 (2 font-lock-variable-name-face nil t))))
60c19d5e 929 '("\\.[rR][cC]\\'")
82e38f3e 930 nil
d4fb185d 931 "Generic mode for MS-Windows Resource files."))
ca1e63a5 932
ef1c5063 933;; InstallShield RUL files
ca1e63a5 934;; Contributed by Alfred.Correira@Pervasive.Com
9845e669 935;; Bugfixes by "Rolf Sandau" <Rolf.Sandau@marconi.com>
d8677156
LK
936(when (memq 'rul-generic-mode generic-extras-enable-list)
937
82e38f3e
LK
938(eval-when-compile
939
ef1c5063 940;;; build the regexp strings using regexp-opt
82e38f3e
LK
941(defconst installshield-statement-keyword-list
942 '("abort"
943 "begin"
944 "call"
945 "case"
946 "declare"
947 "default"
948 "downto"
949 "elseif"
950 "else"
951 "endfor"
952 "endif"
953 "endswitch"
954 "endwhile"
955 "end"
956 "exit"
957 "external"
958 "for"
959 "function"
960 ;; "goto" -- handled elsewhere
961 "if"
962 "program"
963 "prototype"
964 "repeat"
965 "return"
966 "step"
967 "switch"
968 "then"
969 "to"
970 "typedef"
971 "until"
972 "void"
973 "while")
ef1c5063
RS
974 "Statement keywords used in InstallShield 3 and 5.")
975
82e38f3e
LK
976(defconst installshield-system-functions-list
977 '("AddFolderIcon"
978 "AddProfString"
979 "AddressString"
980 "AppCommand"
981 "AskDestPath"
982 "AskOptions"
983 "AskPath"
984 "AskText"
985 "AskYesNo"
986 "BatchDeleteEx"
987 "BatchFileLoad"
988 "BatchFileSave"
989 "BatchFind"
990 "BatchGetFileName"
991 "BatchMoveEx"
992 "BatchSetFileName"
993 "ChangeDirectory"
994 "CloseFile"
995 "CmdGetHwndDlg"
996 "ComponentAddItem" ; differs between IS3 and IS5
997 "ComponentCompareSizeRequired" ; IS5 only
998 "ComponentDialog"
999 "ComponentError" ; IS5 only
1000 "ComponentFileEnum" ; IS5 only
1001 "ComponentFileInfo" ; IS5 only
1002 "ComponentFilterLanguage" ; IS5 only
1003 "ComponentFilterOS" ; IS5 only
1004 "ComponentGetData" ; IS5 only
1005 "ComponentGetItemInfo" ; IS3 only
1006 "ComponentGetItemSize" ; differs between IS3 and IS5
1007 "ComponentIsItemSelected" ; differs between IS3 and IS5
1008 "ComponentListItems"
1009 "ComponentMoveData" ; IS5 only
1010 "ComponentSelectItem" ; differs between IS3 and IS5
1011 "ComponentSetData" ; IS5 only
1012 "ComponentSetItemInfo" ; IS3 only
1013 "ComponentSetTarget" ; IS5 only
1014 "ComponentSetupTypeEnum" ; IS5 only
1015 "ComponentSetupTypeGetData" ; IS5 only
1016 "ComponentSetupTypeSet" ; IS5 only
1017 "ComponentTotalSize"
1018 "ComponentValidate" ; IS5 only
1019 "CompressAdd" ; IS3 only
1020 "CompressDel" ; IS3 only
1021 "CompressEnum" ; IS3 only
1022 "CompressGet" ; IS3 only
1023 "CompressInfo" ; IS3 only
1024 "CopyFile"
1025 "CreateDir"
1026 "CreateFile"
1027 "CreateProgramFolder"
1028 "DeinstallSetReference" ; IS5 only
1029 "DeinstallStart"
1030 "Delay"
1031 "DeleteDir"
1032 "DeleteFile"
1033 "DialogSetInfo"
1034 "Disable"
1035 "DoInstall"
1036 "Do"
1037 "Enable"
1038 "EnterDisk"
1039 "ExistsDir"
1040 "ExistsDisk"
1041 "ExitProgMan"
1042 "EzBatchAddPath"
1043 "EzBatchAddString"
1044 "EzBatchReplace"
1045 "EzConfigAddDriver"
1046 "EzConfigAddString"
1047 "EzConfigGetValue"
1048 "EzConfigSetValue"
1049 "EzDefineDialog"
1050 "FileCompare"
1051 "FileDeleteLine"
1052 "FileGrep"
1053 "FileInsertLine"
1054 "FileSetBeginDefine" ; IS3 only
1055 "FileSetEndDefine" ; IS3 only
1056 "FileSetPerformEz" ; IS3 only
1057 "FileSetPerform" ; IS3 only
1058 "FileSetReset" ; IS3 only
1059 "FileSetRoot" ; IS3 only
1060 "FindAllDirs"
1061 "FindAllFiles"
1062 "FindFile"
1063 "FindWindow"
1064 "GetDiskSpace"
1065 "GetDisk"
1066 "GetEnvVar"
1067 "GetExtents"
1068 "GetFileInfo"
1069 "GetLine"
1070 "GetProfInt"
1071 "GetProfString"
1072 "GetSystemInfo"
1073 "GetValidDrivesList"
1074 "GetVersion"
1075 "GetWindowHandle"
1076 "InstallationInfo"
1077 "Is"
1078 "LaunchApp"
1079 "LaunchAppAndWait"
1080 "ListAddItem"
1081 "ListAddString"
1082 "ListCount"
1083 "ListCreate"
1084 "ListDestroy"
1085 "ListFindItem"
1086 "ListFindString"
1087 "ListGetFirstItem"
1088 "ListGetFirstString"
1089 "ListGetNextItem"
1090 "ListGetNextString"
1091 "ListReadFromFile"
1092 "ListSetCurrentItem"
1093 "ListSetNextItem"
1094 "ListSetNextString"
1095 "ListSetIndex"
1096 "ListWriteToFile"
1097 "LongPathToQuote"
1098 "LongPathToShortPath"
1099 "MessageBox"
1100 "NumToStr"
1101 "OpenFileMode"
1102 "OpenFile"
1103 "ParsePath"
1104 "PathAdd"
1105 "PathDelete"
1106 "PathFind"
1107 "PathGet"
1108 "PathMove"
1109 "PathSet"
1110 "Path"
1111 "PlaceBitmap"
1112 "PlaceWindow"
1113 "PlayMMedia" ; IS5 only
1114 "ProgDefGroupType"
1115 "RegDBCreateKeyEx"
1116 "RegDBDeleteValue"
1117 "RegDBGetItem"
1118 "RegDBKeyExist"
1119 "RegDBSetItem"
1120 "RegDBGetKeyValueEx"
1121 "RegDBSetKeyValueEx"
1122 "RegDBSetDefaultRoot"
1123 "RenameFile"
1124 "ReplaceFolderIcon"
1125 "ReplaceProfString"
1126 "SdAskDestPath"
1127 "SdAskOptions"
1128 "SdAskOptionsList"
1129 "SdBitmap"
1130 "SdCloseDlg"
1131 "SdComponentAdvCheckSpace"
1132 "SdComponentAdvInit"
1133 "SdComponentAdvUpdateSpace"
1134 "SdComponentDialog"
1135 "SdComponentDialog2"
1136 "SdComponentDialogAdv"
1137 "SdComponentDialogEx"
1138 "SdComponentDlgCheckSpace"
1139 "SdComponentMult"
1140 "SdConfirmNewDir"
1141 "SdConfirmRegistration"
1142 "SdDiskSpace"
1143 "SdDisplayTopics"
1144 "SdDoStdButton"
1145 "SdEnablement"
1146 "SdError"
1147 "SdFinish"
1148 "SdFinishInit32"
1149 "SdFinishReboot"
1150 "SdGeneralInit"
1151 "SdGetItemName"
1152 "SdGetTextExtent"
1153 "SdGetUserCompanyInfo"
1154 "SdInit"
1155 "SdIsShellExplorer"
1156 "SdIsStdButton"
1157 "SdLicense"
1158 "SdMakeName"
1159 "SdOptionInit"
1160 "SdOptionSetState"
1161 "SdOptionsButtons"
1162 "SdOptionsButtonsInit"
1163 "SdPlugInProductName"
1164 "SdProductName"
1165 "SdRegEnableButton"
1166 "SdRegExEnableButton"
1167 "SdRegisterUser"
1168 "SdRegisterUserEx"
1169 "SdRemoveEndSpace"
1170 "SdSelectFolder"
1171 "SdSetSequentialItems"
1172 "SdSetStatic"
1173 "SdSetupTypeEx" ; IS5 only
1174 "SdSetupType"
1175 "SdShowAnyDialog"
1176 "SdShowDlgEdit1"
1177 "SdShowDlgEdit2"
1178 "SdShowDlgEdit3"
1179 "SdShowFileMods"
1180 "SdShowInfoList"
1181 "SdShowMsg"
1182 "SdStartCopy"
1183 "SdUnInit"
1184 "SdUpdateComponentSelection"
1185 "SdWelcome"
1186 "SendMessage"
1187 "SetColor"
1188 "SetFont"
1189 "SetDialogTitle"
1190 "SetDisplayEffect" ; IS5 only
1191 "SetFileInfo"
1192 "SetForegroundWindow"
1193 "SetStatusWindow"
1194 "SetTitle"
1195 "SetupType"
1196 "ShowProgramFolder"
1197 "Split" ; IS3 only
1198 "SprintfBox"
1199 "Sprintf"
1200 "StatusUpdate"
1201 "StrCompare"
1202 "StrFind"
1203 "StrGetTokens"
1204 "StrLength"
1205 "StrRemoveLastSlash"
1206 "StrToLower"
1207 "StrToNum"
1208 "StrToUpper"
1209 "StrSub"
1210 "VarRestore"
1211 "VarSave"
1212 "VerCompare"
1213 "VerGetFileVersion"
1214 "WaitOnDialog"
1215 "Welcome"
1216 "WriteLine"
1217 "WriteProfString"
1218 "XCopyFile")
ef1c5063
RS
1219 "System functions defined in InstallShield 3 and 5.")
1220
82e38f3e
LK
1221(defconst installshield-system-variables-list
1222 '("BATCH_INSTALL"
1223 "CMDLINE"
1224 "COMMONFILES"
1225 "CORECOMPONENTHANDLING"
1226 "DIALOGCACHE"
1227 "ERRORFILENAME"
1228 "FOLDER_DESKTOP"
1229 "FOLDER_PROGRAMS"
1230 "FOLDER_STARTMENU"
1231 "FOLDER_STARTUP"
1232 "INFOFILENAME"
1233 "ISRES"
1234 "ISUSER"
1235 "ISVERSION"
1236 "MEDIA"
1237 "MODE"
1238 "PROGRAMFILES"
1239 "SELECTED_LANGUAGE"
1240 "SRCDIR"
1241 "SRCDISK"
1242 "SUPPORTDIR"
1243 "TARGETDIR"
1244 "TARGETDISK"
1245 "UNINST"
1246 "WINDIR"
1247 "WINDISK"
1248 "WINMAJOR"
1249 "WINSYSDIR"
1250 "WINSYSDISK")
ef1c5063
RS
1251 "System variables used in InstallShield 3 and 5.")
1252
82e38f3e
LK
1253(defconst installshield-types-list
1254 '("BOOL"
1255 "BYREF"
1256 "CHAR"
1257 "HIWORD"
1258 "HWND"
1259 "INT"
1260 "LIST"
1261 "LONG"
1262 "LOWORD"
1263 "LPSTR"
1264 "NUMBER"
1265 "NUMBERLIST"
1266 "POINTER"
1267 "QUAD"
1268 "RGB"
1269 "SHORT"
1270 "STRINGLIST"
1271 "STRING")
ef1c5063
RS
1272 "Type keywords used in InstallShield 3 and 5.")
1273
1274;;; some might want to skip highlighting these to improve performance
82e38f3e
LK
1275(defconst installshield-funarg-constants-list
1276 '("AFTER"
1277 "APPEND"
1278 "ALLCONTENTS"
1279 "BACKBUTTON"
1280 "BACKGROUNDCAPTION"
1281 "BACKGROUND"
1282 "BACK"
1283 "BASEMEMORY"
1284 "BEFORE"
1285 "BIOS"
1286 "BITMAPICON"
1287 "BK_BLUE"
1288 "BK_GREEN"
1289 "BK_RED"
1290 "BLUE"
1291 "BOOTUPDRIVE"
1292 "CANCEL"
1293 "CDROM_DRIVE"
1294 "CDROM"
1295 "CHECKBOX95"
1296 "CHECKBOX"
1297 "CHECKLINE"
1298 "CHECKMARK"
1299 "COLORS"
1300 "COMMANDEX"
1301 "COMMAND"
1302 "COMP_NORMAL"
1303 "COMP_UPDATE_DATE"
1304 "COMP_UPDATE_SAME"
1305 "COMP_UPDATE_VERSION"
1306 "COMPACT"
1307 "CONTINUE"
1308 "CPU"
1309 "CUSTOM"
1310 "DATE"
1311 "DEFWINDOWMODE"
1312 "DIR_WRITEABLE"
1313 "DIRECTORY"
1314 "DISABLE"
1315 "DISK_TOTALSPACE"
1316 "DISK"
1317 "DLG_OPTIONS"
1318 "DLG_PATH"
1319 "DLG_TEXT"
1320 "DLG_ASK_YESNO"
1321 "DLG_ENTER_DISK"
1322 "DLG_ERR"
1323 "DLG_INFO_ALTIMAGE"
1324 "DLG_INFO_CHECKSELECTION"
1325 "DLG_INFO_KUNITS"
1326 "DLG_INFO_USEDECIMAL"
1327 "DLG_MSG_INFORMATION"
1328 "DLG_MSG_SEVERE"
1329 "DLG_MSG_WARNING"
1330 "DLG_STATUS"
1331 "DLG_WARNING"
1332 "DLG_USER_CAPTION"
1333 "DRIVE"
1334 "ENABLE"
1335 "END_OF_FILE"
1336 "END_OF_LIST"
1337 "ENVSPACE"
1338 "EQUALS"
1339 "EXCLUDE_SUBDIR"
1340 "EXCLUSIVE"
1341 "EXISTS"
1342 "EXIT"
1343 "EXTENDED_MEMORY"
1344 "EXTENSION_ONLY"
1345 "FAILIFEXISTS"
1346 "FALSE"
1347 "FEEDBACK_FULL"
1348 "FILE_ATTR_ARCHIVED"
1349 "FILE_ATTR_DIRECTORY"
1350 "FILE_ATTR_HIDDEN"
1351 "FILE_ATTR_NORMAL"
1352 "FILE_ATTR_READONLY"
1353 "FILE_ATTR_SYSTEM"
1354 "FILE_ATTRIBUTE"
1355 "FILE_DATE"
1356 "FILE_LINE_LENGTH"
1357 "FILE_MODE_APPEND"
1358 "FILE_MODE_BINARYREADONLY"
1359 "FILE_MODE_BINARY"
1360 "FILE_MODE_NORMAL"
1361 "FILE_NO_VERSION"
1362 "FILE_NOT_FOUND"
1363 "FILE_SIZE"
1364 "FILE_TIME"
1365 "FILENAME_ONLY"
1366 "FILENAME"
1367 "FIXED_DRIVE"
1368 "FOLDER_DESKTOP"
1369 "FOLDER_PROGRAMS"
1370 "FOLDER_STARTMENU"
1371 "FOLDER_STARTUP"
1372 "FREEENVSPACE"
1373 "FULLWINDOWMODE"
1374 "FULL"
1375 "FONT_TITLE"
1376 "GREATER_THAN"
1377 "GREEN"
1378 "HKEY_CLASSES_ROOT"
1379 "HKEY_CURRENT_USER"
1380 "HKEY_LOCAL_MACHINE"
1381 "HKEY_USERS"
1382 "HOURGLASS"
1383 "INCLUDE_SUBDIR"
1384 "INDVFILESTATUS"
1385 "INFORMATION"
1386 "IS_WINDOWSNT"
1387 "IS_WINDOWS95"
1388 "IS_WINDOWS"
1389 "IS_WIN32S"
1390 "ISTYPE"
1391 "LANGUAGE_DRV"
1392 "LANGUAGE"
1393 "LESS_THAN"
1394 "LIST_NULL"
1395 "LISTFIRST"
1396 "LISTNEXT"
1397 "LOCKEDFILE"
1398 "LOGGING"
1399 "LOWER_LEFT"
1400 "LOWER_RIGHT"
1401 "MAGENTA"
1402 "MOUSE_DRV"
1403 "MOUSE"
1404 "NETWORK_DRV"
1405 "NETWORK"
1406 "NEXT"
1407 "NONEXCLUSIVE"
1408 "NORMALMODE"
1409 "NOSET"
1410 "NOTEXISTS"
1411 "NOWAIT"
1412 "NO"
1413 "OFF"
1414 "ONLYDIR"
1415 "ON"
1416 "OSMAJOR"
1417 "OSMINOR"
1418 "OS"
1419 "OTHER_FAILURE"
1420 "PARALLEL"
1421 "PARTIAL"
1422 "PATH_EXISTS"
1423 "PATH"
1424 "RED"
1425 "REGDB_APPPATH_DEFAULT"
1426 "REGDB_APPPATH"
1427 "REGDB_BINARY"
1428 "REGDB_ERR_CONNECTIONEXISTS"
1429 "REGDB_ERR_CORRUPTEDREGSITRY"
1430 "REGDB_ERR_INITIALIZATION"
1431 "REGDB_ERR_INVALIDHANDLE"
1432 "REGDB_ERR_INVALIDNAME"
1433 "REGDB_NUMBER"
1434 "REGDB_STRING_EXPAND"
1435 "REGDB_STRING_MULTI"
1436 "REGDB_STRING"
1437 "REGDB_UNINSTALL_NAME"
1438 "REMOTE_DRIVE"
1439 "REMOVALE_DRIVE"
1440 "REPLACE_ITEM"
1441 "REPLACE"
1442 "RESET"
1443 "RESTART"
1444 "ROOT"
1445 "SELFREGISTER"
1446 "SERIAL"
1447 "SET"
1448 "SEVERE"
1449 "SHAREDFILE"
1450 "SHARE"
1451 "SILENTMODE"
1452 "SRCTARGETDIR"
1453 "STATUSBAR"
1454 "STATUSDLG"
1455 "STATUSOLD"
1456 "STATUS"
1457 "STYLE_NORMAL"
1458 "SW_MAXIMIZE"
1459 "SW_MINIMIZE"
1460 "SW_RESTORE"
1461 "SW_SHOW"
1462 "SYS_BOOTMACHINE"
1463 "TIME"
1464 "TRUE"
1465 "TYPICAL"
1466 "UPPER_LEFT"
1467 "UPPER_RIGHT"
1468 "VALID_PATH"
1469 "VERSION"
1470 "VIDEO"
1471 "VOLUMELABEL"
1472 "YELLOW"
1473 "YES"
1474 "WAIT"
1475 "WARNING"
1476 "WINMAJOR"
1477 "WINMINOR"
1478 "WIN32SINSTALLED"
1479 "WIN32SMAJOR"
1480 "WIN32SMINOR")
1481 "Function argument constants used in InstallShield 3 and 5."))
ca1e63a5 1482
d8677156 1483(defvar rul-generic-mode-syntax-table nil
1fffafda 1484 "Syntax table to use in `rul-generic-mode' buffers.")
d8677156
LK
1485
1486(setq rul-generic-mode-syntax-table
1487 (make-syntax-table c++-mode-syntax-table))
1488
82e38f3e
LK
1489(modify-syntax-entry ?\r "> b" rul-generic-mode-syntax-table)
1490(modify-syntax-entry ?\n "> b" rul-generic-mode-syntax-table)
d8677156
LK
1491
1492(modify-syntax-entry ?/ ". 124b" rul-generic-mode-syntax-table)
1493(modify-syntax-entry ?* ". 23" rul-generic-mode-syntax-table)
1494
1495;; here manually instead
1496(defun generic-rul-mode-setup-function ()
82e38f3e
LK
1497 (make-local-variable 'parse-sexp-ignore-comments)
1498 (make-local-variable 'comment-start)
1499 (make-local-variable 'comment-start-skip)
1500 (make-local-variable 'comment-end)
d8677156
LK
1501 (setq imenu-generic-expression
1502 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1))
1503 parse-sexp-ignore-comments t
1504 comment-end "*/"
1505 comment-start "/*"
1506;;; comment-end ""
1507;;; comment-start "//"
1508;;; comment-start-skip ""
1509 )
82e38f3e 1510 ;; (set-syntax-table rul-generic-mode-syntax-table)
d8677156
LK
1511 (setq font-lock-syntax-table rul-generic-mode-syntax-table))
1512
1513;; moved mode-definition behind defun-definition to be warning-free - 15.11.02/RSan
1514(define-generic-mode rul-generic-mode
1515 ;; Using "/*" and "*/" doesn't seem to be working right
82e38f3e
LK
1516 '("//" ("/*" . "*/" ))
1517 (eval-when-compile installshield-statement-keyword-list)
1518 (eval-when-compile
1519 (list
1520 ;; preprocessor constructs
1521 '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
1522 1 font-lock-string-face)
1523 '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
1524 (1 font-lock-reference-face)
1525 (2 font-lock-variable-name-face nil t))
1526 ;; indirect string constants
1527 '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face)
1528 ;; gotos
1529 '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face)
1530 '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
1531 (1 font-lock-keyword-face)
1532 (2 font-lock-reference-face nil t))
1533 ;; system variables
1534 (generic-make-keywords-list
1535 installshield-system-variables-list
16a013c2 1536 font-lock-variable-name-face "[^_]" "[^_]")
82e38f3e
LK
1537 ;; system functions
1538 (generic-make-keywords-list
1539 installshield-system-functions-list
16a013c2 1540 font-lock-function-name-face "[^_]" "[^_]")
82e38f3e
LK
1541 ;; type keywords
1542 (generic-make-keywords-list
1543 installshield-types-list
16a013c2 1544 font-lock-type-face "[^_]" "[^_]")
82e38f3e
LK
1545 ;; function argument constants
1546 (generic-make-keywords-list
1547 installshield-funarg-constants-list
16a013c2 1548 font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice?
60c19d5e 1549 '("\\.[rR][uU][lL]\\'")
82e38f3e 1550 '(generic-rul-mode-setup-function)
d4fb185d 1551 "Generic mode for InstallShield RUL files.")
d8677156 1552
ca1e63a5 1553(define-skeleton rul-if
d8677156
LK
1554 "Insert an if statement."
1555 "condition: "
1556 "if(" str ") then" \n
1557 > _ \n
1558 ( "other condition, %s: "
1559 > "elseif(" str ") then" \n
1560 > \n)
1561 > "else" \n
1562 > \n
1563 resume:
1564 > "endif;")
ca1e63a5
RS
1565
1566(define-skeleton rul-function
1567 "Insert a function statement."
1568 "function: "
1569 "function " str " ()" \n
1570 ( "local variables, %s: "
d8677156 1571 > " " str ";" \n)
ca1e63a5
RS
1572 > "begin" \n
1573 > _ \n
1574 resume:
d8677156 1575 > "end;"))
ca1e63a5
RS
1576
1577;; Additions by ACorreir@pervasive-sw.com (Alfred Correira)
1fffafda
LK
1578(when (memq 'mailrc-generic-mode generic-extras-enable-list)
1579
d8677156 1580(define-generic-mode mailrc-generic-mode
82e38f3e
LK
1581 '(?#)
1582 '("alias"
1583 "else"
1584 "endif"
1585 "group"
1586 "if"
1587 "ignore"
1588 "set"
1589 "source"
1590 "unset")
ca1e63a5 1591 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
16a013c2
LK
1592 (2 font-lock-constant-face)
1593 (3 font-lock-variable-name-face))
ca1e63a5 1594 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
16a013c2
LK
1595 (2 font-lock-constant-face)
1596 (3 font-lock-variable-name-face))
5d1c5247
FP
1597 ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1598 (2 font-lock-variable-name-face)))
82e38f3e 1599 '("\\.mailrc\\'")
ca1e63a5 1600 nil
d4fb185d 1601 "Mode for mailrc files."))
ca1e63a5 1602
bb53e1ee 1603;; Inetd.conf
d8677156 1604(when (memq 'inetd-conf-generic-mode generic-extras-enable-list)
bb53e1ee 1605
d8677156 1606(define-generic-mode inetd-conf-generic-mode
82e38f3e
LK
1607 '(?#)
1608 '("stream"
1609 "dgram"
1610 "tcp"
1611 "udp"
1612 "wait"
1613 "nowait"
1614 "internal")
1615 '(("^\\([-A-Za-z0-9_]+\\)" 1 font-lock-type-face))
bb53e1ee 1616 '("/etc/inetd.conf\\'")
ffe0c7ef 1617 (list
bb53e1ee
RS
1618 (function
1619 (lambda ()
ffe0c7ef 1620 (setq imenu-generic-expression
d4fb185d 1621 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))))
bb53e1ee
RS
1622
1623;; Services
d8677156 1624(when (memq 'etc-services-generic-mode generic-extras-enable-list)
bb53e1ee 1625
d8677156 1626(define-generic-mode etc-services-generic-mode
82e38f3e
LK
1627 '(?#)
1628 '("tcp"
1629 "udp"
1630 "ddp")
d8677156 1631 '(("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/"
82e38f3e
LK
1632 (1 font-lock-type-face)
1633 (2 font-lock-variable-name-face)))
bb53e1ee 1634 '("/etc/services\\'")
ffe0c7ef 1635 (list
bb53e1ee
RS
1636 (function
1637 (lambda ()
ffe0c7ef 1638 (setq imenu-generic-expression
d4fb185d 1639 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))))
bb53e1ee
RS
1640
1641;; Password and Group files
d8677156 1642(when (memq 'etc-passwd-generic-mode generic-extras-enable-list)
bb53e1ee 1643
d8677156 1644(define-generic-mode etc-passwd-generic-mode
bb53e1ee 1645 nil ;; No comment characters
82e38f3e
LK
1646 '("root") ;; Only one keyword
1647 (eval-when-compile
1648 (list
1649 (list
1650 (concat
1651 "^"
1652 ;; User name -- Never blank!
1653 "\\([^:]+\\)"
1654 ":"
1655 ;; Password, UID and GID
1656 (mapconcat
1657 'identity
1658 (make-list 3 "\\([^:]+\\)")
1659 ":")
1660 ":"
1661 ;; GECOS/Name -- might be blank
1662 "\\([^:]*\\)"
1663 ":"
1664 ;; Home directory and shell
1665 "\\([^:]+\\)"
1666 ":?"
1667 "\\([^:]*\\)"
1668 "$")
1669 '(1 font-lock-type-face)
1670 '(5 font-lock-variable-name-face)
1671 '(6 font-lock-constant-face)
1672 '(7 font-lock-warning-face))
1673 '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$"
1674 (1 font-lock-type-face)
1675 (4 font-lock-variable-name-face))))
bb53e1ee 1676 '("/etc/passwd\\'" "/etc/group\\'")
ffe0c7ef 1677 (list
bb53e1ee
RS
1678 (function
1679 (lambda ()
ffe0c7ef 1680 (setq imenu-generic-expression
d4fb185d 1681 '((nil "^\\([-A-Za-z0-9_]+\\):" 1))))))))
bb53e1ee 1682
7aeb9d6f 1683;; Fstab
d8677156 1684(when (memq 'etc-fstab-generic-mode generic-extras-enable-list)
7aeb9d6f 1685
d8677156 1686(define-generic-mode etc-fstab-generic-mode
82e38f3e
LK
1687 '(?#)
1688 '("adfs"
1689 "affs"
1690 "autofs"
1691 "coda"
1692 "coherent"
1693 "cramfs"
1694 "devpts"
1695 "efs"
1696 "ext2"
1697 "ext3"
1698 "hfs"
1699 "hpfs"
1700 "iso9660"
1701 "jfs"
1702 "minix"
1703 "msdos"
1704 "ncpfs"
1705 "nfs"
1706 "ntfs"
1707 "proc"
1708 "qnx4"
1709 "reiserfs"
1710 "romfs"
1711 "smbfs"
3e54ab6c
LH
1712 "cifs"
1713 "usbdevfs"
82e38f3e
LK
1714 "sysv"
1715 "tmpfs"
1716 "udf"
1717 "ufs"
1718 "umsdos"
1719 "vfat"
1720 "xenix"
1721 "xfs"
1722 "swap"
1723 "auto"
1724 "ignore")
3e54ab6c 1725 '(("^\\([^# \t]+\\)\\s-+\\([^# \t]+\\)"
60c19d5e
LK
1726 (1 font-lock-type-face t)
1727 (2 font-lock-variable-name-face t)))
7aeb9d6f
PB
1728 '("/etc/[v]*fstab\\'")
1729 (list
1730 (function
1731 (lambda ()
1732 (setq imenu-generic-expression
3e54ab6c 1733 '((nil "^\\([^# \t]+\\)\\s-+" 1))))))))
bb53e1ee
RS
1734
1735;; From Jacques Duthen <jacques.duthen@sncf.fr>
1fffafda
LK
1736(when (memq 'show-tabs-generic-mode generic-extras-enable-list)
1737
16a013c2
LK
1738(eval-when-compile
1739
1740(defconst show-tabs-generic-mode-font-lock-defaults-1
82e38f3e 1741 '(;; trailing spaces must come before...
f0b3dcbf 1742 ("[ \t]+$" . 'show-tabs-space)
d8677156 1743 ;; ...embedded tabs
f0b3dcbf 1744 ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab))))
bb53e1ee 1745
16a013c2 1746(defconst show-tabs-generic-mode-font-lock-defaults-2
82e38f3e 1747 '(;; trailing spaces must come before...
f0b3dcbf 1748 ("[ \t]+$" . 'show-tabs-space)
d8677156 1749 ;; ...tabs
f0b3dcbf 1750 ("\t+" . 'show-tabs-tab))))
bb53e1ee 1751
f0b3dcbf 1752(defface show-tabs-tab
16a013c2
LK
1753 '((((class grayscale) (background light)) (:background "DimGray" :weight bold))
1754 (((class grayscale) (background dark)) (:background "LightGray" :weight bold))
ea81d57e
DN
1755 (((class color) (min-colors 88)) (:background "red1"))
1756 (((class color)) (:background "red"))
1fd714a4 1757 (t (:weight bold)))
bb53e1ee 1758 "Font Lock mode face used to highlight TABs."
d4fb185d 1759 :group 'generic-x)
f0b3dcbf
MB
1760;; backward-compatibility alias
1761(put 'show-tabs-tab-face 'face-alias 'show-tabs-tab)
bb53e1ee 1762
f0b3dcbf 1763(defface show-tabs-space
16a013c2
LK
1764 '((((class grayscale) (background light)) (:background "DimGray" :weight bold))
1765 (((class grayscale) (background dark)) (:background "LightGray" :weight bold))
ea81d57e
DN
1766 (((class color) (min-colors 88)) (:background "yellow1"))
1767 (((class color)) (:background "yellow"))
1fd714a4 1768 (t (:weight bold)))
bb53e1ee 1769 "Font Lock mode face used to highlight spaces."
d4fb185d 1770 :group 'generic-x)
f0b3dcbf
MB
1771;; backward-compatibility alias
1772(put 'show-tabs-space-face 'face-alias 'show-tabs-space)
bb53e1ee 1773
d8677156 1774(define-generic-mode show-tabs-generic-mode
82e38f3e
LK
1775 nil ;; no comment char
1776 nil ;; no keywords
16a013c2 1777 (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1)
82e38f3e
LK
1778 nil ;; no auto-mode-alist
1779 ;; '(show-tabs-generic-mode-hook-fun)
bb53e1ee 1780 nil
76ee7bd5 1781 "Generic mode to show tabs and trailing spaces."))
bb53e1ee 1782
ffe0c7ef
PB
1783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1784;; DNS modes
1785;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1786
1fffafda
LK
1787(when (memq 'named-boot-generic-mode generic-extras-enable-list)
1788
d8677156
LK
1789(define-generic-mode named-boot-generic-mode
1790 ;; List of comment characters
82e38f3e 1791 '(?\;)
d8677156 1792 ;; List of keywords
82e38f3e
LK
1793 '("cache" "primary" "secondary" "forwarders" "limit" "options"
1794 "directory" "check-names")
d8677156 1795 ;; List of additional font-lock-expressions
82e38f3e
LK
1796 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)
1797 ("^directory\\s-+\\(.*\\)" 1 font-lock-variable-name-face)
1798 ("^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)"
1799 (2 font-lock-variable-name-face)
1800 (3 font-lock-constant-face)))
d8677156 1801 ;; List of additional automode-alist expressions
82e38f3e 1802 '("/etc/named.boot\\'")
d8677156 1803 ;; List of set up functions to call
d4fb185d 1804 nil))
1fffafda
LK
1805
1806(when (memq 'named-database-generic-mode generic-extras-enable-list)
ffe0c7ef 1807
d8677156
LK
1808(define-generic-mode named-database-generic-mode
1809 ;; List of comment characters
82e38f3e 1810 '(?\;)
d8677156 1811 ;; List of keywords
82e38f3e 1812 '("IN" "NS" "CNAME" "SOA" "PTR" "MX" "A")
d8677156 1813 ;; List of additional font-lock-expressions
82e38f3e
LK
1814 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)
1815 ("^\\([.A-Za-z0-9]+\\)" 1 font-lock-variable-name-face))
60c19d5e 1816 ;; List of additional auto-mode-alist expressions
ffe0c7ef 1817 nil
d8677156 1818 ;; List of set up functions to call
d4fb185d 1819 nil)
ffe0c7ef
PB
1820
1821(defvar named-database-time-string "%Y%m%d%H"
1822 "Timestring for named serial numbers.")
1823
1824(defun named-database-print-serial ()
1825 "Print a serial number based on the current date."
1826 (interactive)
1fffafda
LK
1827 (insert (format-time-string named-database-time-string (current-time)))))
1828
1829(when (memq 'resolve-conf-generic-mode generic-extras-enable-list)
ffe0c7ef 1830
d8677156
LK
1831(define-generic-mode resolve-conf-generic-mode
1832 ;; List of comment characters
82e38f3e 1833 '(?#)
d8677156 1834 ;; List of keywords
82e38f3e 1835 '("nameserver" "domain" "search" "sortlist" "options")
d8677156 1836 ;; List of additional font-lock-expressions
ffe0c7ef 1837 nil
60c19d5e 1838 ;; List of additional auto-mode-alist expressions
82e38f3e 1839 '("/etc/resolv[e]?.conf\\'")
d8677156 1840 ;; List of set up functions to call
d4fb185d 1841 nil))
ffe0c7ef
PB
1842
1843;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1844;; Modes for spice and common electrical engineering circuit netlist formats
1845;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1846
1fffafda
LK
1847(when (memq 'spice-generic-mode generic-extras-enable-list)
1848
d8677156 1849(define-generic-mode spice-generic-mode
ffe0c7ef 1850 nil
82e38f3e
LK
1851 '("and"
1852 "cccs"
1853 "ccvs"
1854 "delay"
1855 "nand"
1856 "nor"
1857 "npwl"
1858 "or"
1859 "par"
1860 "ppwl"
1861 "pwl"
1862 "vccap"
1863 "vccs"
1864 "vcr"
1865 "vcvs")
1866 '(("^\\s-*\\([*].*\\)" 1 font-lock-comment-face)
1867 (" \\(\\$ .*\\)$" 1 font-lock-comment-face)
1868 ("^\\(\\$ .*\\)$" 1 font-lock-comment-face)
1869 ("\\([*].*\\)" 1 font-lock-comment-face)
1870 ("^\\([+]\\)" 1 font-lock-string-face)
1871 ("^\\s-*\\([.]\\w+\\>\\)" 1 font-lock-keyword-face)
1872 ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face)
1873 ("\\('[^']+'\\)" 1 font-lock-string-face)
1874 ("\\(\"[^\"]+\"\\)" 1 font-lock-string-face))
1875 '("\\.[sS][pP]\\'"
1876 "\\.[sS][pP][iI]\\'"
1877 "\\.[sS][pP][iI][cC][eE]\\'"
1878 "\\.[iI][nN][cC]\\'")
ffe0c7ef
PB
1879 (list
1880 'generic-bracket-support
1881 ;; Make keywords case-insensitive
1882 (function
1883 (lambda()
16a013c2 1884 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
d4fb185d 1885 "Generic mode for SPICE circuit netlist files."))
1fffafda
LK
1886
1887(when (memq 'ibis-generic-mode generic-extras-enable-list)
ffe0c7ef 1888
d8677156 1889(define-generic-mode ibis-generic-mode
82e38f3e 1890 '(?|)
ffe0c7ef 1891 nil
82e38f3e
LK
1892 '(("[[]\\([^]]*\\)[]]" 1 font-lock-keyword-face)
1893 ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face))
1894 '("\\.[iI][bB][sS]\\'")
1895 '(generic-bracket-support)
d4fb185d 1896 "Generic mode for IBIS circuit netlist files."))
1fffafda
LK
1897
1898(when (memq 'astap-generic-mode generic-extras-enable-list)
ffe0c7ef 1899
d8677156 1900(define-generic-mode astap-generic-mode
ffe0c7ef 1901 nil
82e38f3e
LK
1902 '("analyze"
1903 "description"
1904 "elements"
1905 "execution"
1906 "features"
1907 "functions"
1908 "ground"
1909 "model"
1910 "outputs"
1911 "print"
1912 "run"
1913 "controls"
1914 "table")
1915 '(("^\\s-*\\([*].*\\)" 1 font-lock-comment-face)
1916 (";\\s-*\\([*].*\\)" 1 font-lock-comment-face)
1917 ("^\\s-*\\([.]\\w+\\>\\)" 1 font-lock-keyword-face)
1918 ("\\('[^']+'\\)" 1 font-lock-string-face)
1919 ("\\(\"[^\"]+\"\\)" 1 font-lock-string-face)
1920 ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face))
1921 '("\\.[aA][pP]\\'"
1922 "\\.[aA][sS][xX]\\'"
1923 "\\.[aA][sS][tT][aA][pP]\\'"
1924 "\\.[pP][sS][pP]\\'"
1925 "\\.[dD][eE][cC][kK]\\'"
1926 "\\.[gG][oO][dD][aA][tT][aA]")
ffe0c7ef
PB
1927 (list
1928 'generic-bracket-support
1929 ;; Make keywords case-insensitive
1930 (function
1931 (lambda()
16a013c2 1932 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
d4fb185d 1933 "Generic mode for ASTAP circuit netlist files."))
1fffafda
LK
1934
1935(when (memq 'etc-modules-conf-generic-mode generic-extras-enable-list)
ffe0c7ef 1936
d8677156
LK
1937(define-generic-mode etc-modules-conf-generic-mode
1938 ;; List of comment characters
82e38f3e 1939 '(?#)
d8677156 1940 ;; List of keywords
82e38f3e
LK
1941 '("above"
1942 "alias"
1943 "below"
1944 "define"
1945 "depfile"
1946 "else"
1947 "elseif"
1948 "endif"
1949 "if"
1950 "include"
1951 "insmod_opt"
1952 "install"
1953 "keep"
1954 "options"
1955 "path"
1956 "generic_stringfile"
1957 "pcimapfile"
1958 "isapnpmapfile"
1959 "usbmapfile"
1960 "parportmapfile"
1961 "ieee1394mapfile"
1962 "pnpbiosmapfile"
1963 "probe"
1964 "probeall"
1965 "prune"
1966 "post-install"
1967 "post-remove"
1968 "pre-install"
1969 "pre-remove"
1970 "remove"
1971 "persistdir")
d8677156 1972 ;; List of additional font-lock-expressions
9845e669 1973 nil
d8677156 1974 ;; List of additional automode-alist expressions
82e38f3e 1975 '("/etc/modules.conf" "/etc/conf.modules")
d8677156 1976 ;; List of set up functions to call
d4fb185d 1977 nil))
ffe0c7ef 1978
ca1e63a5
RS
1979(provide 'generic-x)
1980
ab5796a9 1981;;; arch-tag: cde692a5-9ff6-4506-9999-c67999c2bdb5
ca1e63a5 1982;;; generic-x.el ends here