to use nil for MODE (and place the call in a loop or on a hook) to avoid
subtle problems due to details of the implementation.
-Note that some modes have specialised support for additional patterns, e.g.,
+Note that some modes have specialized support for additional patterns, e.g.,
see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types',
`objc-font-lock-extra-types' and `java-font-lock-extra-types'."
(cond (mode
:version "21.1"
:group 'font-lock)
-(defvar fast-lock-mode nil)
-(defvar lazy-lock-mode nil)
-(defvar jit-lock-mode nil)
+(defvar fast-lock-mode)
+(defvar lazy-lock-mode)
+(defvar jit-lock-mode)
(defun font-lock-turn-on-thing-lock ()
(let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode)))
(not font-lock-keywords-only))))))
(defun font-lock-turn-off-thing-lock ()
- (cond (fast-lock-mode
+ (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
(fast-lock-mode -1))
- (jit-lock-mode
+ ((and (boundp 'jit-lock-mode) jit-lock-mode)
(jit-lock-unregister 'font-lock-fontify-region)
;; Reset local vars to the non-jit-lock case.
(kill-local-variable 'font-lock-fontify-buffer-function))
- (lazy-lock-mode
+ ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
(lazy-lock-mode -1))))
(defun font-lock-after-fontify-buffer ()
- (cond (fast-lock-mode
+ (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
(fast-lock-after-fontify-buffer))
;; Useless now that jit-lock intercepts font-lock-fontify-buffer. -sm
;; (jit-lock-mode
;; (jit-lock-after-fontify-buffer))
- (lazy-lock-mode
+ ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
(lazy-lock-after-fontify-buffer))))
(defun font-lock-after-unfontify-buffer ()
- (cond (fast-lock-mode
+ (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
(fast-lock-after-unfontify-buffer))
;; Useless as well. It's only called when:
;; - turning off font-lock: it does not matter if we leave spurious
;;
;; (jit-lock-mode
;; (jit-lock-after-unfontify-buffer))
- (lazy-lock-mode
+ ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
(lazy-lock-after-unfontify-buffer))))
;;; End of Font Lock Support mode.
(font-lock-after-unfontify-buffer)
(setq font-lock-fontified nil)))
+(defvar font-lock-dont-widen nil
+ "If non-nil, font-lock will work on the non-widened buffer.
+Useful for things like RMAIL and Info where the whole buffer is not
+a very meaningful entity to highlight.")
+
(defun font-lock-default-fontify-region (beg end loudly)
(save-buffer-state
((parse-sexp-lookup-properties font-lock-syntactic-keywords)
(old-syntax-table (syntax-table)))
(unwind-protect
(save-restriction
- (widen)
+ (unless font-lock-dont-widen (widen))
;; Use the fontification syntax table, if any.
(when font-lock-syntax-table
(set-syntax-table font-lock-syntax-table))
(defvar font-lock-extra-managed-props nil
"Additional text properties managed by font-lock.
This is used by `font-lock-default-unfontify-region' to decide
-what properties to clear before refontifying a region.
-Since it is more or less directly passed to `remove-text-properties',
-it should have the shape of a property list (i.e. every other element
-is ignored).")
+what properties to clear before refontifying a region.")
(defun font-lock-default-unfontify-region (beg end)
(save-buffer-state nil
- (remove-text-properties
+ (remove-list-of-text-properties
beg end (append
font-lock-extra-managed-props
(if font-lock-syntactic-keywords
- '(face nil syntax-table nil font-lock-multiline nil)
- '(face nil font-lock-multiline nil))))))
+ '(syntax-table face font-lock-multiline)
+ '(face font-lock-multiline))))))
;; Called when any modification is made to buffer text.
(defun font-lock-after-change-function (beg end old-len)
(font-lock-fontify-region (point) (mark)))
((error quit) (message "Fontifying block...%s" error-data)))))))
-(define-key facemenu-keymap "\M-g" 'font-lock-fontify-block)
+(if (boundp 'facemenu-keymap)
+ (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block))
;;; End of Fontification functions.
\f
(defun font-lock-fontify-keywords-region (start end &optional loudly)
"Fontify according to `font-lock-keywords' between START and END.
-START should be at the beginning of a line."
+START should be at the beginning of a line.
+LOUDLY, if non-nil, allows progress-meter bar."
(unless (eq (car font-lock-keywords) t)
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords t)))
(defcustom c++-font-lock-extra-types
'("\\sw+_t"
- "\\([iof]\\|str\\)+stream\\(buf\\)?" "ios"
+
"string" "rope"
+
"list" "slist"
"deque" "vector" "bit_vector"
+
"set" "multiset"
"map" "multimap"
- "hash\\(_\\(m\\(ap\\|ulti\\(map\\|set\\)\\)\\|set\\)\\)?"
"stack" "queue" "priority_queue"
"type_info"
- "iterator" "const_iterator" "reverse_iterator" "const_reverse_iterator"
- "reference" "const_reference")
+
+ ;; (regexp-opt '("ios_base" "ios" "istream" "ostream" "istringstream" "ifstream" "iostream" "ofstream" "ostringstream" "fstream" "stringstream"))
+ "fstream\\|i\\(?:fstream\\|os\\(?:_base\\|tream\\)?\\|str\\(?:\\(?:ingstr\\)?eam\\)\\)\\|\\(?:o\\(?:f\\|string\\)?\\|string\\)stream"
+
+ ;; (regexp-opt '("hash" "hash_set" "hash_map" "hash_multiset" "hash_multimap"))
+ "hash\\(?:_\\(?:m\\(?:ap\\|ulti\\(?:map\\|set\\)\\)\\|set\\)\\)?"
+
+ ;; (regexp-opt '("pointer" "const_pointer" "reference" "const_reference" "iterator" "const_iterator" "reverse_iterator" "const_reverse_iterator" "size_type" "difference_type" "allocator_type"))
+ "allocator_type\\|const_\\(?:iterator\\|pointer\\|re\\(?:ference\\|verse_iterator\\)\\)\\|difference_type\\|iterator\\|pointer\\|re\\(?:ference\\|verse_iterator\\)\\|size_type"
+ )
"*List of extra types to fontify in C++ mode.
Each list item should be a regexp not containing word-delimiters.
For example, a value of (\"string\") means the word string is treated as a type
"typeid"
;; Branko Cibej <branko.cibej@hermes.si> says this is new.
"export"
+ ;; Copied from C. wsnyder@wsnyder.org says C++ needs it too.
+ "restrict"
;; Mark Mitchell <mmitchell@usa.net> says these are new.
"mutable" "explicit"
;; Alain Picard <ap@abelard.apana.org.au> suggests treating these