1 ;;; generic-x.el --- A collection of generic modes
3 ;; Copyright (C) 1997-1998, 2001-2013 Free Software Foundation, Inc.
5 ;; Author: Peter Breton <pbreton@cs.umb.edu>
6 ;; Created: Tue Oct 08 1996
7 ;; Keywords: generic, comment, font-lock
10 ;; This file is part of GNU Emacs.
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
13 ;; it under the terms of the GNU General Public License as published by
14 ;; the Free Software Foundation, either version 3 of the License, or
15 ;; (at your option) any later version.
17 ;; GNU Emacs is distributed in the hope that it will be useful,
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ;; GNU General Public License for more details.
22 ;; You should have received a copy of the GNU General Public License
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
27 ;; This file contains a collection of generic modes.
31 ;; Add this line to your init file:
33 ;; (require 'generic-x)
35 ;; You can decide which modes to load by setting the variable
36 ;; `generic-extras-enable-list'. Its default value is platform-
37 ;; specific. The recommended way to set this variable is through
40 ;; M-x customize-option RET generic-extras-enable-list RET
42 ;; This lets you select generic modes from the list of available
43 ;; modes. If you manually set `generic-extras-enable-list' in your
44 ;; .emacs, do it BEFORE loading generic-x with (require 'generic-x).
46 ;; You can also send in new modes; if the file types are reasonably
47 ;; common, we would like to install them.
49 ;; DEFAULT GENERIC MODE:
51 ;; This file provides a hook which automatically puts a file into
52 ;; `default-generic-mode' if the first few lines of a file in
53 ;; fundamental mode start with a hash comment character. To disable
54 ;; this functionality, set the variable `generic-use-find-file-hook'
55 ;; to nil BEFORE loading generic-x. See the variables
56 ;; `generic-lines-to-scan' and `generic-find-file-regexp' for
57 ;; customization options.
59 ;; PROBLEMS WHEN USED WITH FOLDING MODE:
61 ;; [The following relates to the obsolete selective-display technique.
62 ;; Folding mode should use invisible text properties instead. -- Dave
65 ;; From Anders Lindgren <andersl@csd.uu.se>
67 ;; Problem summary: Wayne Adams has found a problem when using folding
68 ;; mode in conjunction with font-lock for a mode defined in
71 ;; The problem, as Wayne described it, was that error messages of the
72 ;; following form appeared when both font-lock and folding are used:
74 ;; > - various msgs including "Fontifying region...(error Stack
75 ;; > overflow in regexp matcher)" appear
77 ;; I have just tracked down the cause of the problem. The regexp's in
78 ;; `generic-x.el' do not take into account the way that folding hides
79 ;; sections of the buffer. The technique is known as
80 ;; `selective-display' and has been available for a very long time (I
81 ;; started using it back in the good old Emacs 18 days). Basically, a
82 ;; section is hidden by creating one very long line were the newline
83 ;; character (C-j) is replaced by a linefeed (C-m) character.
85 ;; Many other hiding packages, besides folding, use the same technique,
86 ;; the problem should occur when using them as well.
88 ;; The erroneous lines in `generic-x.el' look like the following (this
89 ;; example is from the `ini' section):
91 ;; '(("^\\(\\[.*\\]\\)" 1 'font-lock-constant-face)
92 ;; ("^\\(.*\\)=" 1 'font-lock-variable-name-face)
94 ;; The intention of these lines is to highlight lines of the following
100 ;; However, since the `.' regexp symbol matches the linefeed character
101 ;; the entire folded section is searched, resulting in a regexp stack
104 ;; Solution suggestion: Instead of using ".", use the sequence
105 ;; "[^\n\r]". This will make the rules behave just as before, but
106 ;; they will work together with selective-display.
110 (eval-when-compile (require 'font-lock
))
112 (defgroup generic-x nil
113 "A collection of generic modes."
118 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
119 ;; Default-Generic mode
120 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
122 (defcustom generic-use-find-file-hook t
123 "If non-nil, add a hook to enter `default-generic-mode' automatically.
124 This is done if the first few lines of a file in fundamental mode
125 start with a hash comment character."
129 (defcustom generic-lines-to-scan
3
130 "Number of lines that `generic-mode-find-file-hook' looks at.
131 Relevant when deciding whether to enter Default-Generic mode automatically.
132 This variable should be set to a small positive number."
136 (defcustom generic-find-file-regexp
"^#"
137 "Regular expression used by `generic-mode-find-file-hook'.
138 Files in fundamental mode whose first few lines contain a match
139 for this regexp, should be put into Default-Generic mode instead.
140 The number of lines tested for the matches is specified by the
141 value of the variable `generic-lines-to-scan', which see."
145 (defcustom generic-ignore-files-regexp
"[Tt][Aa][Gg][Ss]\\'"
146 "Regular expression used by `generic-mode-find-file-hook'.
147 Files whose names match this regular expression should not be put
148 into Default-Generic mode, even if they have lines which match
149 the regexp in `generic-find-file-regexp'. If the value is nil,
150 `generic-mode-find-file-hook' does not check the file names."
152 :type
'(choice (const :tag
"Don't check file names" nil
) regexp
))
154 ;; This generic mode is always defined
155 (define-generic-mode default-generic-mode
(list ?
#) nil nil nil nil
)
157 ;; A more general solution would allow us to enter generic-mode for
158 ;; *any* comment character, but would require us to synthesize a new
159 ;; generic-mode on the fly. I think this gives us most of what we
161 (defun generic-mode-find-file-hook ()
162 "Hook function to enter Default-Generic mode automatically.
164 Done if the first few lines of a file in Fundamental mode start
165 with a match for the regexp in `generic-find-file-regexp', unless
166 the file's name matches the regexp which is the value of the
167 variable `generic-ignore-files-regexp'.
169 This hook will be installed if the variable
170 `generic-use-find-file-hook' is non-nil. The variable
171 `generic-lines-to-scan' determines the number of lines to look at."
172 (when (and (eq major-mode
'fundamental-mode
)
173 (or (null generic-ignore-files-regexp
)
175 generic-ignore-files-regexp
176 (file-name-sans-versions buffer-file-name
)))))
178 (goto-char (point-min))
179 (when (re-search-forward generic-find-file-regexp
181 (forward-line generic-lines-to-scan
)
183 (goto-char (point-min))
184 (default-generic-mode)))))
186 (and generic-use-find-file-hook
187 (add-hook 'find-file-hook
'generic-mode-find-file-hook
))
189 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190 ;; Other Generic modes
191 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
193 ;; If you add a generic mode to this file, put it in one of these four
196 (defconst generic-default-modes
197 '(apache-conf-generic-mode
198 apache-log-generic-mode
200 java-manifest-generic-mode
201 java-properties-generic-mode
202 javascript-generic-mode
203 show-tabs-generic-mode
205 "List of generic modes that are defined by default.")
207 (defconst generic-mswindows-modes
214 "List of generic modes that are defined by default on MS-Windows.")
216 (defconst generic-unix-modes
218 etc-fstab-generic-mode
219 etc-modules-conf-generic-mode
220 etc-passwd-generic-mode
221 etc-services-generic-mode
222 etc-sudoers-generic-mode
224 inetd-conf-generic-mode
225 mailagent-rules-generic-mode
227 named-boot-generic-mode
228 named-database-generic-mode
229 prototype-generic-mode
230 resolve-conf-generic-mode
232 x-resource-generic-mode
233 xmodmap-generic-mode
)
234 "List of generic modes that are defined by default on Unix.")
236 (defconst generic-other-modes
241 "List of generic modes that are not defined by default.")
243 (defcustom generic-define-mswindows-modes
244 (memq system-type
'(windows-nt ms-dos
))
245 "Non-nil means the modes in `generic-mswindows-modes' will be defined.
246 This is a list of MS-Windows specific generic modes. This variable
247 only affects the default value of `generic-extras-enable-list'."
251 (make-obsolete-variable 'generic-define-mswindows-modes
'generic-extras-enable-list
"22.1")
253 (defcustom generic-define-unix-modes
254 (not (memq system-type
'(windows-nt ms-dos
)))
255 "Non-nil means the modes in `generic-unix-modes' will be defined.
256 This is a list of Unix specific generic modes. This variable only
257 affects the default value of `generic-extras-enable-list'."
261 (make-obsolete-variable 'generic-define-unix-modes
'generic-extras-enable-list
"22.1")
263 (defcustom generic-extras-enable-list
264 (append generic-default-modes
265 (if generic-define-mswindows-modes generic-mswindows-modes
)
266 (if generic-define-unix-modes generic-unix-modes
)
268 "List of generic modes to define.
269 Each entry in the list should be a symbol. If you set this variable
270 directly, without using customize, you must reload generic-x to put
271 your changes into effect."
275 (sort (append generic-default-modes
276 generic-mswindows-modes
281 (string< (symbol-name b
)
284 (push `(const ,mode
) list
)))
287 (unless load-in-progress
292 (when (memq 'apache-conf-generic-mode generic-extras-enable-list
)
294 (define-generic-mode apache-conf-generic-mode
297 '(("^\\s-*\\(<.*>\\)" 1 font-lock-constant-face
)
298 ("^\\s-*\\(\\sw+\\)\\s-" 1 font-lock-variable-name-face
))
299 '("srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
303 (setq imenu-generic-expression
304 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)
305 ("*Directories*" "^\\s-*<Directory\\s-*\\([^>]+\\)>" 1)
306 ("*Locations*" "^\\s-*<Location\\s-*\\([^>]+\\)>" 1))))))
307 "Generic mode for Apache or HTTPD configuration files."))
309 (when (memq 'apache-log-generic-mode generic-extras-enable-list
)
311 (define-generic-mode apache-log-generic-mode
314 ;; Hostname ? user date request return-code number-of-bytes
315 '(("^\\([-a-zA-z0-9.]+\\) - [-A-Za-z]+ \\(\\[.*\\]\\)"
316 (1 font-lock-constant-face
)
317 (2 font-lock-variable-name-face
)))
320 "Generic mode for Apache log files."))
323 (when (memq 'samba-generic-mode generic-extras-enable-list
)
325 (define-generic-mode samba-generic-mode
328 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face
)
329 ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)"
330 (1 font-lock-variable-name-face
)
331 (2 font-lock-type-face
)))
333 '(generic-bracket-support)
334 "Generic mode for Samba configuration files."))
337 ;; This is pretty basic. Also, modes for other window managers could
338 ;; be defined as well.
339 (when (memq 'fvwm-generic-mode generic-extras-enable-list
)
341 (define-generic-mode fvwm-generic-mode
357 '("\\.fvwmrc\\'" "\\.fvwm2rc\\'")
359 "Generic mode for FVWM configuration files."))
362 ;; I'm pretty sure I've seen an actual mode to do this, but I don't
363 ;; think it's standard with Emacs
364 (when (memq 'x-resource-generic-mode generic-extras-enable-list
)
366 (define-generic-mode x-resource-generic-mode
369 '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face
))
370 '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
372 "Generic mode for X Resource configuration files."))
374 (if (memq 'xmodmap-generic-mode generic-extras-enable-list
)
375 (define-generic-mode xmodmap-generic-mode
377 '("add" "clear" "keycode" "keysym" "remove" "pointer")
379 '("[xX]modmap\\(rc\\)?\\'")
381 "Simple mode for xmodmap files."))
384 (when (memq 'hosts-generic-mode generic-extras-enable-list
)
386 (define-generic-mode hosts-generic-mode
389 '(("\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" 1 font-lock-constant-face
))
390 '("[hH][oO][sS][tT][sS]\\'")
392 "Generic mode for HOSTS files."))
394 ;;; Windows INF files
396 ;; If i-g-m-f-f-h is defined, then so is i-g-m.
397 (declare-function ini-generic-mode
"generic-x")
399 (when (memq 'inf-generic-mode generic-extras-enable-list
)
401 (define-generic-mode inf-generic-mode
404 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face
))
405 '("\\.[iI][nN][fF]\\'")
406 '(generic-bracket-support)
407 "Generic mode for MS-Windows INF files."))
409 ;;; Windows INI files
410 ;; Should define escape character as well!
411 (when (memq 'ini-generic-mode generic-extras-enable-list
)
413 (define-generic-mode ini-generic-mode
416 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face
)
417 ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$"
418 (1 font-lock-function-name-face
)
419 (2 font-lock-variable-name-face
)))
420 '("\\.[iI][nN][iI]\\'")
424 (setq imenu-generic-expression
425 '((nil "^\\[\\(.*\\)\\]" 1)
426 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1))))))
427 "Generic mode for MS-Windows INI files.
428 You can use `ini-generic-mode-find-file-hook' to enter this mode
429 automatically for INI files whose names do not end in \".ini\".")
431 (defun ini-generic-mode-find-file-hook ()
432 "Hook function to enter Ini-Generic mode automatically for INI files.
433 Done if the first few lines of a file in Fundamental mode look
434 like an INI file. You can add this hook to `find-file-hook'."
435 (and (eq major-mode
'fundamental-mode
)
437 (goto-char (point-min))
438 (and (looking-at "^\\s-*\\[.*\\]")
439 (ini-generic-mode)))))
440 (defalias 'generic-mode-ini-file-find-file-hook
'ini-generic-mode-find-file-hook
))
442 ;;; Windows REG files
443 ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
444 (when (memq 'reg-generic-mode generic-extras-enable-list
)
446 (define-generic-mode reg-generic-mode
448 '("key" "classes_root" "REGEDIT" "REGEDIT4")
449 '(("\\(\\[.*\\]\\)" 1 font-lock-constant-face
)
450 ("^\\([^\n\r]*\\)\\s-*=" 1 font-lock-variable-name-face
))
451 '("\\.[rR][eE][gG]\\'")
455 (setq imenu-generic-expression
456 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
457 "Generic mode for MS-Windows Registry files."))
459 (declare-function w32-shell-name
"w32-fns" ())
461 ;;; DOS/Windows BAT files
462 (when (memq 'bat-generic-mode generic-extras-enable-list
)
463 (define-obsolete-function-alias 'bat-generic-mode
'bat-mode
"24.4"))
466 ;; Mailagent is a Unix mail filtering program. Anyone wanna do a
467 ;; generic mode for procmail?
468 (when (memq 'mailagent-rules-generic-mode generic-extras-enable-list
)
470 (define-generic-mode mailagent-rules-generic-mode
472 '("SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
473 '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face
)
474 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face
))
479 (setq imenu-generic-expression
480 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))))
481 "Generic mode for Mailagent rules files."))
483 ;; Solaris/Sys V prototype files
484 (when (memq 'prototype-generic-mode generic-extras-enable-list
)
486 (define-generic-mode prototype-generic-mode
489 '(("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
490 (2 font-lock-constant-face
)
491 (3 font-lock-keyword-face
))
492 ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
493 (1 font-lock-constant-face
)
494 (2 font-lock-keyword-face
)
495 (3 font-lock-variable-name-face
))
496 ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$"
497 (1 font-lock-keyword-face
)
498 (3 font-lock-variable-name-face
))
499 ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
500 (1 font-lock-keyword-face
)
501 (2 font-lock-variable-name-face
)))
504 "Generic mode for Sys V prototype files."))
506 ;; Solaris/Sys V pkginfo files
507 (when (memq 'pkginfo-generic-mode generic-extras-enable-list
)
509 (define-generic-mode pkginfo-generic-mode
512 '(("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
513 (1 font-lock-keyword-face
)
514 (2 font-lock-variable-name-face
)))
517 "Generic mode for Sys V pkginfo files."))
520 ;; Obsolete; defer to js-mode from js.el.
521 (when (memq 'javascript-generic-mode generic-extras-enable-list
)
522 (define-obsolete-function-alias 'javascript-generic-mode
'js-mode
"24.3")
523 (define-obsolete-variable-alias 'javascript-generic-mode-hook
'js-mode-hook
"24.3"))
526 (when (memq 'vrml-generic-mode generic-extras-enable-list
)
528 (define-generic-mode vrml-generic-mode
558 '(("USE\\s-+\\([-A-Za-z0-9_]+\\)"
559 (1 font-lock-constant-face
))
560 ("DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
561 (1 font-lock-type-face
)
562 (2 font-lock-constant-face
))
563 ("^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
564 (1 font-lock-function-name-face
))
565 ("^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
566 (2 font-lock-variable-name-face
)))
571 (setq imenu-generic-expression
572 '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1)
574 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
576 "Generic Mode for VRML files."))
579 (when (memq 'java-manifest-generic-mode generic-extras-enable-list
)
581 (define-generic-mode java-manifest-generic-mode
591 '(("^Name:\\s-+\\([^\n\r]*\\)$"
592 (1 font-lock-variable-name-face
))
593 ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
594 (2 font-lock-constant-face
)))
595 '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
597 "Generic mode for Java Manifest files."))
599 ;; Java properties files
600 (when (memq 'java-properties-generic-mode generic-extras-enable-list
)
602 (define-generic-mode java-properties-generic-mode
606 (let ((java-properties-key
607 "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)")
608 (java-properties-value
610 ;; Property and value can be separated in a number of different ways:
618 (concat "^" java-properties-key elt java-properties-value
"$")
619 '(1 font-lock-constant-face
)
620 '(4 font-lock-variable-name-face
))))
621 ;; These are the separators
622 '(":\\s-*" "\\s-+" "\\s-*=\\s-*"))))
627 (setq imenu-generic-expression
628 '((nil "^\\([^#! \t\n\r=:]+\\)" 1))))))
629 "Generic mode for Java properties files."))
631 ;; C shell alias definitions
632 (when (memq 'alias-generic-mode generic-extras-enable-list
)
634 (define-generic-mode alias-generic-mode
637 '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+"
638 (1 font-lock-variable-name-face
))
639 ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$"
640 (1 font-lock-variable-name-face
)))
645 (setq imenu-generic-expression
646 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2))))))
647 "Generic mode for C Shell alias files."))
650 ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
651 (when (memq 'rc-generic-mode generic-extras-enable-list
)
653 (define-generic-mode rc-generic-mode
708 ;; the choice of what tokens go where is somewhat arbitrary,
709 ;; as is the choice of which value tokens are included, as
710 ;; the choice of face for each token group
713 (list (regexp-opt '("FILEFLAGSMASK"
719 "PRODUCTVERSION") 'symbols
)
720 1 font-lock-type-face
)
721 (list (regexp-opt '("BEGIN" "BLOCK" "END" "VALUE") 'symbols
)
722 1 font-lock-function-name-face
)
723 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face
)
724 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face
)
725 '("^#[ \t]*\\(elif\\|if\\)\\>"
726 ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
727 (1 font-lock-constant-face
)
728 (2 font-lock-variable-name-face nil t
)))
729 '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
730 (1 font-lock-constant-face
)
731 (2 font-lock-variable-name-face nil t
))))
734 "Generic mode for MS-Windows Resource files."))
736 ;; InstallShield RUL files
737 ;; Contributed by Alfred.Correira@Pervasive.Com
738 ;; Bugfixes by "Rolf Sandau" <Rolf.Sandau@marconi.com>
739 (when (memq 'rul-generic-mode generic-extras-enable-list
)
743 ;;; build the regexp strings using regexp-opt
744 (defconst installshield-statement-keyword-list
763 ;; "goto" -- handled elsewhere
777 "Statement keywords used in InstallShield 3 and 5.")
779 (defconst installshield-system-functions-list
799 "ComponentAddItem" ; differs between IS3 and IS5
800 "ComponentCompareSizeRequired" ; IS5 only
802 "ComponentError" ; IS5 only
803 "ComponentFileEnum" ; IS5 only
804 "ComponentFileInfo" ; IS5 only
805 "ComponentFilterLanguage" ; IS5 only
806 "ComponentFilterOS" ; IS5 only
807 "ComponentGetData" ; IS5 only
808 "ComponentGetItemInfo" ; IS3 only
809 "ComponentGetItemSize" ; differs between IS3 and IS5
810 "ComponentIsItemSelected" ; differs between IS3 and IS5
812 "ComponentMoveData" ; IS5 only
813 "ComponentSelectItem" ; differs between IS3 and IS5
814 "ComponentSetData" ; IS5 only
815 "ComponentSetItemInfo" ; IS3 only
816 "ComponentSetTarget" ; IS5 only
817 "ComponentSetupTypeEnum" ; IS5 only
818 "ComponentSetupTypeGetData" ; IS5 only
819 "ComponentSetupTypeSet" ; IS5 only
821 "ComponentValidate" ; IS5 only
822 "CompressAdd" ; IS3 only
823 "CompressDel" ; IS3 only
824 "CompressEnum" ; IS3 only
825 "CompressGet" ; IS3 only
826 "CompressInfo" ; IS3 only
830 "CreateProgramFolder"
831 "DeinstallSetReference" ; IS5 only
857 "FileSetBeginDefine" ; IS3 only
858 "FileSetEndDefine" ; IS3 only
859 "FileSetPerformEz" ; IS3 only
860 "FileSetPerform" ; IS3 only
861 "FileSetReset" ; IS3 only
862 "FileSetRoot" ; IS3 only
901 "LongPathToShortPath"
916 "PlayMMedia" ; IS5 only
925 "RegDBSetDefaultRoot"
934 "SdComponentAdvCheckSpace"
936 "SdComponentAdvUpdateSpace"
939 "SdComponentDialogAdv"
940 "SdComponentDialogEx"
941 "SdComponentDlgCheckSpace"
944 "SdConfirmRegistration"
956 "SdGetUserCompanyInfo"
965 "SdOptionsButtonsInit"
966 "SdPlugInProductName"
969 "SdRegExEnableButton"
974 "SdSetSequentialItems"
976 "SdSetupTypeEx" ; IS5 only
987 "SdUpdateComponentSelection"
993 "SetDisplayEffect" ; IS5 only
995 "SetForegroundWindow"
1008 "StrRemoveLastSlash"
1022 "System functions defined in InstallShield 3 and 5.")
1024 (defconst installshield-system-variables-list
1028 "CORECOMPONENTHANDLING"
1054 "System variables used in InstallShield 3 and 5.")
1056 (defconst installshield-types-list
1075 "Type keywords used in InstallShield 3 and 5.")
1077 ;;; some might want to skip highlighting these to improve performance
1078 (defconst installshield-funarg-constants-list
1108 "COMP_UPDATE_VERSION"
1127 "DLG_INFO_CHECKSELECTION"
1129 "DLG_INFO_USEDECIMAL"
1130 "DLG_MSG_INFORMATION"
1151 "FILE_ATTR_ARCHIVED"
1152 "FILE_ATTR_DIRECTORY"
1155 "FILE_ATTR_READONLY"
1161 "FILE_MODE_BINARYREADONLY"
1183 "HKEY_LOCAL_MACHINE"
1228 "REGDB_APPPATH_DEFAULT"
1231 "REGDB_ERR_CONNECTIONEXISTS"
1232 "REGDB_ERR_CORRUPTEDREGISTRY"
1233 "REGDB_ERR_INITIALIZATION"
1234 "REGDB_ERR_INVALIDHANDLE"
1235 "REGDB_ERR_INVALIDNAME"
1237 "REGDB_STRING_EXPAND"
1238 "REGDB_STRING_MULTI"
1240 "REGDB_UNINSTALL_NAME"
1284 "Function argument constants used in InstallShield 3 and 5."))
1286 (defvar rul-generic-mode-syntax-table nil
1287 "Syntax table to use in `rul-generic-mode' buffers.")
1289 (setq rul-generic-mode-syntax-table
1290 (make-syntax-table c
++-mode-syntax-table
))
1292 (modify-syntax-entry ?
\r "> b" rul-generic-mode-syntax-table
)
1293 (modify-syntax-entry ?
\n "> b" rul-generic-mode-syntax-table
)
1295 (modify-syntax-entry ?
/ ". 124b" rul-generic-mode-syntax-table
)
1296 (modify-syntax-entry ?
* ". 23" rul-generic-mode-syntax-table
)
1298 ;; here manually instead
1299 (defun generic-rul-mode-setup-function ()
1300 (make-local-variable 'parse-sexp-ignore-comments
)
1301 (make-local-variable 'comment-start
)
1302 (make-local-variable 'comment-start-skip
)
1303 (make-local-variable 'comment-end
)
1304 (setq imenu-generic-expression
1305 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1))
1306 parse-sexp-ignore-comments t
1310 ;;; comment-start "//"
1311 ;;; comment-start-skip ""
1313 ;; (set-syntax-table rul-generic-mode-syntax-table)
1314 (setq font-lock-syntax-table rul-generic-mode-syntax-table
))
1316 ;; moved mode-definition behind defun-definition to be warning-free - 15.11.02/RSan
1317 (define-generic-mode rul-generic-mode
1318 ;; Using "/*" and "*/" doesn't seem to be working right
1319 '("//" ("/*" .
"*/" ))
1320 (eval-when-compile installshield-statement-keyword-list
)
1323 ;; preprocessor constructs
1324 '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
1325 1 font-lock-string-face
)
1326 '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
1327 (1 font-lock-constant-face
)
1328 (2 font-lock-variable-name-face nil t
))
1329 ;; indirect string constants
1330 '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face
)
1332 '("[ \t]*\\(\\sw+:\\)" 1 font-lock-constant-face
)
1333 '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
1334 (1 font-lock-keyword-face
)
1335 (2 font-lock-constant-face nil t
))
1337 (list (concat "[^_]"
1338 (regexp-opt installshield-system-variables-list
'symbols
)
1340 1 font-lock-variable-name-face
)
1342 (list (concat "[^_]"
1343 (regexp-opt installshield-system-functions-list
'symbols
)
1345 1 font-lock-function-name-face
)
1347 (list (concat "[^_]"
1348 (regexp-opt installshield-types-list
'symbols
)
1350 1 font-lock-type-face
)
1351 ;; function argument constants
1352 (list (concat "[^_]"
1353 (regexp-opt installshield-funarg-constants-list
'symbols
)
1355 1 font-lock-variable-name-face
))) ; is this face the best choice?
1356 '("\\.[rR][uU][lL]\\'")
1357 '(generic-rul-mode-setup-function)
1358 "Generic mode for InstallShield RUL files.")
1360 (define-skeleton rul-if
1361 "Insert an if statement."
1363 "if(" str
") then" \n
1365 ( "other condition, %s: "
1366 > "elseif(" str
") then" \n
1373 (define-skeleton rul-function
1374 "Insert a function statement."
1376 "function " str
" ()" \n
1377 ( "local variables, %s: "
1384 ;; Additions by ACorreir@pervasive-sw.com (Alfred Correira)
1385 (when (memq 'mailrc-generic-mode generic-extras-enable-list
)
1387 (define-generic-mode mailrc-generic-mode
1398 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1399 (2 font-lock-constant-face
)
1400 (3 font-lock-variable-name-face
))
1401 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
1402 (2 font-lock-constant-face
)
1403 (3 font-lock-variable-name-face
))
1404 ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1405 (2 font-lock-variable-name-face
)))
1408 "Mode for mailrc files."))
1411 (when (memq 'inetd-conf-generic-mode generic-extras-enable-list
)
1413 (define-generic-mode inetd-conf-generic-mode
1422 '(("^\\([-A-Za-z0-9_]+\\)" 1 font-lock-type-face
))
1423 '("/etc/inetd.conf\\'")
1427 (setq imenu-generic-expression
1428 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))))
1431 (when (memq 'etc-services-generic-mode generic-extras-enable-list
)
1433 (define-generic-mode etc-services-generic-mode
1438 '(("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/"
1439 (1 font-lock-type-face
)
1440 (2 font-lock-variable-name-face
)))
1441 '("/etc/services\\'")
1445 (setq imenu-generic-expression
1446 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))))
1448 ;; Password and Group files
1449 (when (memq 'etc-passwd-generic-mode generic-extras-enable-list
)
1451 (define-generic-mode etc-passwd-generic-mode
1452 nil
;; No comment characters
1453 '("root") ;; Only one keyword
1459 ;; User name -- Never blank!
1462 ;; Password, UID and GID
1465 (make-list 3 "\\([^:]+\\)")
1468 ;; GECOS/Name -- might be blank
1471 ;; Home directory and shell
1476 '(1 font-lock-type-face
)
1477 '(5 font-lock-variable-name-face
)
1478 '(6 font-lock-constant-face
)
1479 '(7 font-lock-warning-face
))
1480 '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$"
1481 (1 font-lock-type-face
)
1482 (4 font-lock-variable-name-face
))))
1483 '("/etc/passwd\\'" "/etc/group\\'")
1487 (setq imenu-generic-expression
1488 '((nil "^\\([-A-Za-z0-9_]+\\):" 1))))))))
1491 (when (memq 'etc-fstab-generic-mode generic-extras-enable-list
)
1493 (define-generic-mode etc-fstab-generic-mode
1534 '(("^\\([^# \t]+\\)\\s-+\\([^# \t]+\\)"
1535 (1 font-lock-type-face t
)
1536 (2 font-lock-variable-name-face t
)))
1537 '("/etc/[v]*fstab\\'")
1541 (setq imenu-generic-expression
1542 '((nil "^\\([^# \t]+\\)\\s-+" 1))))))))
1545 (when (memq 'etc-sudoers-generic-mode generic-extras-enable-list
)
1547 (define-generic-mode etc-sudoers-generic-mode
1549 '("User_Alias" "Runas_Alias" "Host_Alias" "Cmnd_Alias"
1550 "NOPASSWD" "PASSWD" "NOEXEC" "EXEC"
1552 '(("\\<\\(root\\|su\\)\\>" 1 font-lock-warning-face
)
1553 ("\\(\\*\\)" 1 font-lock-warning-face
)
1554 ("\\<\\(%[A-Za-z0-9_]+\\)\\>" 1 font-lock-variable-name-face
))
1555 '("/etc/sudoers\\'")
1557 "Generic mode for sudoers configuration files."))
1559 ;; From Jacques Duthen <jacques.duthen@sncf.fr>
1560 (when (memq 'show-tabs-generic-mode generic-extras-enable-list
)
1564 (defconst show-tabs-generic-mode-font-lock-defaults-1
1565 '(;; trailing spaces must come before...
1566 ("[ \t]+$" .
'show-tabs-space
)
1568 ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab
))))
1570 (defconst show-tabs-generic-mode-font-lock-defaults-2
1571 '(;; trailing spaces must come before...
1572 ("[ \t]+$" .
'show-tabs-space
)
1574 ("\t+" .
'show-tabs-tab
))))
1576 (defface show-tabs-tab
1577 '((((class grayscale
) (background light
)) (:background
"DimGray" :weight bold
))
1578 (((class grayscale
) (background dark
)) (:background
"LightGray" :weight bold
))
1579 (((class color
) (min-colors 88)) (:background
"red1"))
1580 (((class color
)) (:background
"red"))
1582 "Font Lock mode face used to highlight TABs."
1584 (define-obsolete-face-alias 'show-tabs-tab-face
'show-tabs-tab
"22.1")
1586 (defface show-tabs-space
1587 '((((class grayscale
) (background light
)) (:background
"DimGray" :weight bold
))
1588 (((class grayscale
) (background dark
)) (:background
"LightGray" :weight bold
))
1589 (((class color
) (min-colors 88)) (:background
"yellow1"))
1590 (((class color
)) (:background
"yellow"))
1592 "Font Lock mode face used to highlight spaces."
1594 (define-obsolete-face-alias 'show-tabs-space-face
'show-tabs-space
"22.1")
1596 (define-generic-mode show-tabs-generic-mode
1597 nil
;; no comment char
1599 (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1
)
1600 nil
;; no auto-mode-alist
1601 ;; '(show-tabs-generic-mode-hook-fun)
1603 "Generic mode to show tabs and trailing spaces."))
1605 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1607 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1609 (when (memq 'named-boot-generic-mode generic-extras-enable-list
)
1611 (define-generic-mode named-boot-generic-mode
1612 ;; List of comment characters
1615 '("cache" "primary" "secondary" "forwarders" "limit" "options"
1616 "directory" "check-names")
1617 ;; List of additional font-lock-expressions
1618 '(("\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" 1 font-lock-constant-face
)
1619 ("^directory\\s-+\\(.*\\)" 1 font-lock-variable-name-face
)
1620 ("^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)"
1621 (2 font-lock-variable-name-face
)
1622 (3 font-lock-constant-face
)))
1623 ;; List of additional automode-alist expressions
1624 '("/etc/named.boot\\'")
1625 ;; List of set up functions to call
1628 (when (memq 'named-database-generic-mode generic-extras-enable-list
)
1630 (define-generic-mode named-database-generic-mode
1631 ;; List of comment characters
1634 '("IN" "NS" "CNAME" "SOA" "PTR" "MX" "A")
1635 ;; List of additional font-lock-expressions
1636 '(("\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" 1 font-lock-constant-face
)
1637 ("^\\([.A-Za-z0-9]+\\)" 1 font-lock-variable-name-face
))
1638 ;; List of additional auto-mode-alist expressions
1640 ;; List of set up functions to call
1643 (defvar named-database-time-string
"%Y%m%d%H"
1644 "Timestring for named serial numbers.")
1646 (defun named-database-print-serial ()
1647 "Print a serial number based on the current date."
1649 (insert (format-time-string named-database-time-string
(current-time)))))
1651 (when (memq 'resolve-conf-generic-mode generic-extras-enable-list
)
1653 (define-generic-mode resolve-conf-generic-mode
1654 ;; List of comment characters
1657 '("nameserver" "domain" "search" "sortlist" "options")
1658 ;; List of additional font-lock-expressions
1660 ;; List of additional auto-mode-alist expressions
1661 '("/etc/resolv[e]?.conf\\'")
1662 ;; List of set up functions to call
1665 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1666 ;; Modes for spice and common electrical engineering circuit netlist formats
1667 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1669 (when (memq 'spice-generic-mode generic-extras-enable-list
)
1671 (define-generic-mode spice-generic-mode
1688 '(("^\\s-*\\([*].*\\)" 1 font-lock-comment-face
)
1689 (" \\(\\$ .*\\)$" 1 font-lock-comment-face
)
1690 ("^\\(\\$ .*\\)$" 1 font-lock-comment-face
)
1691 ("\\([*].*\\)" 1 font-lock-comment-face
)
1692 ("^\\([+]\\)" 1 font-lock-string-face
)
1693 ("^\\s-*\\([.]\\w+\\>\\)" 1 font-lock-keyword-face
)
1694 ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face
)
1695 ("\\('[^']+'\\)" 1 font-lock-string-face
)
1696 ("\\(\"[^\"]+\"\\)" 1 font-lock-string-face
))
1698 "\\.[sS][pP][iI]\\'"
1699 "\\.[sS][pP][iI][cC][eE]\\'"
1700 "\\.[iI][nN][cC]\\'")
1702 'generic-bracket-support
1703 ;; Make keywords case-insensitive
1706 (setq font-lock-defaults
'(generic-font-lock-keywords nil t
)))))
1707 "Generic mode for SPICE circuit netlist files."))
1709 (when (memq 'ibis-generic-mode generic-extras-enable-list
)
1711 (define-generic-mode ibis-generic-mode
1714 '(("[[]\\([^]]*\\)[]]" 1 font-lock-keyword-face
)
1715 ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face
))
1716 '("\\.[iI][bB][sS]\\'")
1717 '(generic-bracket-support)
1718 "Generic mode for IBIS circuit netlist files."))
1720 (when (memq 'astap-generic-mode generic-extras-enable-list
)
1722 (define-generic-mode astap-generic-mode
1737 '(("^\\s-*\\([*].*\\)" 1 font-lock-comment-face
)
1738 (";\\s-*\\([*].*\\)" 1 font-lock-comment-face
)
1739 ("^\\s-*\\([.]\\w+\\>\\)" 1 font-lock-keyword-face
)
1740 ("\\('[^']+'\\)" 1 font-lock-string-face
)
1741 ("\\(\"[^\"]+\"\\)" 1 font-lock-string-face
)
1742 ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face
))
1744 "\\.[aA][sS][xX]\\'"
1745 "\\.[aA][sS][tT][aA][pP]\\'"
1746 "\\.[pP][sS][pP]\\'"
1747 "\\.[dD][eE][cC][kK]\\'"
1748 "\\.[gG][oO][dD][aA][tT][aA]")
1750 'generic-bracket-support
1751 ;; Make keywords case-insensitive
1754 (setq font-lock-defaults
'(generic-font-lock-keywords nil t
)))))
1755 "Generic mode for ASTAP circuit netlist files."))
1757 (when (memq 'etc-modules-conf-generic-mode generic-extras-enable-list
)
1759 (define-generic-mode etc-modules-conf-generic-mode
1760 ;; List of comment characters
1778 "generic_stringfile"
1794 ;; List of additional font-lock-expressions
1796 ;; List of additional automode-alist expressions
1797 '("/etc/modules.conf" "/etc/conf.modules")
1798 ;; List of set up functions to call
1801 (provide 'generic-x
)
1803 ;;; generic-x.el ends here