Initial revision
[bpt/emacs.git] / lisp / generic-x.el
CommitLineData
ca1e63a5
RS
1;;; generic-x.el --- Extra Modes for generic-mode
2
3;; Copyright (C) 1997, 1998 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;; From Anders Lindgren <andersl@csd.uu.se>
47;;
48;; Problem summary: Wayne Adams has found a problem when using folding
49;; mode in conjuction with font-lock for a mode defined in
50;; `generic-x.el'.
51;;
52;; The problem, as Wayne described it, was that error messages of the
53;; following form appeared when both font-lock and folding are used:
54;;
55;; > - various msgs including "Fontifying region...(error Stack
56;; > overflow in regexp matcher)" appear
57;;
58;; I have just tracked down the cause of the problem. The regexp:s in
59;; `generic-x.el' does not take into account the way that folding
60;; hides sections of the buffer. The technique is known as
61;; `selective-display' and has been available for a very long time (I
62;; started using it back in the good old' Emacs 18 days). Basically, a
63;; section is hidden by creating one very long line were the newline
64;; character (C-j) is replaced by a linefeed (C-m) character.
65;;
66;; Many other hiding packages, besides folding, use the same technique,
67;; the problem should occur when using them as well.
68;;
69;; The erroronous lines in `generic-extras' look like the following (this
70;; example is from the `ini' section):
71;;
72;; '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face)
73;; ("^\\(.*\\)=" 1 'font-lock-variable-name-face)
74;;
75;; The intention of these lines is to highlight lines of the following
76;; form:
77;;
78;; [foo]
79;; bar = xxx
80;;
81;; However, since the `.' regexp symbol match the linefeed character the
82;; entire folded section is searched, resulting in a regexp stack
83;; overflow.
84;;
85;; Solution suggestion 2: Instead of using ".", use the sequence
86;; "[^\n\r]". This will make the rules behave just as before, but they
87;; will work together with selective-display.
88
89;;; Code:
90
91(require 'generic)
92(require 'font-lock)
93
94(defcustom generic-extras-enable-list nil
95 "*List of generic modes to enable by default.
96Each entry in the list should be a symbol.
97The variables `generic-define-mswindows-modes' and `generic-define-unix-modes'
98also affect which generic modes are defined.
99Please note that if you set this variable after generic-x is loaded,
100you must reload generic-x to enable the specified modes."
101 :group 'generic-x
102 :type '(repeat sexp)
103 )
104
105(defcustom generic-define-mswindows-modes
106 (memq system-type (list 'windows-nt 'ms-dos))
107 "*If non-nil, some MS-Windows specific generic modes will be defined."
108 :group 'generic-x
109 :type 'boolean
110 )
111
112(defcustom generic-define-unix-modes
113 (not (memq system-type (list 'windows-nt 'ms-dos)))
114 "*If non-nil, some Unix specific generic modes will be defined."
115 :group 'generic-x
116 :type 'boolean
117 )
118
119(and generic-define-mswindows-modes
120 (setq generic-extras-enable-list
121 (append (list 'bat-generic-mode 'ini-generic-mode
122 'inf-generic-mode 'rc-generic-mode
123 'reg-generic-mode 'rul-generic-mode)
124 generic-extras-enable-list)))
125
126(and generic-define-unix-modes
127 (setq generic-extras-enable-list
128 (append (list 'apache-generic-mode 'samba-generic-mode
129 'hosts-generic-mode 'fvwm-generic-mode
130 'x-resource-generic-mode
131 )
132 generic-extras-enable-list)))
133
134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
135;; Generic-modes
136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
137
138;;; Apache
139(and
140 (memq 'apache-generic-mode generic-extras-enable-list)
141
142(define-generic-mode 'apache-generic-mode
143 (list ?#)
144 nil
145 '(("^\\(<.*>\\)" 1 'font-lock-reference-face)
146 ("^\\(\\sw+\\)\\s-" 1 'font-lock-variable-name-face))
147 (list "srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
148 nil
149 "Generic mode for Apache or HTTPD configuration files."))
150
151;;; Samba
152(and
153 (memq 'samba-generic-mode generic-extras-enable-list)
154
155(define-generic-mode 'samba-generic-mode
156 (list ?\;)
157 nil
158 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face))
159 (list "smb\\.conf\\'")
160 (list 'generic-bracket-support)
161 "Generic mode for Samba configuration files."))
162
163;;; Fvwm
164;; This is pretty basic. Also, modes for other window managers could
165;; be defined as well.
166(and
167(memq 'fvwm-generic-mode generic-extras-enable-list)
168
169(define-generic-mode 'fvwm-generic-mode
170 (list ?#)
171 (list
172 "AddToMenu"
173 "AddToFunc"
174 "ButtonStyle"
175 "EndFunction"
176 "EndPopup"
177 "Function"
178 "IconPath"
179 "Key"
180 "ModulePath"
181 "Mouse"
182 "PixmapPath"
183 "Popup"
184 "Style"
185 )
186 nil
187 (list "\\.fvwmrc\\'" "\\.fvwm2rc\\'")
188 nil
189 "Generic mode for FVWM configuration files."))
190
191;;; X Resource
192;; I'm pretty sure I've seen an actual mode to do this, but I don't
193;; think it's standard with Emacs
194(and
195 (memq 'x-resource-generic-mode generic-extras-enable-list)
196
197(define-generic-mode 'x-resource-generic-mode
198 (list ?!)
199 nil
200 '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face))
201 (list "\\.Xdefaults\\'" "\\.Xresources\\'")
202 nil
203 "Generic mode for X Resource configuration files."))
204
205;;; Hosts
206(and
207 (memq 'hosts-generic-mode generic-extras-enable-list)
208
209(define-generic-mode 'hosts-generic-mode
210 (list ?#)
211 (list "localhost")
212 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-reference-face))
213 (list "[hH][oO][sS][tT][sS]\\'")
214 nil
215 "Generic mode for HOSTS files."))
216
217;;; Windows INF files
218(and
219 (memq 'inf-generic-mode generic-extras-enable-list)
220
221(define-generic-mode 'inf-generic-mode
222 (list ?\;)
223 nil
224 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face))
225 (list "\\.[iI][nN][fF]\\'")
226 (list 'generic-bracket-support)
227 "Generic mode for MS-Windows INF files."))
228
229;;; Windows INI files
230;; Should define escape character as well!
231(and
232 (memq 'ini-generic-mode generic-extras-enable-list)
233
234(define-generic-mode 'ini-generic-mode
235 (list ?\;)
236 nil
237 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face)
238 ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$"
239 (1 font-lock-function-name-face)
240 (2 font-lock-variable-name-face)))
241 (list "\\.[iI][nN][iI]\\'")
242 (list
243 (function
244 (lambda ()
245 (setq imenu-generic-expression
246 '((nil "^\\[\\(.*\\)\\]" 1)
247 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))
248 )))
249 "Generic mode for MS-Windows INI files."))
250
251;;; Windows REG files
252;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
253(and
254 (memq 'reg-generic-mode generic-extras-enable-list)
255
256(define-generic-mode 'reg-generic-mode
257 '(?\;)
258 '("key" "classes_root" "REGEDIT" "REGEDIT4")
259 '(("\\(\\[.*]\\)" 1 'font-lock-reference-face)
260 ("^\\([^\n\r]*\\)\\s-*=" 1 'font-lock-variable-name-face))
261 '("\\.[rR][eE][gG]\\'")
262 (list
263 (function
264 (lambda ()
265 (setq imenu-generic-expression
266 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
267 "Generic mode for MS-Windows Registry files."))
268
269;;; Windows BAT files
270(if (not (memq 'bat-generic-mode generic-extras-enable-list))
271 nil
272(define-generic-mode 'bat-generic-mode
273 nil
274 nil
275 (list
276 ;; Make this one first in the list, otherwise comments will
277 ;; be over-written by other variables
278 (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t)
279 (list "^[ \t]*\\(::-.*\\)" 1 'font-lock-comment-face t)
280 ;; These keywords appear as the first word on a line
281 (generic-make-keywords-list
282 (list
283 "[cC][aA][lL][lL]"
284 "[eE][cC][hH][oO]"
285 "[fF][oO][rR]"
286 "[iI][fF]"
287 "[pP][aA][tT][hH]"
288 "[pP][aA][uU][sS][eE]"
289 "[pP][rR][oO][mM][pP][tT]"
290 "[sS][eE][tT]"
291 "[sS][tT][aA][rR][tT]"
292 )
293 'font-lock-keyword-face "^[@ \t]*")
294 ;; These keywords can be anywhere on a line
295 (generic-make-keywords-list
296 (list
297 "[eE][xX][iI][sS][tT]"
298 "[eE][rR][rR][oO][rR][lL][eE][vV][eE][lL]"
299 "[gG][oO][tT][oO]"
300 "[nN][oO][tT]"
301 ) 'font-lock-keyword-face)
302 (list "^[ \t]*\\(:\\sw+\\)" 1 'font-lock-function-name-face t)
303 (list "\\(%\\sw+%\\)" 1 'font-lock-reference-face)
304 (list "\\(%[0-9]\\)" 1 'font-lock-reference-face)
305 (list "\\(/[^/ \"\t\n]+\\)" 1 'font-lock-type-face)
306 (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face)
307 (list "\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
308 '(1 font-lock-keyword-face)
309 '(2 font-lock-function-name-face nil t))
310
311 )
312 (list "\\.[bB][aA][tT]\\'" "CONFIG\\." "AUTOEXEC\\." )
313 (list 'generic-bat-mode-setup-function)
314 "Generic mode for MS-Windows BAT files.")
315
316 (defvar bat-generic-mode-syntax-table nil
317 "Syntax table in use in bat-generic-mode buffers.")
318
319 ;; Make underscores count as words
320 (if bat-generic-mode-syntax-table
321 nil
322 (setq bat-generic-mode-syntax-table (make-syntax-table))
323 (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table))
324
325 ;; bat-generic-mode doesn't use the comment functionality of generic-mode
326 ;; because it has a three-letter comment-string, so we do it
327 ;; here manually instead
328 (defun generic-bat-mode-setup-function ()
329 (make-local-variable 'parse-sexp-ignore-comments)
330 (make-local-variable 'comment-start)
331 (make-local-variable 'comment-start-skip)
332 (make-local-variable 'comment-end)
333 (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1))
334 parse-sexp-ignore-comments t
335 comment-end ""
336 comment-start "[Rr][Ee][Mm] "
337 comment-start-skip "[Rr][Ee][Mm] *"
338 )
339 (set-syntax-table bat-generic-mode-syntax-table)
340 )
341 )
342
343;;; Mailagent
344;; Mailagent is a Unix mail filtering program. Anyone wanna do a generic mode
345;; for procmail?
346(and
347 (memq 'mailagent-rules-generic-mode generic-extras-enable-list)
348
349(define-generic-mode 'mailagent-rules-generic-mode
350 (list ?#)
351 (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
352 '(("^\\(\\sw+\\)\\s-*=" 1 'font-lock-variable-name-face)
353 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-reference-face))
354 (list "\\.rules\\'")
355 (list 'mailagent-rules-setup-function)
356 "Mode for Mailagent rules files.")
357
358(defun mailagent-rules-setup-function ()
359 (make-local-variable 'imenu-generic-expression)
360 (setq imenu-generic-expression
361 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))
362 )
363
364;; Solaris/Sys V prototype files
365(and
366 (memq 'prototype-generic-mode generic-extras-enable-list)
367
368(define-generic-mode 'prototype-generic-mode
369 (list ?#)
370 nil
371 '(
372 ("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
373 (2 font-lock-reference-face)
374 (3 font-lock-keyword-face))
375 ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
376 (1 font-lock-reference-face)
377 (2 font-lock-keyword-face)
378 (3 font-lock-variable-name-face))
379 ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$"
380 (1 font-lock-keyword-face)
381 (3 font-lock-variable-name-face))
382 ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
383 (1 font-lock-keyword-face)
384 (2 font-lock-variable-name-face))
385 )
386 (list "prototype\\'")
387 nil
388 "Mode for Sys V prototype files."))
389
390;; Solaris/Sys V pkginfo files
391(and
392 (memq 'pkginfo-generic-mode generic-extras-enable-list)
393
394(define-generic-mode 'pkginfo-generic-mode
395 (list ?#)
396 nil
397 '(
398 ("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
399 (1 font-lock-keyword-face)
400 (2 font-lock-variable-name-face))
401 )
402 (list "pkginfo\\'")
403 nil
404 "Mode for Sys V pkginfo files."))
405
406;; Javascript mode
407(define-generic-mode 'javascript-generic-mode
408 (list "//")
409 (list
410 "document"
411 "else"
412 "function"
413 "function"
414 "if"
415 "then"
416 "var"
417 )
418 (list
419 (list "^\\s-*function\\s-+\\([A-Za-z0-9]+\\)"
420 '(1 font-lock-function-name-face))
421 (list "^\\s-*var\\s-+\\([A-Za-z0-9]+\\)"
422 '(1 font-lock-variable-name-face))
423 )
424 (list "\\.js\\'")
425 (list
426 (function
427 (lambda ()
428 (setq imenu-generic-expression
429 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)))
430 )))
431 "Mode for JavaScript files.")
432
433;; VRML files
434(define-generic-mode 'vrml-generic-mode
435 (list ?#)
436 (list
437 "DEF"
438 "NULL"
439 "USE"
440 "Viewpoint"
441 "ambientIntensity"
442 "appearance"
443 "children"
444 "color"
445 "coord"
446 "coordIndex"
447 "creaseAngle"
448 "diffuseColor"
449 "emissiveColor"
450 "fieldOfView"
451 "geometry"
452 "info"
453 "material"
454 "normal"
455 "orientation"
456 "position"
457 "shininess"
458 "specularColor"
459 "texCoord"
460 "texture"
461 "textureTransform"
462 "title"
463 "transparency"
464 "type"
465 )
466 (list
467 (list "USE\\s-+\\([-A-Za-z0-9_]+\\)"
468 '(1 font-lock-reference-face))
469 (list "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
470 '(1 font-lock-type-face)
471 '(2 font-lock-reference-face))
472 (list "^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
473 '(1 font-lock-function-name-face))
474 (list
475 "^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
476 '(2 font-lock-variable-name-face))
477 )
478 (list "\\.wrl\\'")
479 (list
480 (function
481 (lambda ()
482 (setq imenu-generic-expression
483 '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1)
484 ("*Definitions*"
485 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
486 1)))
487 )))
488 "Generic Mode for VRML files.")
489
490;; Java Manifests
491(define-generic-mode 'java-manifest-generic-mode
492 (list ?#)
493 (list
494 "Name"
495 "Digest-Algorithms"
496 "Manifest-Version"
497 "Required-Version"
498 "Signature-Version"
499 "Magic"
500 "Java-Bean"
501 "Depends-On"
502 )
503 '(("^Name:\\s-+\\([^\n\r]*\\)$"
504 (1 font-lock-variable-name-face))
505 ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
506 (2 font-lock-reference-face))
507 )
508 (list "manifest\\.mf\\'")
509 nil
510 "Mode for Java Manifest files")
511
512;; Java properties files
513(define-generic-mode 'java-properties-generic-mode
514 (list ?#)
515 nil
516 ;; Property and value can be separated with whitespace or an equal sign
517 '(("^\\([A-Za-z0-9_]+\\)\\(\\s-+\\|\\s-*=\\s-*\\)\\([^\r\n]*\\)\\'"
518 (1 font-lock-reference-face) (3 font-lock-variable-name-face)))
519 nil
520 nil
521 "Mode for Java properties files.")
522
523;; C shell alias definitions
524(define-generic-mode 'alias-generic-mode
525 (list ?#)
526 (list "alias" "unalias")
527 '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+"
528 (1 font-lock-variable-name-face))
529 ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$"
530 (1 font-lock-variable-name-face))
531 )
532 (list "alias\\'")
533 (list
534 (function
535 (lambda ()
536 (setq imenu-generic-expression
537 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))
538 )))
539 "Mode for C Shell alias files.")
540
541;;; Windows RC files
542;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
543(and
544 (memq 'rc-generic-mode generic-extras-enable-list)
545
546(define-generic-mode 'rc-generic-mode
547;; (list ?\/)
548 (list "//")
549 '("ACCELERATORS"
550 "AUTO3STATE"
551 "AUTOCHECKBOX"
552 "AUTORADIOBUTTON"
553 "BITMAP"
554 "BOTTOMMARGIN"
555 "BUTTON"
556 "CAPTION"
557 "CHARACTERISTICS"
558 "CHECKBOX"
559 "CLASS"
560 "COMBOBOX"
561 "CONTROL"
562 "CTEXT"
563 "CURSOR"
564 "DEFPUSHBUTTON"
565 "DESIGNINFO"
566 "DIALOG"
567 "DISCARDABLE"
568 "EDITTEXT"
569 "EXSTYLE"
570 "FONT"
571 "GROUPBOX"
572 "GUIDELINES"
573 "ICON"
574 "LANGUAGE"
575 "LEFTMARGIN"
576 "LISTBOX"
577 "LTEXT"
578 "MENUITEM SEPARATOR"
579 "MENUITEM"
580 "MENU"
581 "MOVEABLE"
582 "POPUP"
583 "PRELOAD"
584 "PURE"
585 "PUSHBOX"
586 "PUSHBUTTON"
587 "RADIOBUTTON"
588 "RCDATA"
589 "RIGHTMARGIN"
590 "RTEXT"
591 "SCROLLBAR"
592 "SEPARATOR"
593 "STATE3"
594 "STRINGTABLE"
595 "STYLE"
596 "TEXTINCLUDE"
597 "TOOLBAR"
598 "TOPMARGIN"
599 "VERSIONINFO"
600 "VERSION"
601 )
602 ;; the choice of what tokens go where is somewhat arbitrary,
603 ;; as is the choice of which value tokens are included, as
604 ;; the choice of face for each token group
605 (list
606 (generic-make-keywords-list
607 (list
608 "FILEFLAGSMASK"
609 "FILEFLAGS"
610 "FILEOS"
611 "FILESUBTYPE"
612 "FILETYPE"
613 "FILEVERSION"
614 "PRODUCTVERSION"
615 ) 'font-lock-type-face)
616 (generic-make-keywords-list
617 (list
618 "BEGIN"
619 "BLOCK"
620 "END"
621 "VALUE"
622 ) 'font-lock-function-name-face)
623 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
624 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face)
625 '("^#[ \t]*\\(elif\\|if\\)\\>"
626 ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
627 (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t)))
628 '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
629 (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t)))
630 (list "\\.[rR][cC]$")
631 nil
632 "Generic mode for MS-Windows Resource files."))
633
634;;; InstallShield RUL files
635;; Contributed by Alfred.Correira@Pervasive.Com
636(and
637(memq 'rul-generic-mode generic-extras-enable-list)
638
639(define-generic-mode 'rul-generic-mode
640 ;; Using "/*" and "*/" doesn't seem to be working right
641 (list "//")
642 '("abort"
643 "begin"
644 "call"
645 "case"
646 "declare"
647 "default"
648 "downto"
649 "elseif"
650 "else"
651 "endfor"
652 "endif"
653 "endswitch"
654 "endwhile"
655 "end"
656 "exit"
657 "external"
658 "for"
659 "function"
660 ;; "goto" -- handled elsewhere
661 "if"
662 "program"
663 "prototype"
664 "repeat"
665 "return"
666 "step"
667 "switch"
668 "then"
669 "to"
670 "typedef"
671 "until"
672 "void"
673 "while")
674 (list
675 ;; preprocessor constructs
676 '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
677 1 font-lock-string-face)
678 '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
679 (1 font-lock-reference-face)
680 (2 font-lock-variable-name-face nil t))
681 ;; indirect string constants
682 '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-emphasized-face)
683 ;; gotos
684 '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face)
685 '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
686 (1 font-lock-keyword-face)
687 (2 font-lock-reference-face nil t))
688 ;; system variables
689 (generic-make-keywords-list
690 (list
691 "CMDLINE"
692 "ERRORFILENAME"
693 "INFOFILENAME"
694 "ISRES"
695 "ISUSER"
696 "ISVERSION"
697 "SRCDIR"
698 "SRCDISK"
699 "SUPPORTDIR"
700 "TARGETDIR"
701 "TARGETDISK"
702 "WINDIR"
703 "WINDISK"
704 "WINMAJOR"
705 "WINSYSDIR"
706 "WINSYSDISK"
707 )
708 'font-lock-variable-name-face)
709 ;; system functions
710 (generic-make-keywords-list
711 (list
712 "AddFolderIcon"
713 "AddProfString"
714 "AddressString"
715 "AppCommand"
716 "AskDestPath"
717 "AskOptions"
718 "AskPath"
719 "AskText"
720 "AskYesNo"
721 "BatchDeleteEx"
722 "BatchFileLoad"
723 "BatchFileSave"
724 "BatchFind"
725 "BatchGetFileName"
726 "BatchMoveEx"
727 "BatchSetFileName"
728 "CloseFile"
729 "CmdGetHwndDlg"
730 "ComponentAddItem" ; differs between IS3 and IS5
731 "ComponentCompareSizeRequired" ; IS5 only
732 "ComponentDialog"
733 "ComponentError" ; IS5 only
734 "ComponentFileEnum" ; IS5 only
735 "ComponentFileInfo" ; IS5 only
736 "ComponentFilterLanguage" ; IS5 only
737 "ComponentFilterOS" ; IS5 only
738 "ComponentGetData" ; IS5 only
739 "ComponentGetItemInfo" ; IS3 only
740 "ComponentGetItemSize" ; differs between IS3 and IS5
741 "ComponentIsItemSelected" ; differs between IS3 and IS5
742 "ComponentListItems"
743 "ComponentMoveData" ; IS5 only
744 "ComponentSelectItem" ; differs between IS3 and IS5
745 "ComponentSetData" ; IS5 only
746 "ComponentSetItemInfo" ; IS3 only
747 "ComponentSetTarget" ; IS5 only
748 "ComponentSetupTypeEnum" ; IS5 only
749 "ComponentSetupTypeGetData" ; IS5 only
750 "ComponentSetupTypeSet" ; IS5 only
751 "ComponentTotalSize"
752 "ComponentValidate" ; IS5 only
753 "CompressAdd" ; IS3 only
754 "CompressDel" ; IS3 only
755 "CompressEnum" ; IS3 only
756 "CompressGet" ; IS3 only
757 "CompressInfo" ; IS3 only
758 "CopyFile"
759 "CreateDir"
760 "CreateFile"
761 "CreateProgramFolder"
762 "DeinstallSetReference" ; IS5 only
763 "DeinstallStart"
764 "Delay"
765 "DeleteDir"
766 "DeleteFile"
767 "DialogSetInfo"
768 "Disable"
769 "DoInstall"
770 "Do"
771 "Enable"
772 "EnterDisk"
773 "ExistsDir"
774 "ExistsDisk"
775 "ExitProgMan"
776 "EzBatchAddPath"
777 "EzBatchAddString"
778 "EzBatchReplace"
779 "EzConfigAddDriver"
780 "EzConfigAddString"
781 "EzConfigGetValue"
782 "EzConfigSetValue"
783 "EzDefineDialog"
784 "FileCompare"
785 "FileDeleteLine"
786 "FileGrep"
787 "FileInsertLine"
788 "FileSetBeginDefine" ; IS3 only
789 "FileSetEndDefine" ; IS3 only
790 "FileSetPerformEz" ; IS3 only
791 "FileSetPerform" ; IS3 only
792 "FileSetReset" ; IS3 only
793 "FileSetRoot" ; IS3 only
794 "FindAllDirs"
795 "FindAllFiles"
796 "FindFile"
797 "FindWindow"
798 "GetDiskSpace"
799 "GetDisk"
800 "GetEnvVar"
801 "GetExtents"
802 "GetFileInfo"
803 "GetLine"
804 "GetProfString"
805 "GetSystemInfo"
806 "GetValidDrivesList"
807 "GetVersion"
808 "GetWindowHandle"
809 "InstallationInfo"
810 "Is"
811 "LaunchApp"
812 "ListCreate"
813 "ListDestroy"
814 "ListGetFirstString"
815 "ListGetNextString"
816 "ListSetIndex"
817 "LongPathToQuote"
818 "LongPathToShortPath"
819 "MessageBox"
820 "NumToStr"
821 "OpenFileMode"
822 "OpenFile"
823 "ParsePath"
824 "PathAdd"
825 "PathDelete"
826 "PathFind"
827 "PathGet"
828 "PathMove"
829 "PathSet"
830 "Path"
831 "PlaceBitmap"
832 "PlaceWindow"
833 "PlayMMedia" ; IS5 only
834 "ProgDefGroupType"
835 "RegDBCreateKeyEx"
836 "RegDBGetItem"
837 "RegDBKeyExist"
838 "RegDBSetItem"
839 "RegDBGetKeyValueEx"
840 "RegDBSetKeyValueEx"
841 "RegDBSetDefaultRoot"
842 "RenameFile"
843 "ReplaceFolderIcon"
844 "ReplaceProfString"
845 "SdAskDestPath"
846 "SdAskOptions"
847 "SdAskOptionsList"
848 "SdBitmap"
849 "SdCloseDlg"
850 "SdComponentAdvCheckSpace"
851 "SdComponentAdvInit"
852 "SdComponentAdvUpdateSpace"
853 "SdComponentDialog"
854 "SdComponentDialog2"
855 "SdComponentDialogAdv"
856 "SdComponentDialogEx"
857 "SdComponentDlgCheckSpace"
858 "SdComponentMult"
859 "SdConfirmNewDir"
860 "SdConfirmRegistration"
861 "SdDiskSpace"
862 "SdDisplayTopics"
863 "SdDoStdButton"
864 "SdEnablement"
865 "SdError"
866 "SdFinish"
867 "SdFinishInit32"
868 "SdFinishReboot"
869 "SdGeneralInit"
870 "SdGetItemName"
871 "SdGetTextExtent"
872 "SdGetUserCompanyInfo"
873 "SdInit"
874 "SdIsShellExplorer"
875 "SdIsStdButton"
876 "SdLicense"
877 "SdMakeName"
878 "SdOptionInit"
879 "SdOptionSetState"
880 "SdOptionsButtons"
881 "SdOptionsButtonsInit"
882 "SdPlugInProductName"
883 "SdProductName"
884 "SdRegEnableButton"
885 "SdRegExEnableButton"
886 "SdRegisterUser"
887 "SdRegisterUserEx"
888 "SdRemoveEndSpace"
889 "SdSelectFolder"
890 "SdSetSequentialItems"
891 "SdSetStatic"
892 "SdSetupTypeEx" ; IS5 only
893 "SdSetupType"
894 "SdShowAnyDialog"
895 "SdShowDlgEdit1"
896 "SdShowDlgEdit2"
897 "SdShowDlgEdit3"
898 "SdShowFileMods"
899 "SdShowInfoList"
900 "SdShowMsg"
901 "SdStartCopy"
902 "SdUnInit"
903 "SdUpdateComponentSelection"
904 "SdWelcome"
905 "SendMessage"
906 "SetColor"
907 "SetFont"
908 "SetDialogTitle"
909 "SetDisplayEffect" ; IS5 only
910 "SetFileInfo"
911 "SetForegroundWindow"
912 "SetStatusWindow"
913 "SetTitle"
914 "SetupType"
915 "ShowProgramFolder"
916 "Split" ; IS3 only
917 "SprintfBox"
918 "Sprintf"
919 "StatusUpdate"
920 "StrCompare"
921 "StrFind"
922 "StrGetTokens"
923 "StrLength"
924 "StrRemoveLastSlash"
925 "StrToLower"
926 "StrToUpper"
927 "StrSub"
928 "VarRestore"
929 "VarSave"
930 "VerCompare"
931 "VerGetFileVersion"
932 "WaitOnDialog"
933 "Welcome"
934 "WriteLine"
935 "WriteProfString"
936 "XCopyFile"
937 )
938 'font-lock-function-name-face)
939 ;; type keywords
940 (generic-make-keywords-list
941 (list
942 "BOOL"
943 "BYREF"
944 "CHAR"
945 "HIWORD"
946 "HWND"
947 "INT"
948 "LIST"
949 "LONG"
950 "LOWORD"
951 "NUMBER"
952 "POINTER"
953 "QUAD"
954 "RGB"
955 "SHORT"
956 "STRINGLIST"
957 "STRING"
958 )
959 'font-lock-type-face)
960 ;;; system variables
961 (generic-make-keywords-list
962 (list
963 "CMDLINE"
964 "CORECOMPONENTHANDLING"
965 "ERRORFILENAME"
966 "INFOFILENAME"
967 "ISRES"
968 "ISUSER"
969 "ISVERSION"
970 "MODE"
971 "SRCDIR"
972 "SRCDISK"
973 "SUPPORTDIR"
974 "TARGETDIR"
975 "TARGETDISK"
976 "WINDIR"
977 "WINDISK"
978 "WINSYSDIR"
979 "WINSYSDISK"
980 )
981 ;; pre-defined constants (not exhaustive -- just my favorites)
982 'font-lock-variable-name-face)
983
984 (generic-make-keywords-list
985 (list
986 "AFTER"
987 "APPEND"
988 "ALLCONTENTS"
989 "BACKBUTTON"
990 "BACKGROUNDCAPTION"
991 "BACKGROUND"
992 "BACK"
993 "BASEMEMORY"
994 "BEFORE"
995 "BIOS"
996 "BITMAPICON"
997 "BK_BLUE"
998 "BK_GREEN"
999 "BK_RED"
1000 "BLUE"
1001 "BOOTUPDRIVE"
1002 "CANCEL"
1003 "CDROM_DRIVE"
1004 "CDROM"
1005 "CHECKBOX95"
1006 "CHECKBOX"
1007 "CHECKLINE"
1008 "CHECKMARK"
1009 "COLORS"
1010 "COMMANDEX"
1011 "COMMAND"
1012 "COMP_NORMAL"
1013 "COMP_UPDATE_DATE"
1014 "COMP_UPDATE_SAME"
1015 "COMP_UPDATE_VERSION"
1016 "COMPACT"
1017 "CONTINUE"
1018 "CPU"
1019 "CUSTOM"
1020 "DATE"
1021 "DEFWINDOWMODE"
1022 "DIR_WRITEABLE"
1023 "DISABLE"
1024 "DISK_TOTALSPACE"
1025 "DISK"
1026 "DLG_OPTIONS"
1027 "DLG_PATH"
1028 "DLG_TEXT"
1029 "DLG_ASK_YESNO"
1030 "DLG_ENTER_DISK"
1031 "DLG_ERR"
1032 "DLG_INFO_ALTIMAGE"
1033 "DLG_INFO_CHECKSELECTION"
1034 "DLG_INFO_KUNITS"
1035 "DLG_INFO_USEDECIMAL"
1036 "DLG_MSG_INFORMATION"
1037 "DLG_MSG_SEVERE"
1038 "DLG_MSG_WARNING"
1039 "DLG_STATUS"
1040 "DLG_WARNING"
1041 "DLG_USER_CAPTION"
1042 "DRIVE"
1043 "ENABLE"
1044 "END_OF_FILE"
1045 "END_OF_LIST"
1046 "ENVSPACE"
1047 "EQUALS"
1048 "EXCLUDE_SUBDIR"
1049 "EXCLUSIVE"
1050 "EXISTS"
1051 "EXIT"
1052 "EXTENDED_MEMORY"
1053 "EXTENSION_ONLY"
1054 "FAILIFEXISTS"
1055 "FALSE"
1056 "FEEDBACK_FULL"
1057 "FILE_ATTR_ARCHIVED"
1058 "FILE_ATTR_DIRECTORY"
1059 "FILE_ATTR_HIDDEN"
1060 "FILE_ATTR_NORMAL"
1061 "FILE_ATTR_READONLY"
1062 "FILE_ATTR_SYSTEM"
1063 "FILE_ATTRIBUTE"
1064 "FILE_DATE"
1065 "FILE_LINE_LENGTH"
1066 "FILE_MODE_APPEND"
1067 "FILE_MODE_BINARYREADONLY"
1068 "FILE_MODE_BINARY"
1069 "FILE_MODE_NORMAL"
1070 "FILE_NO_VERSION"
1071 "FILE_NOT_FOUND"
1072 "FILE_SIZE"
1073 "FILE_TIME"
1074 "FILENAME_ONLY"
1075 "FILENAME"
1076 "FIXED_DRIVE"
1077 "FOLDER_DESKTOP"
1078 "FOLDER_STARTMENU"
1079 "FOLDER_STARTUP"
1080 "FREEENVSPACE"
1081 "FULLWINDOWMODE"
1082 "FULL"
1083 "FONT_TITLE"
1084 "GREATER_THAN"
1085 "GREEN"
1086 "HOURGLASS"
1087 "INCLUDE_SUBDIR"
1088 "INDVFILESTATUS"
1089 "INFORMATION"
1090 "IS_WINDOWSNT"
1091 "IS_WINDOWS95"
1092 "IS_WINDOWS"
1093 "IS_WIN32S"
1094 "ISTYPE"
1095 "LANGUAGE_DRV"
1096 "LANGUAGE"
1097 "LESS_THAN"
1098 "LIST_NULL"
1099 "LISTFIRST"
1100 "LISTNEXT"
1101 "LOCKEDFILE"
1102 "LOGGING"
1103 "LOWER_LEFT"
1104 "LOWER_RIGHT"
1105 "MAGENTA"
1106 "MOUSE_DRV"
1107 "MOUSE"
1108 "NETWORK_DRV"
1109 "NETWORK"
1110 "NEXT"
1111 "NONEXCLUSIVE"
1112 "NORMALMODE"
1113 "NOSET"
1114 "NOTEXISTS"
1115 "NOWAIT"
1116 "NO"
1117 "OFF"
1118 "ONLYDIR"
1119 "ON"
1120 "OSMAJOR"
1121 "OSMINOR"
1122 "OS"
1123 "OTHER_FAILURE"
1124 "PARALLEL"
1125 "PARTIAL"
1126 "PATH_EXISTS"
1127 "PATH"
1128 "RED"
1129 "REGDB_APPPATH_DEFAULT"
1130 "REGDB_APPPATH"
1131 "REGDB_BINARY"
1132 "REGDB_ERR_CONNECTIONEXISTS"
1133 "REGDB_ERR_CORRUPTEDREGSITRY"
1134 "REGDB_ERR_INITIALIZATION"
1135 "REGDB_ERR_INVALIDHANDLE"
1136 "REGDB_ERR_INVALIDNAME"
1137 "REGDB_NUMBER"
1138 "REGDB_STRING_EXPAND"
1139 "REGDB_STRING_MULTI"
1140 "REGDB_STRING"
1141 "REGDB_UNINSTALL_NAME"
1142 "REMOTE_DRIVE"
1143 "REMOVALE_DRIVE"
1144 "REPLACE_ITEM"
1145 "REPLACE"
1146 "RESET"
1147 "RESTART"
1148 "ROOT"
1149 "SELFREGISTER"
1150 "SERIAL"
1151 "SET"
1152 "SEVERE"
1153 "SHAREDFILE"
1154 "SHARE"
1155 "SILENTMODE"
1156 "SRCTARGETDIR"
1157 "STATUSBAR"
1158 "STATUSDLG"
1159 "STATUSOLD"
1160 "STATUS"
1161 "STYLE_NORMAL"
1162 "SW_MAXIMIZE"
1163 "SW_MINIMIZE"
1164 "SW_RESTORE"
1165 "SW_SHOW"
1166 "TIME"
1167 "TRUE"
1168 "TYPICAL"
1169 "UPPER_LEFT"
1170 "UPPER_RIGHT"
1171 "VALID_PATH"
1172 "VERSION"
1173 "VIDEO"
1174 "VOLUMELABEL"
1175 "YELLOW"
1176 "YES"
1177 "WAIT"
1178 "WARNING"
1179 "WINMAJOR"
1180 "WINMINOR"
1181 "WIN32SINSTALLED"
1182 "WIN32SMAJOR"
1183 "WIN32SMINOR"
1184 )
1185 'font-lock-variable-name-face) ; is this face the best choice?
1186 )
1187 (list "\\.[rR][uU][lL]$")
1188 (list
1189 (function
1190 (lambda ()
1191 (setq imenu-generic-expression
1192 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)))
1193 )))
1194 "Generic mode for InstallShield RUL files.")
1195
1196(define-skeleton rul-if
1197 "Insert an if statement."
1198 "condition: "
1199 "if(" str ") then" \n
1200 > _ \n
1201 ( "other condition, %s: "
1202 > "elseif(" str ") then" \n
1203 > \n)
1204 > "else" \n
1205 > \n
1206 resume:
1207 > "endif;"
1208 )
1209
1210(define-skeleton rul-function
1211 "Insert a function statement."
1212 "function: "
1213 "function " str " ()" \n
1214 ( "local variables, %s: "
1215 > " " str ";" \n)
1216 > "begin" \n
1217 > _ \n
1218 resume:
1219 > "end;")
1220
1221)
1222
1223;; Additions by ACorreir@pervasive-sw.com (Alfred Correira)
1224(define-generic-mode 'mailrc-generic-mode
1225 (list ?#)
1226 (list
1227 "alias"
1228 "else"
1229 "endif"
1230 "group"
1231 "if"
1232 "ignore"
1233 "set"
1234 "unset"
1235 )
1236 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1237 (2 font-lock-reference-face) (3 font-lock-variable-name-face))
1238 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
1239 (2 font-lock-reference-face) (3 font-lock-variable-name-face)))
1240 (list "\\.mailrc\\'")
1241 nil
1242 "Mode for mailrc files.")
1243
1244(provide 'generic-x)
1245
1246;;; generic-x.el ends here