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