1 ;;; generic-x.el --- Extra Modes for generic-mode
3 ;; Copyright (C) 1997, 1998 Free Software Foundation, Inc.
5 ;; Author: Peter Breton <pbreton@cs.umb.edu>
6 ;; Created: Tue Oct 08 1996
7 ;; Keywords: generic, comment, font-lock
9 ;; This file is part of GNU Emacs.
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)
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.
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.
28 ;; This file contains some pre-defined generic-modes.
32 ;; Add this line to your .emacs file:
34 ;; (require 'generic-x)
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).
41 ;; You can also send in new modes; if the file types a reasonably common,
42 ;; we would like to install them.
44 ;; PROBLEMS WHEN USED WITH FOLDING MODE:
46 ;; [The following relates to the obsolete selective-display technique.
47 ;; Folding mode should use invisible text properties instead. -- Dave
50 ;; From Anders Lindgren <andersl@csd.uu.se>
52 ;; Problem summary: Wayne Adams has found a problem when using folding
53 ;; mode in conjuction with font-lock for a mode defined in
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:
59 ;; > - various msgs including "Fontifying region...(error Stack
60 ;; > overflow in regexp matcher)" appear
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.
70 ;; Many other hiding packages, besides folding, use the same technique,
71 ;; the problem should occur when using them as well.
73 ;; The erroronous lines in `generic-extras' look like the following (this
74 ;; example is from the `ini' section):
76 ;; '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face)
77 ;; ("^\\(.*\\)=" 1 'font-lock-variable-name-face)
79 ;; The intention of these lines is to highlight lines of the following
85 ;; However, since the `.' regexp symbol match the linefeed character the
86 ;; entire folded section is searched, resulting in a regexp stack
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.
98 (defgroup generic-x nil
99 "Extra modes for generic mode."
104 (defcustom generic-extras-enable-list nil
105 "*List of generic modes to enable by default.
106 Each entry in the list should be a symbol.
107 The variables `generic-define-mswindows-modes' and `generic-define-unix-modes'
108 also affect which generic modes are defined.
109 Please note that if you set this variable after generic-x is loaded,
110 you must reload generic-x to enable the specified modes."
115 (defcustom generic-define-mswindows-modes
116 (memq system-type
(list 'windows-nt
'ms-dos
))
117 "*If non-nil, some MS-Windows specific generic modes will be defined."
122 (defcustom generic-define-unix-modes
123 (not (memq system-type
(list 'windows-nt
'ms-dos
)))
124 "*If non-nil, some Unix specific generic modes will be defined."
129 (and generic-define-mswindows-modes
130 (setq generic-extras-enable-list
131 (append (list 'bat-generic-mode
'ini-generic-mode
132 'inf-generic-mode
'rc-generic-mode
133 'reg-generic-mode
'rul-generic-mode
135 'apache-conf-generic-mode
136 'apache-log-generic-mode
138 generic-extras-enable-list
)))
140 (and generic-define-unix-modes
141 (setq generic-extras-enable-list
142 (append (list 'apache-conf-generic-mode
143 'apache-log-generic-mode
145 'hosts-generic-mode
'fvwm-generic-mode
146 'x-resource-generic-mode
148 'inetd-conf-generic-mode
149 'etc-services-generic-mode
150 'etc-passwd-generic-mode
151 'etc-fstab-generic-mode
153 generic-extras-enable-list
)))
155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
157 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
161 (memq 'apache-conf-generic-mode generic-extras-enable-list
)
163 (define-generic-mode 'apache-conf-generic-mode
166 '(("^\\(<.*>\\)" 1 'font-lock-constant-face
)
167 ("^\\(\\sw+\\)\\s-" 1 'font-lock-variable-name-face
))
168 (list "srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
172 (setq imenu-generic-expression
173 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)
174 ("*Directories*" "^\\s-*<Directory\\s-*\\([^>]+\\)>" 1)
175 ("*Locations*" "^\\s-*<Location\\s-*\\([^>]+\\)>" 1)
178 "Generic mode for Apache or HTTPD configuration files."))
181 (memq 'apache-log-generic-mode generic-extras-enable-list
)
183 (define-generic-mode 'apache-log-generic-mode
186 ;; Hostname ? user date request return-code number-of-bytes
187 '(("^\\([-a-zA-z0-9.]+\\) - [-A-Za-z]+ \\(\\[.*\\]\\)"
188 (1 font-lock-constant-face
)
189 (2 font-lock-variable-name-face
))
191 (list "access_log\\'")
193 "Mode for Apache log files"))
197 (memq 'samba-generic-mode generic-extras-enable-list
)
199 (define-generic-mode 'samba-generic-mode
203 ("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face
)
204 ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)"
205 (1 'font-lock-variable-name-face
)
206 (2 'font-lock-type-face
))
208 (list "smb\\.conf\\'")
209 (list 'generic-bracket-support
)
210 "Generic mode for Samba configuration files."))
213 ;; This is pretty basic. Also, modes for other window managers could
214 ;; be defined as well.
216 (memq 'fvwm-generic-mode generic-extras-enable-list
)
218 (define-generic-mode 'fvwm-generic-mode
236 (list "\\.fvwmrc\\'" "\\.fvwm2rc\\'")
238 "Generic mode for FVWM configuration files."))
241 ;; I'm pretty sure I've seen an actual mode to do this, but I don't
242 ;; think it's standard with Emacs
244 (memq 'x-resource-generic-mode generic-extras-enable-list
)
246 (define-generic-mode 'x-resource-generic-mode
249 '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face
))
250 (list "\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
252 "Generic mode for X Resource configuration files."))
256 (memq 'hosts-generic-mode generic-extras-enable-list
)
258 (define-generic-mode 'hosts-generic-mode
261 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face
))
262 (list "[hH][oO][sS][tT][sS]\\'")
264 "Generic mode for HOSTS files."))
266 ;;; Windows INF files
268 (memq 'inf-generic-mode generic-extras-enable-list
)
270 (define-generic-mode 'inf-generic-mode
273 '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face
))
274 (list "\\.[iI][nN][fF]\\'")
275 (list 'generic-bracket-support
)
276 "Generic mode for MS-Windows INF files."))
278 ;;; Windows INI files
279 ;; Should define escape character as well!
281 (memq 'ini-generic-mode generic-extras-enable-list
)
283 (define-generic-mode 'ini-generic-mode
286 '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face
)
287 ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$"
288 (1 font-lock-function-name-face
)
289 (2 font-lock-variable-name-face
)))
290 (list "\\.[iI][nN][iI]\\'")
294 (setq imenu-generic-expression
295 '((nil "^\\[\\(.*\\)\\]" 1)
296 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))
298 "Generic mode for MS-Windows INI files."))
300 ;;; Windows REG files
301 ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
303 (memq 'reg-generic-mode generic-extras-enable-list
)
305 (define-generic-mode 'reg-generic-mode
307 '("key" "classes_root" "REGEDIT" "REGEDIT4")
308 '(("\\(\\[.*]\\)" 1 'font-lock-constant-face
)
309 ("^\\([^\n\r]*\\)\\s-*=" 1 'font-lock-variable-name-face
))
310 '("\\.[rR][eE][gG]\\'")
314 (setq imenu-generic-expression
315 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
316 "Generic mode for MS-Windows Registry files."))
318 ;;; DOS/Windows BAT files
319 (if (not (memq 'bat-generic-mode generic-extras-enable-list
))
321 (define-generic-mode 'bat-generic-mode
325 ;; Make this one first in the list, otherwise comments will
326 ;; be over-written by other variables
327 (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t
)
328 (list "^[ \t]*\\(::.*\\)" 1 'font-lock-comment-face t
)
330 "^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)"
331 '(1 font-lock-builtin-face
)
332 '(2 font-lock-constant-face t t
))
333 ;; Any text (except ON/OFF) following ECHO is a string.
335 "^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)"
336 '(1 font-lock-builtin-face
)
337 '(3 font-lock-constant-face t t
)
338 '(5 font-lock-string-face t t
))
339 ;; These keywords appear as the first word on a line. (Actually, they
340 ;; can also appear after "if ..." or "for ..." clause, but since they
341 ;; are frequently used in simple text, we punt.)
342 ;; In `generic-bat-mode-setup-function' we make the keywords
344 (generic-make-keywords-list
349 'font-lock-keyword-face
"^[@ \t]*")
350 ;; These keywords can be anywhere on a line
351 ;; In `generic-bat-mode-setup-function' we make the keywords
353 (generic-make-keywords-list
360 ) 'font-lock-keyword-face
)
361 ;; These are built-in commands. Only frequently-used ones are listed.
362 (generic-make-keywords-list
372 "PAUSE" "pause" "Pause"
373 "PROMPT" "prompt" "Prompt"
377 "START" "start" "Start"
378 "SHIFT" "shift" "Shift"
379 ) 'font-lock-builtin-face
"[ \t|\n]")
380 (list "^[ \t]*\\(:\\sw+\\)" 1 'font-lock-function-name-face t
)
381 (list "\\(%\\sw+%\\)" 1 'font-lock-variable-name-face t
)
382 (list "\\(%[0-9]\\)" 1 'font-lock-variable-name-face t
)
383 (list "\\(/[^/ \"\t\n]+\\)" 1 'font-lock-type-face
)
384 (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face
)
385 (list "[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
386 '(1 font-lock-keyword-face
)
387 '(2 font-lock-function-name-face nil t
))
388 (list "[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?"
389 '(1 font-lock-builtin-face
)
390 '(2 font-lock-variable-name-face t t
))
395 "\\`[cC][oO][nN][fF][iI][gG]\\."
396 "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\." )
397 (list 'generic-bat-mode-setup-function
)
398 "Generic mode for MS-Windows BAT files.")
400 (defvar bat-generic-mode-syntax-table nil
401 "Syntax table in use in bat-generic-mode buffers.")
403 (defvar bat-generic-mode-keymap
(make-sparse-keymap)
404 "Keymap for bet-generic-mode.")
406 (defun bat-generic-mode-compile ()
407 "Run the current BAT file in a compilation buffer."
409 (let ((compilation-buffer-name-function
412 (concat "*" (buffer-file-name) "*")))
416 (concat (w32-shell-name) " -c " (buffer-file-name)))))
418 (defun bat-generic-mode-run-as-comint ()
419 "Run the current BAT file in a comint buffer."
422 (let* ((file (buffer-file-name))
423 (buf-name (concat "*" file
"*")))
426 (get-buffer-create buf-name
))
439 (display-buffer buf-name
))))
441 (define-key bat-generic-mode-keymap
"\C-c\C-c" 'bat-generic-mode-compile
)
443 ;; Make underscores count as words
444 (if bat-generic-mode-syntax-table
446 (setq bat-generic-mode-syntax-table
(make-syntax-table))
447 (modify-syntax-entry ?_
"w" bat-generic-mode-syntax-table
))
449 ;; bat-generic-mode doesn't use the comment functionality of generic-mode
450 ;; because it has a three-letter comment-string, so we do it
451 ;; here manually instead
452 (defun generic-bat-mode-setup-function ()
453 (make-local-variable 'parse-sexp-ignore-comments
)
454 (make-local-variable 'comment-start
)
455 (make-local-variable 'comment-start-skip
)
456 (make-local-variable 'comment-end
)
457 (setq imenu-generic-expression
'((nil "^:\\(\\sw+\\)" 1))
458 parse-sexp-ignore-comments t
461 comment-start-skip
"[Rr][Ee][Mm] *"
463 (set-syntax-table bat-generic-mode-syntax-table
)
464 ;; Make keywords case-insensitive
465 (setq font-lock-defaults
(list 'generic-font-lock-defaults nil t
))
466 (use-local-map bat-generic-mode-keymap
)
471 ;; Mailagent is a Unix mail filtering program. Anyone wanna do a generic mode
474 (memq 'mailagent-rules-generic-mode generic-extras-enable-list
)
476 (define-generic-mode 'mailagent-rules-generic-mode
478 (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
479 '(("^\\(\\sw+\\)\\s-*=" 1 'font-lock-variable-name-face
)
480 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-constant-face
))
482 (list 'mailagent-rules-setup-function
)
483 "Mode for Mailagent rules files.")
485 (defun mailagent-rules-setup-function ()
486 (make-local-variable 'imenu-generic-expression
)
487 (setq imenu-generic-expression
488 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))
491 ;; Solaris/Sys V prototype files
493 (memq 'prototype-generic-mode generic-extras-enable-list
)
495 (define-generic-mode 'prototype-generic-mode
499 ("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
500 (2 font-lock-constant-face
)
501 (3 font-lock-keyword-face
))
502 ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
503 (1 font-lock-constant-face
)
504 (2 font-lock-keyword-face
)
505 (3 font-lock-variable-name-face
))
506 ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$"
507 (1 font-lock-keyword-face
)
508 (3 font-lock-variable-name-face
))
509 ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
510 (1 font-lock-keyword-face
)
511 (2 font-lock-variable-name-face
))
513 (list "prototype\\'")
515 "Mode for Sys V prototype files."))
517 ;; Solaris/Sys V pkginfo files
519 (memq 'pkginfo-generic-mode generic-extras-enable-list
)
521 (define-generic-mode 'pkginfo-generic-mode
525 ("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
526 (1 font-lock-keyword-face
)
527 (2 font-lock-variable-name-face
))
531 "Mode for Sys V pkginfo files."))
534 ;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU]
535 (define-generic-mode 'javascript-generic-mode
560 ;; words reserved for ECMA extensions below
571 ;; Java Keywords reserved by JavaScript
600 (list "^\\s-*function\\s-+\\([A-Za-z0-9_]+\\)"
601 '(1 font-lock-function-name-face
))
602 (list "^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)"
603 '(1 font-lock-variable-name-face
))
609 (setq imenu-generic-expression
610 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)
611 ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1)
614 "Mode for JavaScript files.")
617 (define-generic-mode 'vrml-generic-mode
650 (list "USE\\s-+\\([-A-Za-z0-9_]+\\)"
651 '(1 font-lock-constant-face
))
652 (list "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
653 '(1 font-lock-type-face
)
654 '(2 font-lock-constant-face
))
655 (list "^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
656 '(1 font-lock-function-name-face
))
658 "^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
659 '(2 font-lock-variable-name-face
))
665 (setq imenu-generic-expression
666 '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1)
668 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
671 "Generic Mode for VRML files.")
674 (define-generic-mode 'java-manifest-generic-mode
686 '(("^Name:\\s-+\\([^\n\r]*\\)$"
687 (1 font-lock-variable-name-face
))
688 ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
689 (2 font-lock-constant-face
))
691 (list "[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
693 "Mode for Java Manifest files")
695 ;; Java properties files
696 (define-generic-mode 'java-properties-generic-mode
699 (let ((java-properties-key
700 "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)")
701 (java-properties-value
704 ;; Property and value can be separated in a number of different ways:
712 (concat "^" java-properties-key elt java-properties-value
"$")
713 '(1 font-lock-constant-face
)
714 '(4 font-lock-variable-name-face
)
716 ;; These are the separators
717 (list ":\\s-*" "\\s-+" "\\s-*=\\s-*")
724 (setq imenu-generic-expression
725 '((nil "^\\([^#! \t\n\r=:]+\\)" 1)))
727 "Mode for Java properties files.")
729 ;; C shell alias definitions
731 (memq 'alias-generic-mode generic-extras-enable-list
)
733 (define-generic-mode 'alias-generic-mode
735 (list "alias" "unalias")
736 '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+"
737 (1 font-lock-variable-name-face
))
738 ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$"
739 (1 font-lock-variable-name-face
))
745 (setq imenu-generic-expression
746 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))
748 "Mode for C Shell alias files.")
752 ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
754 (memq 'rc-generic-mode generic-extras-enable-list
)
756 (define-generic-mode 'rc-generic-mode
812 ;; the choice of what tokens go where is somewhat arbitrary,
813 ;; as is the choice of which value tokens are included, as
814 ;; the choice of face for each token group
816 (generic-make-keywords-list
825 ) 'font-lock-type-face
)
826 (generic-make-keywords-list
832 ) 'font-lock-function-name-face
)
833 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face
)
834 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face
)
835 '("^#[ \t]*\\(elif\\|if\\)\\>"
836 ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
837 (1 font-lock-constant-face
) (2 font-lock-variable-name-face nil t
)))
838 '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
839 (1 font-lock-constant-face
) (2 font-lock-variable-name-face nil t
)))
840 (list "\\.[rR][cC]$")
842 "Generic mode for MS-Windows Resource files."))
844 ;; InstallShield RUL files
845 ;; Contributed by Alfred.Correira@Pervasive.Com
847 (memq 'rul-generic-mode generic-extras-enable-list
)
848 ;;; build the regexp strings using regexp-opt
849 (defvar installshield-statement-keyword-list
869 ;; "goto" -- handled elsewhere
884 "Statement keywords used in InstallShield 3 and 5.")
886 (defvar installshield-system-functions-list
907 "ComponentAddItem" ; differs between IS3 and IS5
908 "ComponentCompareSizeRequired" ; IS5 only
910 "ComponentError" ; IS5 only
911 "ComponentFileEnum" ; IS5 only
912 "ComponentFileInfo" ; IS5 only
913 "ComponentFilterLanguage" ; IS5 only
914 "ComponentFilterOS" ; IS5 only
915 "ComponentGetData" ; IS5 only
916 "ComponentGetItemInfo" ; IS3 only
917 "ComponentGetItemSize" ; differs between IS3 and IS5
918 "ComponentIsItemSelected" ; differs between IS3 and IS5
920 "ComponentMoveData" ; IS5 only
921 "ComponentSelectItem" ; differs between IS3 and IS5
922 "ComponentSetData" ; IS5 only
923 "ComponentSetItemInfo" ; IS3 only
924 "ComponentSetTarget" ; IS5 only
925 "ComponentSetupTypeEnum" ; IS5 only
926 "ComponentSetupTypeGetData" ; IS5 only
927 "ComponentSetupTypeSet" ; IS5 only
929 "ComponentValidate" ; IS5 only
930 "CompressAdd" ; IS3 only
931 "CompressDel" ; IS3 only
932 "CompressEnum" ; IS3 only
933 "CompressGet" ; IS3 only
934 "CompressInfo" ; IS3 only
938 "CreateProgramFolder"
939 "DeinstallSetReference" ; IS5 only
965 "FileSetBeginDefine" ; IS3 only
966 "FileSetEndDefine" ; IS3 only
967 "FileSetPerformEz" ; IS3 only
968 "FileSetPerform" ; IS3 only
969 "FileSetReset" ; IS3 only
970 "FileSetRoot" ; IS3 only
1003 "ListSetCurrentItem"
1009 "LongPathToShortPath"
1024 "PlayMMedia" ; IS5 only
1031 "RegDBGetKeyValueEx"
1032 "RegDBSetKeyValueEx"
1033 "RegDBSetDefaultRoot"
1042 "SdComponentAdvCheckSpace"
1043 "SdComponentAdvInit"
1044 "SdComponentAdvUpdateSpace"
1046 "SdComponentDialog2"
1047 "SdComponentDialogAdv"
1048 "SdComponentDialogEx"
1049 "SdComponentDlgCheckSpace"
1052 "SdConfirmRegistration"
1064 "SdGetUserCompanyInfo"
1073 "SdOptionsButtonsInit"
1074 "SdPlugInProductName"
1077 "SdRegExEnableButton"
1082 "SdSetSequentialItems"
1084 "SdSetupTypeEx" ; IS5 only
1095 "SdUpdateComponentSelection"
1101 "SetDisplayEffect" ; IS5 only
1103 "SetForegroundWindow"
1116 "StrRemoveLastSlash"
1131 "System functions defined in InstallShield 3 and 5.")
1133 (defvar installshield-system-variables-list
1138 "CORECOMPONENTHANDLING"
1165 "System variables used in InstallShield 3 and 5.")
1167 (defvar installshield-types-list
1188 "Type keywords used in InstallShield 3 and 5.")
1190 ;;; some might want to skip highlighting these to improve performance
1191 (defvar installshield-funarg-constants-list
1222 "COMP_UPDATE_VERSION"
1241 "DLG_INFO_CHECKSELECTION"
1243 "DLG_INFO_USEDECIMAL"
1244 "DLG_MSG_INFORMATION"
1265 "FILE_ATTR_ARCHIVED"
1266 "FILE_ATTR_DIRECTORY"
1269 "FILE_ATTR_READONLY"
1275 "FILE_MODE_BINARYREADONLY"
1297 "HKEY_LOCAL_MACHINE"
1342 "REGDB_APPPATH_DEFAULT"
1345 "REGDB_ERR_CONNECTIONEXISTS"
1346 "REGDB_ERR_CORRUPTEDREGSITRY"
1347 "REGDB_ERR_INITIALIZATION"
1348 "REGDB_ERR_INVALIDHANDLE"
1349 "REGDB_ERR_INVALIDNAME"
1351 "REGDB_STRING_EXPAND"
1352 "REGDB_STRING_MULTI"
1354 "REGDB_UNINSTALL_NAME"
1399 "Function argument constants used in InstallShield 3 and 5.")
1401 (define-generic-mode 'rul-generic-mode
1402 ;; Using "/*" and "*/" doesn't seem to be working right
1404 installshield-statement-keyword-list
1406 ;; preprocessor constructs
1407 '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
1408 1 font-lock-string-face
)
1409 '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
1410 (1 font-lock-constant-face
)
1411 (2 font-lock-variable-name-face nil t
))
1412 ;; indirect string constants
1413 '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face
)
1415 '("[ \t]*\\(\\sw+:\\)" 1 font-lock-constant-face
)
1416 '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
1417 (1 font-lock-keyword-face
)
1418 (2 font-lock-constant-face nil t
))
1420 (generic-make-keywords-list
1421 installshield-system-variables-list
1422 'font-lock-variable-name-face
"[^_]" "[^_]")
1424 (generic-make-keywords-list
1425 installshield-system-functions-list
1426 'font-lock-function-name-face
"[^_]" "[^_]")
1428 (generic-make-keywords-list
1429 installshield-types-list
1430 'font-lock-type-face
"[^_]" "[^_]")
1431 ;; function argument constants
1432 (generic-make-keywords-list
1433 installshield-funarg-constants-list
1434 'font-lock-variable-name-face
"[^_]" "[^_]") ; is this face the best choice?
1436 (list "\\.[rR][uU][lL]$")
1440 (setq imenu-generic-expression
1441 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)))
1443 "Generic mode for InstallShield RUL files.")
1445 (define-skeleton rul-if
1446 "Insert an if statement."
1448 "if(" str
") then" \n
1450 ( "other condition, %s: "
1451 > "elseif(" str
") then" \n
1459 (define-skeleton rul-function
1460 "Insert a function statement."
1462 "function " str
" ()" \n
1463 ( "local variables, %s: "
1472 ;; Additions by ACorreir@pervasive-sw.com (Alfred Correira)
1473 (define-generic-mode 'mailrc-generic-mode
1485 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1486 (2 font-lock-constant-face
) (3 font-lock-variable-name-face
))
1487 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
1488 (2 font-lock-constant-face
) (3 font-lock-variable-name-face
)))
1489 (list "\\.mailrc\\'")
1491 "Mode for mailrc files.")
1495 (memq 'inetd-conf-generic-mode generic-extras-enable-list
)
1497 (define-generic-mode 'inetd-conf-generic-mode
1509 ("^\\([-A-Za-z0-9_]+\\)"
1510 1 'font-lock-type-face
)
1512 '("/etc/inetd.conf\\'")
1516 (setq imenu-generic-expression
1517 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))
1524 (memq 'etc-services-generic-mode generic-extras-enable-list
)
1526 (define-generic-mode 'etc-services-generic-mode
1534 ("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/"
1535 (1 'font-lock-type-face
)
1536 (2 'font-lock-variable-name-face
)
1539 '("/etc/services\\'")
1543 (setq imenu-generic-expression
1544 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))
1549 ;; Password and Group files
1551 (memq 'etc-passwd-generic-mode generic-extras-enable-list
)
1553 (define-generic-mode 'etc-passwd-generic-mode
1554 nil
;; No comment characters
1555 (list "root") ;; Only one keyword
1560 ;; User name -- Never blank!
1563 ;; Password, UID and GID
1566 (make-list 3 "\\([^:]+\\)")
1570 ;; GECOS/Name -- might be blank
1573 ;; Home directory and shell
1579 '(1 'font-lock-type-face
)
1580 '(5 'font-lock-variable-name-face
)
1581 '(6 'font-lock-constant-face
)
1582 '(7 'font-lock-warning-face
)
1584 '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$"
1585 (1 'font-lock-type-face
)
1586 (4 'font-lock-variable-name-face
)
1589 '("/etc/passwd\\'" "/etc/group\\'")
1593 (setq imenu-generic-expression
1594 '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))
1600 ;; From Jacques Duthen <jacques.duthen@sncf.fr>
1601 (defvar show-tabs-generic-mode-font-lock-defaults-1
1602 '( ;; trailing spaces must come before...
1603 ("[ \t]+$" .
'show-tabs-space-face
)
1605 ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face
))))
1607 (defvar show-tabs-generic-mode-font-lock-defaults-2
1608 '( ;; trailing spaces must come before...
1609 ("[ \t]+$" .
'show-tabs-space-face
)
1611 ("\t+" .
'show-tabs-tab-face
)))
1613 (defface show-tabs-tab-face
1614 '((((class grayscale
) (background light
)) (:foreground
"LightGray" :bold t
))
1615 (((class grayscale
) (background dark
)) (:foreground
"DimGray" :bold t
))
1616 (((class color
) (background light
)) (:foreground
"red"))
1617 (((class color
) (background dark
)) (:foreground
"red"))
1619 "Font Lock mode face used to highlight TABs."
1622 (defface show-tabs-space-face
1623 '((((class grayscale
) (background light
)) (:foreground
"LightGray" :bold t
))
1624 (((class grayscale
) (background dark
)) (:foreground
"DimGray" :bold t
))
1625 (((class color
) (background light
)) (:foreground
"yellow"))
1626 (((class color
) (background dark
)) (:foreground
"yellow"))
1628 "Font Lock mode face used to highlight spaces."
1631 (define-generic-mode 'show-tabs-generic-mode
1632 () ;; no comment char
1634 show-tabs-generic-mode-font-lock-defaults-1
1635 () ;; no auto-mode-alist
1636 ;; (list 'show-tabs-generic-mode-hook-fun)
1638 "Generic mode to show tabs and trailing spaces")
1640 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1642 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1644 (define-generic-mode 'named-boot-generic-mode
1645 ;;List of comment characters
1648 (list "cache" "primary" "secondary" "forwarders" "limit" "options"
1649 "directory" "check-names")
1650 ;;List of additional font-lock-expressions
1652 (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face
)
1653 (list "^directory\\s-+\\(.*\\)" 1 'font-lock-variable-name-face
)
1654 (list "^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)"
1655 (list 2 'font-lock-variable-name-face
)
1656 (list 3 'font-lock-constant-face
))
1658 ;;List of additional automode-alist expressions
1659 (list "/etc/named.boot\\'")
1660 ;;List of set up functions to call
1664 (define-generic-mode 'named-database-generic-mode
1665 ;;List of comment characters
1668 (list "IN" "NS" "CNAME" "SOA" "PTR" "MX" "A")
1669 ;;List of additional font-lock-expressions
1671 (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face
)
1672 (list "^\\([.A-Za-z0-9]+\\)" 1 'font-lock-variable-name-face
)
1674 ;;List of additional automode-alist expressions
1676 ;;List of set up functions to call
1680 (defvar named-database-time-string
"%Y%m%d%H"
1681 "Timestring for named serial numbers.")
1683 (defun named-database-print-serial ()
1684 "Print a serial number based on the current date."
1686 (insert (format-time-string named-database-time-string
(current-time)))
1689 (define-generic-mode 'resolve-conf-generic-mode
1690 ;;List of comment characters
1693 (list "nameserver" "domain" "search" "sortlist" "options")
1694 ;;List of additional font-lock-expressions
1696 ;;List of additional automode-alist expressions
1697 (list "/etc/resolv[e]?.conf\\'")
1698 ;;List of set up functions to call
1702 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1703 ;; Modes for spice and common electrical engineering circuit netlist formats
1704 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1706 (define-generic-mode 'spice-generic-mode
1726 ("^\\s-*\\([*].*\\)" 1 'font-lock-comment-face
)
1727 (" \\(\\$ .*\\)$" 1 'font-lock-comment-face
)
1728 ("^\\(\\$ .*\\)$" 1 'font-lock-comment-face
)
1729 ("\\([*].*\\)" 1 'font-lock-comment-face
)
1730 ("^\\([+]\\)" 1 'font-lock-string-face
)
1731 ("^\\s-*\\([.]\\w+\\>\\)" 1 'font-lock-keyword-face
)
1732 ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face
)
1733 ("\\('[^']+'\\)" 1 'font-lock-string-face
)
1734 ("\\(\"[^\"]+\"\\)" 1 'font-lock-string-face
)
1736 (list "\\.[sS][pP]\\'"
1737 "\\.[sS][pP][iI]\\'"
1738 "\\.[sS][pP][iI][cC][eE]\\'"
1739 "\\.[iI][nN][cC]\\'")
1741 'generic-bracket-support
1742 ;; Make keywords case-insensitive
1745 (setq font-lock-defaults
(list 'generic-font-lock-defaults nil t
))))
1747 "Generic mode for SPICE circuit netlist files."
1750 (define-generic-mode 'ibis-generic-mode
1754 ("[[]\\([^]]*\\)[]]" 1 'font-lock-keyword-face
)
1755 ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face
)
1757 (list "\\.[iI][bB][sS]\\'")
1758 (list 'generic-bracket-support
)
1759 "Generic mode for IBIS circuit netlist files."
1762 (define-generic-mode 'astap-generic-mode
1780 ("^\\s-*\\([*].*\\)" 1 'font-lock-comment-face
)
1781 (";\\s-*\\([*].*\\)" 1 'font-lock-comment-face
)
1782 ("^\\s-*\\([.]\\w+\\>\\)" 1 'font-lock-keyword-face
)
1783 ("\\('[^']+'\\)" 1 'font-lock-string-face
)
1784 ("\\(\"[^\"]+\"\\)" 1 'font-lock-string-face
)
1785 ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face
)
1787 (list "\\.[aA][pP]\\'"
1788 "\\.[aA][sS][xX]\\'"
1789 "\\.[aA][sS][tT][aA][pP]\\'"
1790 "\\.[pP][sS][pP]\\'"
1791 "\\.[dD][eE][cC][kK]\\'"
1792 "\\.[gG][oO][dD][aA][tT][aA]")
1794 'generic-bracket-support
1795 ;; Make keywords case-insensitive
1798 (setq font-lock-defaults
(list 'generic-font-lock-defaults nil t
))))
1800 "Generic mode for ASTAP circuit netlist files."
1804 (provide 'generic-x
)
1806 ;;; generic-x.el ends here