X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/39eb0cb563f5287270f3946804456dc766386638..34dc21db6e57ebbad81a196002fcd3cc557f096e:/lisp/font-lock.el diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 70ed73eb5a..82e97c4da6 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -1,11 +1,11 @@ ;;; font-lock.el --- Electric font lock mode -;; Copyright (C) 1992-2013 Free Software Foundation, Inc. +;; Copyright (C) 1992-2014 Free Software Foundation, Inc. ;; Author: Jamie Zawinski ;; Richard Stallman ;; Stefan Monnier -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: languages, faces ;; Package: emacs @@ -458,7 +458,7 @@ This variable is set by major modes via the variable `font-lock-defaults'. Be careful when composing regexps for this list; a poorly written pattern can dramatically slow things down! -A compiled keywords list starts with t. It is produced internal +A compiled keywords list starts with t. It is produced internally by `font-lock-compile-keywords' from a user-level keywords list. Its second element is the user-level keywords list that was compiled. The remaining elements have the same form as @@ -1764,12 +1764,14 @@ If SYNTACTIC-KEYWORDS is non-nil, it means these keywords are used for (funcall keywords) (eval keywords))))) -(defun font-lock-value-in-major-mode (alist) - "Return value in ALIST for `major-mode', or ALIST if it is not an alist. -Structure is ((MAJOR-MODE . VALUE) ...) where MAJOR-MODE may be t." - (if (consp alist) - (cdr (or (assq major-mode alist) (assq t alist))) - alist)) +(defun font-lock-value-in-major-mode (values) + "If VALUES is an list, use `major-mode' as a key and return the `assq' value. +VALUES should then be an alist on the form ((MAJOR-MODE . VALUE) ...) where +MAJOR-MODE may be t. +If VALUES isn't a list, return VALUES." + (if (consp values) + (cdr (or (assq major-mode values) (assq t values))) + values)) (defun font-lock-choose-keywords (keywords level) "Return LEVELth element of KEYWORDS. @@ -2240,131 +2242,6 @@ Used in `cpp-font-lock-keywords'.") for C preprocessor directives. This definition is for the other modes in which C preprocessor directives are used. e.g. `asm-mode' and `ld-script-mode'.") - - -;; Lisp. - -(defconst lisp-font-lock-keywords-1 - (eval-when-compile - `(;; Definitions. - (,(concat "(\\(def\\(" - ;; Function declarations. - "\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|" - "setf\\|subst\\*?\\|un\\*?\\|" - "ine-\\(condition\\|" - "\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|" - "method-combination\\|setf-expander\\|skeleton\\|widget\\|" - "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|" - ;; Variable declarations. - "\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\(?:-local\\)?\\)\\|" - ;; Structure declarations. - "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)" - "\\)\\)\\_>" - ;; Any whitespace and defined object. - "[ \t'\(]*" - "\\(setf[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?") - (1 font-lock-keyword-face) - (9 (cond ((match-beginning 3) font-lock-function-name-face) - ((match-beginning 6) font-lock-variable-name-face) - (t font-lock-type-face)) - nil t)) - ;; Emacs Lisp autoload cookies. Supports the slightly different - ;; forms used by mh-e, calendar, etc. - ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend) - ;; Regexp negated char group. - ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend))) - "Subdued level highlighting for Lisp modes.") - -(defconst lisp-font-lock-keywords-2 - (append lisp-font-lock-keywords-1 - (eval-when-compile - `(;; Control structures. Emacs Lisp forms. - (,(concat - "(" (regexp-opt - '("cond" "if" "while" "while-no-input" "let" "let*" "letrec" - "pcase" "pcase-let" "pcase-let*" "prog" "progn" "progv" - "prog1" "prog2" "prog*" "inline" "lambda" - "save-restriction" "save-excursion" "save-selected-window" - "save-window-excursion" "save-match-data" "save-current-buffer" - "combine-after-change-calls" "unwind-protect" - "condition-case" "condition-case-unless-debug" - "track-mouse" "eval-after-load" "eval-and-compile" - "eval-when-compile" "eval-when" "eval-next-after-load" - "with-case-table" "with-category-table" "with-coding-priority" - "with-current-buffer" "with-demoted-errors" - "with-electric-help" "with-eval-after-load" - "with-local-quit" "with-no-warnings" - "with-output-to-string" "with-output-to-temp-buffer" - "with-selected-window" "with-selected-frame" - "with-silent-modifications" "with-syntax-table" - "with-temp-buffer" "with-temp-file" "with-temp-message" - "with-timeout" "with-timeout-handler") t) - "\\_>") - . 1) - ;; Control structures. Common Lisp forms. - (,(concat - "(" (regexp-opt - '("when" "unless" "case" "ecase" "typecase" "etypecase" - "ccase" "ctypecase" "handler-case" "handler-bind" - "restart-bind" "restart-case" "in-package" - "break" "ignore-errors" - "loop" "do" "do*" "dotimes" "dolist" "the" "locally" - "proclaim" "declaim" "declare" "symbol-macrolet" "letf" - "lexical-let" "lexical-let*" "flet" "labels" "compiler-let" - "destructuring-bind" "macrolet" "tagbody" "block" "go" - "multiple-value-bind" "multiple-value-prog1" - "return" "return-from" - "with-accessors" "with-compilation-unit" - "with-condition-restarts" "with-hash-table-iterator" - "with-input-from-string" "with-open-file" - "with-open-stream" "with-output-to-string" - "with-package-iterator" "with-simple-restart" - "with-slots" "with-standard-io-syntax") t) - "\\_>") - . 1) - ;; Exit/Feature symbols as constants. - (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>" - "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?") - (1 font-lock-keyword-face) - (2 font-lock-constant-face nil t)) - ;; Erroneous structures. - ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|\\(?:user-\\)?error\\|signal\\)\\_>" 1 font-lock-warning-face) - ;; Words inside \\[] tend to be for `substitute-command-keys'. - ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]" - (1 font-lock-constant-face prepend)) - ;; Words inside `' tend to be symbol names. - ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'" - (1 font-lock-constant-face prepend)) - ;; Constant values. - ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face) - ;; ELisp and CLisp `&' keywords as types. - ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face) - ;; ELisp regexp grouping constructs - ((lambda (bound) - (catch 'found - ;; The following loop is needed to continue searching after matches - ;; that do not occur in strings. The associated regexp matches one - ;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'. `\\\\' has been included to - ;; avoid highlighting, for example, `\\(' in `\\\\('. - (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t) - (unless (match-beginning 2) - (let ((face (get-text-property (1- (point)) 'face))) - (when (or (and (listp face) - (memq 'font-lock-string-face face)) - (eq 'font-lock-string-face face)) - (throw 'found t))))))) - (1 'font-lock-regexp-grouping-backslash prepend) - (3 'font-lock-regexp-grouping-construct prepend)) - ;; This is too general -- rms. - ;; A user complained that he has functions whose names start with `do' - ;; and that they get the wrong color. - ;; ;; CL `with-' and `do-' constructs - ;;("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face) - ))) - "Gaudy level highlighting for Lisp modes.") - -(defvar lisp-font-lock-keywords lisp-font-lock-keywords-1 - "Default expressions to highlight in Lisp modes.") (provide 'font-lock)