Mercurial > hg > xemacs-beta
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 |