comparison lisp/font-lock.el @ 4393:f6c39b2d8b62

Make font-lock-{add,remove}-keywords actually work. 2008-01-14 Jerry James <james@xemacs.org> * font-lock.el (font-lock-add-keywords): Adapt to differences in Emacs and XEmacs compiled font-lock lists. * font-lock.el (font-lock-remove-keywords): Ditto. * font-lock.el (font-lock-set-defaults-1): Make changes specified by font-lock-keywords-alist and font-lock-removed-keywords-alist.
author Jerry James <james@xemacs.org>
date Mon, 14 Jan 2008 16:50:32 -0700
parents 36e41bc4a8ab
children 517f6887fbc0
comparison
equal deleted inserted replaced
4392:e8f448f997ac 4393:f6c39b2d8b62
957 ;; for the correct major mode. 957 ;; for the correct major mode.
958 (font-lock-set-defaults) 958 (font-lock-set-defaults)
959 (let ((was-compiled (eq (car font-lock-keywords) t))) 959 (let ((was-compiled (eq (car font-lock-keywords) t)))
960 ;; Bring back the user-level (uncompiled) keywords. 960 ;; Bring back the user-level (uncompiled) keywords.
961 (if was-compiled 961 (if was-compiled
962 (setq font-lock-keywords (cadr font-lock-keywords))) 962 (setq font-lock-keywords (cdr font-lock-keywords)))
963 ;; Now modify or replace them. 963 ;; Now modify or replace them.
964 (if (eq how 'set) 964 (if (eq how 'set)
965 (setq font-lock-keywords keywords) 965 (setq font-lock-keywords keywords)
966 (font-lock-remove-keywords nil keywords) ;to avoid duplicates 966 (font-lock-remove-keywords nil keywords) ;to avoid duplicates
967 (let ((old (if (eq (car-safe font-lock-keywords) t) 967 (let ((old (if (eq (car-safe font-lock-keywords) t)
1067 ;; Otherwise remove it immediately. 1067 ;; Otherwise remove it immediately.
1068 (font-lock-set-defaults) 1068 (font-lock-set-defaults)
1069 (let ((was-compiled (eq (car font-lock-keywords) t))) 1069 (let ((was-compiled (eq (car font-lock-keywords) t)))
1070 ;; Bring back the user-level (uncompiled) keywords. 1070 ;; Bring back the user-level (uncompiled) keywords.
1071 (if was-compiled 1071 (if was-compiled
1072 (setq font-lock-keywords (cadr font-lock-keywords))) 1072 (setq font-lock-keywords (cdr font-lock-keywords)))
1073 1073
1074 ;; Edit them. 1074 ;; Edit them.
1075 (setq font-lock-keywords (copy-sequence font-lock-keywords)) 1075 (setq font-lock-keywords (copy-sequence font-lock-keywords))
1076 (dolist (keyword keywords) 1076 (dolist (keyword keywords)
1077 (setq font-lock-keywords 1077 (setq font-lock-keywords
2029 ;; `font-lock-defaults' themselves, 2029 ;; `font-lock-defaults' themselves,
2030 ;; as in FSF Emacs. 2030 ;; as in FSF Emacs.
2031 font-lock-defaults 2031 font-lock-defaults
2032 (font-lock-find-font-lock-defaults major-mode))) 2032 (font-lock-find-font-lock-defaults major-mode)))
2033 (keywords (font-lock-choose-keywords 2033 (keywords (font-lock-choose-keywords
2034 (nth 0 defaults) font-lock-maximum-decoration))) 2034 (nth 0 defaults) font-lock-maximum-decoration))
2035 (local (cdr (assq major-mode font-lock-keywords-alist)))
2036 (removed-keywords
2037 (cdr-safe (assq major-mode font-lock-removed-keywords-alist))))
2035 2038
2036 ;; Keywords? 2039 ;; Keywords?
2037 (setq font-lock-keywords (if (fboundp keywords) 2040 (setq font-lock-keywords (if (fboundp keywords)
2038 (funcall keywords) 2041 (funcall keywords)
2039 (eval keywords))) 2042 (eval keywords)))
2094 (nth 4 defaults))) 2097 (nth 4 defaults)))
2095 (t 2098 (t
2096 ;; older way: 2099 ;; older way:
2097 ;; defaults not specified at all, so use `beginning-of-defun'. 2100 ;; defaults not specified at all, so use `beginning-of-defun'.
2098 (setq font-lock-beginning-of-syntax-function 2101 (setq font-lock-beginning-of-syntax-function
2099 'beginning-of-defun))))) 2102 'beginning-of-defun)))
2103
2104 ;; Local fontification?
2105 (while local
2106 (font-lock-add-keywords nil (car (car local)) (cdr (car local)))
2107 (setq local (cdr local)))
2108 (when removed-keywords
2109 (font-lock-remove-keywords nil removed-keywords))))
2100 2110
2101 (setq font-lock-cache-position (make-marker)) 2111 (setq font-lock-cache-position (make-marker))
2102 (setq font-lock-defaults-computed t))) 2112 (setq font-lock-defaults-computed t)))
2103 2113
2104 2114