;; Customization Variables
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defgroup generic nil
+ "Define simple major modes with comment and font-lock support."
+ :prefix "generic-"
+ :group 'extensions)
+
(defcustom generic-use-find-file-hook t
"*If non-nil, add a hook to enter default-generic-mode automatically
if the first few lines of a file in fundamental mode start with a hash
(setq
generic-font-lock-expressions
(append
- (list
- (list
- (concat
- "\\(\\<"
- (mapconcat 'identity keywords "\\>\\|\\<")
- "\\>\\)")
- 1 'font-lock-keyword-face))
+ (list (let ((regexp (regexp-opt keywords)))
+ (list (concat "\\<\\(" regexp "\\)\\>")
+ 1
+ 'font-lock-keyword-face)))
generic-font-lock-expressions)))
;; Other font-lock expressions
(and font-lock-expressions
(defun generic-make-keywords-list (keywords-list face &optional prefix suffix)
"Return a regular expression matching the specified keywords.
The regexp is highlighted with FACE."
- ;; Sanity checks
- ;; Don't check here; face may not be defined yet
- ;; (if (not (facep face))
- ;; (error "Face %s is not defined" (princ face)))
(and (not (listp keywords-list))
(error "Keywords argument must be a list of strings"))
- (list
- (concat
- (or prefix "")
- "\\(\\<"
- (mapconcat 'identity keywords-list "\\>\\|\\<")
- "\\>\\)"
- (or suffix "")
- ) 1 face))
+ (list (concat (or prefix "")
+ "\\<\\("
+ ;; Use an optimized regexp.
+ (regexp-opt keywords-list t)
+ "\\)\\>"
+ (or suffix ""))
+ 1
+ face)))
(provide 'generic)
-;;; generic.el ends here
+;;; generic.el ends here
\ No newline at end of file