annotate lisp/font-lock.el @ 95333:19d7a2118511

*** empty log message ***
author Glenn Morris <rgm@gnu.org>
date Tue, 27 May 2008 02:14:59 +0000
parents ee5932bf781d
children 02392717a9b9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1 ;;; font-lock.el --- Electric font lock mode
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
2
58161
5451548f1bd9 (font-lock-fontify-syntactically-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57433
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
4 ;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
5 ;; Free Software Foundation, Inc.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
28874
f2f374d8b0bf Update copyright. Remove Simon Marshall's email
Gerd Moellmann <gerd@gnu.org>
parents: 28192
diff changeset
7 ;; Author: jwz, then rms, then sm
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Maintainer: FSF
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; Keywords: languages, faces
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94157
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94157
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94157
diff changeset
16 ;; (at your option) any later version.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94157
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
28 ;; Font Lock mode is a minor mode that causes your comments to be displayed in
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
29 ;; one face, strings in another, reserved words in another, and so on.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; Comments will be displayed in `font-lock-comment-face'.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; Strings will be displayed in `font-lock-string-face'.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
33 ;; Regexps are used to display selected patterns in other faces.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
35 ;; To make the text you type be fontified, use M-x font-lock-mode RET.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
36 ;; When this minor mode is on, the faces of the current line are updated with
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
37 ;; every insertion or deletion.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
39 ;; To turn Font Lock mode on automatically, add this to your ~/.emacs file:
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
41 ;; (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
43 ;; Or if you want to turn Font Lock mode on in many modes:
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
44 ;;
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
45 ;; (global-font-lock-mode t)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
46 ;;
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
47 ;; Fontification for a particular mode may be available in a number of levels
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
48 ;; of decoration. The higher the level, the more decoration, but the more time
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
49 ;; it takes to fontify. See the variable `font-lock-maximum-decoration', and
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
50 ;; also the variable `font-lock-maximum-size'. Support modes for Font Lock
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
51 ;; mode can be used to speed up Font Lock mode. See `font-lock-support-mode'.
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
52
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
53 ;;; How Font Lock mode fontifies:
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
54
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
55 ;; When Font Lock mode is turned on in a buffer, it (a) fontifies the entire
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
56 ;; buffer and (b) installs one of its fontification functions on one of the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
57 ;; hook variables that are run by Emacs after every buffer change (i.e., an
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
58 ;; insertion or deletion). Fontification means the replacement of `face' text
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
59 ;; properties in a given region; Emacs displays text with these `face' text
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
60 ;; properties appropriately.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
61 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
62 ;; Fontification normally involves syntactic (i.e., strings and comments) and
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
63 ;; regexp (i.e., keywords and everything else) passes. There are actually
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
64 ;; three passes; (a) the syntactic keyword pass, (b) the syntactic pass and (c)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
65 ;; the keyword pass. Confused?
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
66 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
67 ;; The syntactic keyword pass places `syntax-table' text properties in the
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
68 ;; buffer according to the variable `font-lock-syntactic-keywords'. It is
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
69 ;; necessary because Emacs' syntax table is not powerful enough to describe all
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
70 ;; the different syntactic constructs required by the sort of people who decide
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
71 ;; that a single quote can be syntactic or not depending on the time of day.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
72 ;; (What sort of person could decide to overload the meaning of a quote?)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
73 ;; Obviously the syntactic keyword pass must occur before the syntactic pass.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
74 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
75 ;; The syntactic pass places `face' text properties in the buffer according to
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
76 ;; syntactic context, i.e., according to the buffer's syntax table and buffer
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
77 ;; text's `syntax-table' text properties. It involves using a syntax parsing
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
78 ;; function to determine the context of different parts of a region of text. A
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
79 ;; syntax parsing function is necessary because generally strings and/or
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
80 ;; comments can span lines, and so the context of a given region is not
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
81 ;; necessarily apparent from the content of that region. Because the keyword
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
82 ;; pass only works within a given region, it is not generally appropriate for
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
83 ;; syntactic fontification. This is the first fontification pass that makes
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
84 ;; changes visible to the user; it fontifies strings and comments.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
85 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
86 ;; The keyword pass places `face' text properties in the buffer according to
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
87 ;; the variable `font-lock-keywords'. It involves searching for given regexps
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
88 ;; (or calling given search functions) within the given region. This is the
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
89 ;; second fontification pass that makes changes visible to the user; it
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
90 ;; fontifies language reserved words, etc.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
91 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
92 ;; Oh, and the answer is, "Yes, obviously just about everything should be done
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
93 ;; in a single syntactic pass, but the only syntactic parser available
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
94 ;; understands only strings and comments." Perhaps one day someone will write
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
95 ;; some syntactic parsers for common languages and a son-of-font-lock.el could
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
96 ;; use them rather then relying so heavily on the keyword (regexp) pass.
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
97
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
98 ;;; How Font Lock mode supports modes or is supported by modes:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
99
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
100 ;; Modes that support Font Lock mode do so by defining one or more variables
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
101 ;; whose values specify the fontification. Font Lock mode knows of these
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
102 ;; variable names from (a) the buffer local variable `font-lock-defaults', if
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
103 ;; non-nil, or (b) the global variable `font-lock-defaults-alist', if the major
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
104 ;; mode has an entry. (Font Lock mode is set up via (a) where a mode's
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
105 ;; patterns are distributed with the mode's package library, and (b) where a
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
106 ;; mode's patterns are distributed with font-lock.el itself. An example of (a)
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
107 ;; is Pascal mode, an example of (b) is Lisp mode. Normally, the mechanism is
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
108 ;; (a); (b) is used where it is not clear which package library should contain
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
109 ;; the pattern definitions.) Font Lock mode chooses which variable to use for
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
110 ;; fontification based on `font-lock-maximum-decoration'.
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
111 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
112 ;; Font Lock mode fontification behaviour can be modified in a number of ways.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
113 ;; See the below comments and the comments distributed throughout this file.
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
114
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
115 ;;; Constructing patterns:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
116
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
117 ;; See the documentation for the variable `font-lock-keywords'.
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
118 ;;
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
119 ;; Efficient regexps for use as MATCHERs for `font-lock-keywords' and
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
120 ;; `font-lock-syntactic-keywords' can be generated via the function
28087
9ca294cf76c7 (font-lock-keywords): Fix the doc now that regexp-opt-depth is unnecessary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28069
diff changeset
121 ;; `regexp-opt'.
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
122
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
123 ;;; Adding patterns for modes that already support Font Lock:
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
124
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
125 ;; Though Font Lock highlighting patterns already exist for many modes, it's
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
126 ;; likely there's something that you want fontified that currently isn't, even
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
127 ;; at the maximum fontification level. You can add highlighting patterns via
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
128 ;; `font-lock-add-keywords'. For example, say in some C
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
129 ;; header file you #define the token `and' to expand to `&&', etc., to make
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
130 ;; your C code almost readable. In your ~/.emacs there could be:
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
131 ;;
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
132 ;; (font-lock-add-keywords 'c-mode '("\\<\\(and\\|or\\|not\\)\\>"))
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
133 ;;
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
134 ;; Some modes provide specific ways to modify patterns based on the values of
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
135 ;; other variables. For example, additional C types can be specified via the
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
136 ;; variable `c-font-lock-extra-types'.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
137
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
138 ;;; Adding patterns for modes that do not support Font Lock:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
139
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
140 ;; Not all modes support Font Lock mode. If you (as a user of the mode) add
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
141 ;; patterns for a new mode, you must define in your ~/.emacs a variable or
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
142 ;; variables that specify regexp fontification. Then, you should indicate to
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
143 ;; Font Lock mode, via the mode hook setting `font-lock-defaults', exactly what
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
144 ;; support is required. For example, say Foo mode should have the following
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
145 ;; regexps fontified case-sensitively, and comments and strings should not be
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
146 ;; fontified automagically. In your ~/.emacs there could be:
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
147 ;;
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
148 ;; (defvar foo-font-lock-keywords
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
149 ;; '(("\\<\\(one\\|two\\|three\\)\\>" . font-lock-keyword-face)
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
150 ;; ("\\<\\(four\\|five\\|six\\)\\>" . font-lock-type-face))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
151 ;; "Default expressions to highlight in Foo mode.")
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
152 ;;
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
153 ;; (add-hook 'foo-mode-hook
45712
3d25fe242d2a (font-lock-set-defaults-1): Variable alist is now set in
Colin Walters <walters@gnu.org>
parents: 45445
diff changeset
154 ;; (lambda ()
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
155 ;; (set (make-local-variable 'font-lock-defaults)
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
156 ;; '(foo-font-lock-keywords t))))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
157
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
158 ;;; Adding Font Lock support for modes:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
159
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
160 ;; Of course, it would be better that the mode already supports Font Lock mode.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
161 ;; The package author would do something similar to above. The mode must
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
162 ;; define at the top-level a variable or variables that specify regexp
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
163 ;; fontification. Then, the mode command should indicate to Font Lock mode,
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
164 ;; via `font-lock-defaults', exactly what support is required. For example,
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
165 ;; say Bar mode should have the following regexps fontified case-insensitively,
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
166 ;; and comments and strings should be fontified automagically. In bar.el there
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
167 ;; could be:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
168 ;;
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
169 ;; (defvar bar-font-lock-keywords
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
170 ;; '(("\\<\\(uno\\|due\\|tre\\)\\>" . font-lock-keyword-face)
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
171 ;; ("\\<\\(quattro\\|cinque\\|sei\\)\\>" . font-lock-type-face))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
172 ;; "Default expressions to highlight in Bar mode.")
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
173 ;;
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
174 ;; and within `bar-mode' there could be:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
175 ;;
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
176 ;; (set (make-local-variable 'font-lock-defaults)
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
177 ;; '(bar-font-lock-keywords nil t))
15653
1653d3208c05 1. Use new font-lock-comment-start-regexp for matching a comment---it can be faster than comment-start-skip.
Simon Marshall <simon@gnu.org>
parents: 15500
diff changeset
178
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
179 ;; What is fontification for? You might say, "It's to make my code look nice."
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
180 ;; I think it should be for adding information in the form of cues. These cues
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
181 ;; should provide you with enough information to both (a) distinguish between
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
182 ;; different items, and (b) identify the item meanings, without having to read
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
183 ;; the items and think about it. Therefore, fontification allows you to think
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
184 ;; less about, say, the structure of code, and more about, say, why the code
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
185 ;; doesn't work. Or maybe it allows you to think less and drift off to sleep.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
186 ;;
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
187 ;; So, here are my opinions/advice/guidelines:
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
188 ;;
13701
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
189 ;; - Highlight conceptual objects, such as function and variable names, and
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
190 ;; different objects types differently, i.e., (a) and (b) above, highlight
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
191 ;; function names differently to variable names.
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
192 ;; - Keep the faces distinct from each other as far as possible.
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
193 ;; i.e., (a) above.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
194 ;; - Use the same face for the same conceptual object, across all modes.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
195 ;; i.e., (b) above, all modes that have items that can be thought of as, say,
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
196 ;; keywords, should be highlighted with the same face, etc.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
197 ;; - Make the face attributes fit the concept as far as possible.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
198 ;; i.e., function names might be a bold colour such as blue, comments might
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
199 ;; be a bright colour such as red, character strings might be brown, because,
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
200 ;; err, strings are brown (that was not the reason, please believe me).
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
201 ;; - Don't use a non-nil OVERRIDE unless you have a good reason.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
202 ;; Only use OVERRIDE for special things that are easy to define, such as the
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
203 ;; way `...' quotes are treated in strings and comments in Emacs Lisp mode.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
204 ;; Don't use it to, say, highlight keywords in commented out code or strings.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
205 ;; - Err, that's it.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
206
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
207 ;;; Code:
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
208
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
209 (require 'syntax)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
210
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
211 ;; Define core `font-lock' group.
53710
31ae933487b2 (font-lock): Add jit-lock as explicit group member.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53405
diff changeset
212 (defgroup font-lock '((jit-lock custom-group))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
213 "Font Lock mode text highlighting package."
67678
bce97b32175b (font-lock): Add tags to the links in the defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents: 67571
diff changeset
214 :link '(custom-manual :tag "Emacs Manual" "(emacs)Font Lock")
bce97b32175b (font-lock): Add tags to the links in the defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents: 67571
diff changeset
215 :link '(custom-manual :tag "Elisp Manual" "(elisp)Font Lock Mode")
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
216 :group 'faces)
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
217
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
218 (defgroup font-lock-faces nil
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
219 "Faces for highlighting text."
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
220 :prefix "font-lock-"
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
221 :group 'font-lock)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
222
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
223 (defgroup font-lock-extra-types nil
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
224 "Extra mode-specific type names for highlighting declarations."
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
225 :group 'font-lock)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
226
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
227 ;; User variables.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
228
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
229 (defcustom font-lock-maximum-size 256000
18332
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
230 "*Maximum size of a buffer for buffer fontification.
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
231 Only buffers less than this can be fontified when Font Lock mode is turned on.
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
232 If nil, means size is irrelevant.
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
233 If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE),
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
234 where MAJOR-MODE is a symbol or t (meaning the default). For example:
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
235 ((c-mode . 256000) (c++-mode . 256000) (rmail-mode . 1048576))
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
236 means that the maximum size is 250K for buffers in C or C++ modes, one megabyte
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
237 for buffers in Rmail mode, and size is irrelevant otherwise."
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
238 :type '(choice (const :tag "none" nil)
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
239 (integer :tag "size")
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
240 (repeat :menu-tag "mode specific" :tag "mode specific"
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
241 :value ((t . nil))
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
242 (cons :tag "Instance"
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
243 (radio :tag "Mode"
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
244 (const :tag "all" t)
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
245 (symbol :tag "name"))
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
246 (radio :tag "Size"
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
247 (const :tag "none" nil)
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
248 (integer :tag "size")))))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
249 :group 'font-lock)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
251 (defcustom font-lock-maximum-decoration t
14780
1d10e4a2fb51 Treat font-lock-keywords of (t) the same as nil.
Simon Marshall <simon@gnu.org>
parents: 14778
diff changeset
252 "*Maximum decoration level for fontification.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
253 If nil, use the default decoration (typically the minimum available).
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
254 If t, use the maximum decoration available.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
255 If a number, use that level of decoration (or if not available the maximum).
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
256 If a list, each element should be a cons pair of the form (MAJOR-MODE . LEVEL),
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
257 where MAJOR-MODE is a symbol or t (meaning the default). For example:
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
258 ((c-mode . t) (c++-mode . 2) (t . 1))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
259 means use the maximum decoration available for buffers in C mode, level 2
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
260 decoration for buffers in C++ mode, and level 1 decoration otherwise."
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
261 :type '(choice (const :tag "default" nil)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
262 (const :tag "maximum" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
263 (integer :tag "level" 1)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
264 (repeat :menu-tag "mode specific" :tag "mode specific"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
265 :value ((t . t))
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
266 (cons :tag "Instance"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
267 (radio :tag "Mode"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
268 (const :tag "all" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
269 (symbol :tag "name"))
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
270 (radio :tag "Decoration"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
271 (const :tag "default" nil)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
272 (const :tag "maximum" t)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
273 (integer :tag "level" 1)))))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
274 :group 'font-lock)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
275
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
276 (defcustom font-lock-verbose 0
18332
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
277 "*If non-nil, means show status messages for buffer fontification.
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
278 If a number, only buffers greater than this size have fontification messages."
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
279 :type '(choice (const :tag "never" nil)
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
280 (other :tag "always" t)
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
281 (integer :tag "size"))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
282 :group 'font-lock)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
283
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
284
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
285 ;; Originally these variable values were face names such as `bold' etc.
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
286 ;; Now we create our own faces, but we keep these variables for compatibility
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
287 ;; and they give users another mechanism for changing face appearance.
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
288 ;; We now allow a FACENAME in `font-lock-keywords' to be any expression that
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
289 ;; returns a face. So the easiest thing is to continue using these variables,
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
290 ;; rather than sometimes evaling FACENAME and sometimes not. sm.
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
291 (defvar font-lock-comment-face 'font-lock-comment-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
292 "Face name to use for comments.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
293
61771
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
294 (defvar font-lock-comment-delimiter-face 'font-lock-comment-delimiter-face
61813
13d42889189f (font-lock-comment-delimiter-face): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 61771
diff changeset
295 "Face name to use for comment delimiters.")
61771
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
296
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
297 (defvar font-lock-string-face 'font-lock-string-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
298 "Face name to use for strings.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
299
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
300 (defvar font-lock-doc-face 'font-lock-doc-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
301 "Face name to use for documentation.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
302
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
303 (defvar font-lock-keyword-face 'font-lock-keyword-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
304 "Face name to use for keywords.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
305
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
306 (defvar font-lock-builtin-face 'font-lock-builtin-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
307 "Face name to use for builtins.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
308
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
309 (defvar font-lock-function-name-face 'font-lock-function-name-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
310 "Face name to use for function names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
311
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
312 (defvar font-lock-variable-name-face 'font-lock-variable-name-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
313 "Face name to use for variable names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
314
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
315 (defvar font-lock-type-face 'font-lock-type-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
316 "Face name to use for type and class names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
317
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
318 (defvar font-lock-constant-face 'font-lock-constant-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
319 "Face name to use for constant and label names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
320
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
321 (defvar font-lock-warning-face 'font-lock-warning-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
322 "Face name to use for things that should stand out.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
323
62078
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
324 (defvar font-lock-negation-char-face 'font-lock-negation-char-face
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
325 "Face name to use for easy to overlook negation.
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
326 This can be an \"!\" or the \"n\" in \"ifndef\".")
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
327
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
328 (defvar font-lock-preprocessor-face 'font-lock-preprocessor-face
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
329 "Face name to use for preprocessor directives.")
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
330
49615
0ddc2f13992e (font-lock-reference-face): Add obsolescence declaration and remove redundant
Juanma Barranquero <lekktu@gmail.com>
parents: 49569
diff changeset
331 (defvar font-lock-reference-face 'font-lock-constant-face)
94157
f4ec8461e0fc (font-lock-reference-face): Add WHEN to obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 93904
diff changeset
332 (make-obsolete-variable 'font-lock-reference-face 'font-lock-constant-face "20.3")
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
333
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
334 ;; Fontification variables:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
335
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defvar font-lock-keywords nil
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
337 "A list of the keywords to highlight.
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
338 There are two kinds of values: user-level, and compiled.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
339
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
340 A user-level keywords list is what a major mode or the user would
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
341 set up. Normally the list would come from `font-lock-defaults'.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
342 through selection of a fontification level and evaluation of any
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
343 contained expressions. You can also alter it by calling
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
344 `font-lock-add-keywords' or `font-lock-remove-keywords' with MODE = nil.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
345
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
346 Each element in a user-level keywords list should have one of these forms:
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
347
11515
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
348 MATCHER
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
349 (MATCHER . SUBEXP)
11515
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
350 (MATCHER . FACENAME)
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
351 (MATCHER . HIGHLIGHT)
76000
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
352 (MATCHER HIGHLIGHT ...)
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
353 (eval . FORM)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
355 where MATCHER can be either the regexp to search for, or the function name to
56553
a474fcb6d318 (font-lock-keywords): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56447
diff changeset
356 call to make the search (called with one argument, the limit of the search;
78492
7c8949dbfa0d Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
357 it should return non-nil, move point, and set `match-data' appropriately if
56553
a474fcb6d318 (font-lock-keywords): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56447
diff changeset
358 it succeeds; like `re-search-forward' would).
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
359 MATCHER regexps can be generated via the function `regexp-opt'.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
360
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
361 FORM is an expression, whose value should be a keyword element, evaluated when
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
362 the keyword is (first) used in a buffer. This feature can be used to provide a
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
363 keyword that can only be generated when Font Lock mode is actually turned on.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
364
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
365 HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
366
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
367 For highlighting single items, for example each instance of the word \"foo\",
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
368 typically only MATCH-HIGHLIGHT is required.
13982
baba81b17362 (font-lock-keywords): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13701
diff changeset
369 However, if an item or (typically) items are to be highlighted following the
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
370 instance of another item (the anchor), for example each instance of the
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
371 word \"bar\" following the word \"anchor\" then MATCH-ANCHORED may be required.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
372
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
373 MATCH-HIGHLIGHT should be of the form:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
374
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
375 (SUBEXP FACENAME [OVERRIDE [LAXMATCH]])
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
376
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
377 SUBEXP is the number of the subexpression of MATCHER to be highlighted.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
378
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
379 FACENAME is an expression whose value is the face name to use.
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
380 Instead of a face, FACENAME can evaluate to a property list
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
381 of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
382 in which case all the listed text-properties will be set rather than
61392
43b4f51d1049 (font-lock-keywords): Docstring fixes.
Lute Kamstra <lute@gnu.org>
parents: 61039
diff changeset
383 just FACE. In such a case, you will most likely want to put those
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
384 properties in `font-lock-extra-managed-props' or to override
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
385 `font-lock-unfontify-region-function'.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
387 OVERRIDE and LAXMATCH are flags. If OVERRIDE is t, existing fontification can
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
388 be overwritten. If `keep', only parts not already fontified are highlighted.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
389 If `prepend' or `append', existing fontification is merged with the new, in
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
390 which the new or existing fontification, respectively, takes precedence.
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
391 If LAXMATCH is non-nil, that means don't signal an error if there is
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
392 no match for SUBEXP in MATCHER.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
394 For example, an element of the form highlights (if not already highlighted):
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
395
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
396 \"\\\\\\=<foo\\\\\\=>\" discrete occurrences of \"foo\" in the value of the
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
397 variable `font-lock-keyword-face'.
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
398 (\"fu\\\\(bar\\\\)\" . 1) substring \"bar\" within all occurrences of \"fubar\" in
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
399 the value of `font-lock-keyword-face'.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
400 (\"fubar\" . fubar-face) Occurrences of \"fubar\" in the value of `fubar-face'.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
401 (\"foo\\\\|bar\" 0 foo-bar-face t)
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
402 occurrences of either \"foo\" or \"bar\" in the value
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
403 of `foo-bar-face', even if already highlighted.
20190
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
404 (fubar-match 1 fubar-face)
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
405 the first subexpression within all occurrences of
20190
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
406 whatever the function `fubar-match' finds and matches
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
407 in the value of `fubar-face'.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
408
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
409 MATCH-ANCHORED should be of the form:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
410
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
411 (MATCHER PRE-MATCH-FORM POST-MATCH-FORM MATCH-HIGHLIGHT ...)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
412
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
413 where MATCHER is a regexp to search for or the function name to call to make
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
414 the search, as for MATCH-HIGHLIGHT above, but with one exception; see below.
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
415 PRE-MATCH-FORM and POST-MATCH-FORM are evaluated before the first, and after
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
416 the last, instance MATCH-ANCHORED's MATCHER is used. Therefore they can be
63506
868fbdaab045 (font-lock-keywords): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 63105
diff changeset
417 used to initialize before, and cleanup after, MATCHER is used. Typically,
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
418 PRE-MATCH-FORM is used to move to some position relative to the original
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
419 MATCHER, before starting with MATCH-ANCHORED's MATCHER. POST-MATCH-FORM might
61392
43b4f51d1049 (font-lock-keywords): Docstring fixes.
Lute Kamstra <lute@gnu.org>
parents: 61039
diff changeset
420 be used to move back, before resuming with MATCH-ANCHORED's parent's MATCHER.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
421
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
422 For example, an element of the form highlights (if not already highlighted):
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
423
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
424 (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
425
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
426 discrete occurrences of \"anchor\" in the value of `anchor-face', and subsequent
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
427 discrete occurrences of \"item\" (on the same line) in the value of `item-face'.
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
428 (Here PRE-MATCH-FORM and POST-MATCH-FORM are nil. Therefore \"item\" is
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
429 initially searched for starting from the end of the match of \"anchor\", and
61392
43b4f51d1049 (font-lock-keywords): Docstring fixes.
Lute Kamstra <lute@gnu.org>
parents: 61039
diff changeset
430 searching for subsequent instances of \"anchor\" resumes from where searching
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
431 for \"item\" concluded.)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
432
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
433 The above-mentioned exception is as follows. The limit of the MATCHER search
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
434 defaults to the end of the line after PRE-MATCH-FORM is evaluated.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
435 However, if PRE-MATCH-FORM returns a position greater than the position after
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
436 PRE-MATCH-FORM is evaluated, that position is used as the limit of the search.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
437 It is generally a bad idea to return a position greater than the end of the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
438 line, i.e., cause the MATCHER search to span lines.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
439
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
440 These regular expressions can match text which spans lines, although
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
441 it is better to avoid it if possible since updating them while editing
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
442 text is slower, and it is not guaranteed to be always correct when using
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
443 support modes like jit-lock or lazy-lock.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
444
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
445 This variable is set by major modes via the variable `font-lock-defaults'.
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
446 Be careful when composing regexps for this list; a poorly written pattern can
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
447 dramatically slow things down!
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
448
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
449 A compiled keywords list starts with t. It is produced internal
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
450 by `font-lock-compile-keywords' from a user-level keywords list.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
451 Its second element is the user-level keywords list that was
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
452 compiled. The remaining elements have the same form as
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
453 user-level keywords, but normally their values have been
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
454 optimized.")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
456 (defvar font-lock-keywords-alist nil
62208
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
457 "Alist of additional `font-lock-keywords' elements for major modes.
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
458
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
459 Each element has the form (MODE KEYWORDS . HOW).
62208
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
460 `font-lock-set-defaults' adds the elements in the list KEYWORDS to
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
461 `font-lock-keywords' when Font Lock is turned on in major mode MODE.
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
462
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
463 If HOW is nil, KEYWORDS are added at the beginning of
62208
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
464 `font-lock-keywords'. If it is `set', they are used to replace the
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
465 value of `font-lock-keywords'. If HOW is any other non-nil value,
62208
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
466 they are added at the end.
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
467
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
468 This is normally set via `font-lock-add-keywords' and
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
469 `font-lock-remove-keywords'.")
77365
bc5c78f77063 (font-lock-keywords-alist): Mark as risky.
Richard M. Stallman <rms@gnu.org>
parents: 76961
diff changeset
470 (put 'font-lock-keywords-alist 'risky-local-variable t)
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
471
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
472 (defvar font-lock-removed-keywords-alist nil
62208
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
473 "Alist of `font-lock-keywords' elements to be removed for major modes.
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
474
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
475 Each element has the form (MODE . KEYWORDS). `font-lock-set-defaults'
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
476 removes the elements in the list KEYWORDS from `font-lock-keywords'
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
477 when Font Lock is turned on in major mode MODE.
3eeb147cd9e0 (font-lock-keywords-alist, font-lock-removed-keywords-alist): Clarify docstrings.
Lute Kamstra <lute@gnu.org>
parents: 62078
diff changeset
478
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
479 This is normally set via `font-lock-add-keywords' and
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
480 `font-lock-remove-keywords'.")
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
481
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
482 (defvar font-lock-keywords-only nil
12813
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
483 "*Non-nil means Font Lock should not fontify comments or strings.
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
484 This is normally set via `font-lock-defaults'.")
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
485
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (defvar font-lock-keywords-case-fold-search nil
12813
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
487 "*Non-nil means the patterns in `font-lock-keywords' are case-insensitive.
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
488 This is normally set via `font-lock-defaults'.")
37227
e7d998ab9275 made font-lock-keywords-case-fold-search buffer-local
Sam Steingold <sds@gnu.org>
parents: 36462
diff changeset
489 (make-variable-buffer-local 'font-lock-keywords-case-fold-search)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490
32483
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
491 (defvar font-lock-syntactically-fontified 0
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
492 "Point up to which `font-lock-syntactic-keywords' has been applied.
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
493 If nil, this is ignored, in which case the syntactic fontification may
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
494 sometimes be slightly incorrect.")
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
495 (make-variable-buffer-local 'font-lock-syntactically-fontified)
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
496
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
497 (defvar font-lock-syntactic-face-function
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
498 (lambda (state)
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
499 (if (nth 3 state) font-lock-string-face font-lock-comment-face))
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
500 "Function to determine which face to use when fontifying syntactically.
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
501 The function is called with a single parameter (the state as returned by
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
502 `parse-partial-sexp' at the beginning of the region to highlight) and
61826
f83763576d20 (font-lock-syntactic-face-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61813
diff changeset
503 should return a face. This is normally set via `font-lock-defaults'.")
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
504
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
505 (defvar font-lock-syntactic-keywords nil
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
506 "A list of the syntactic keywords to put syntax properties on.
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
507 The value can be the list itself, or the name of a function or variable
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
508 whose value is the list.
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
509
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
510 See `font-lock-keywords' for a description of the form of this list;
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
511 only the differences are stated here. MATCH-HIGHLIGHT should be of the form:
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
512
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
513 (SUBEXP SYNTAX OVERRIDE LAXMATCH)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
514
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
515 where SYNTAX can be a string (as taken by `modify-syntax-entry'), a syntax
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
516 table, a cons cell (as returned by `string-to-syntax') or an expression whose
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
517 value is such a form. OVERRIDE cannot be `prepend' or `append'.
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
518
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
519 Here are two examples of elements of `font-lock-syntactic-keywords'
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
520 and what they do:
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
521
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
522 (\"\\\\$\\\\(#\\\\)\" 1 \".\")
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
523
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
524 gives a hash character punctuation syntax (\".\") when following a
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
525 dollar-sign character. Hash characters in other contexts will still
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
526 follow whatever the syntax table says about the hash character.
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
527
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
528 (\"\\\\('\\\\).\\\\('\\\\)\"
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
529 (1 \"\\\"\")
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
530 (2 \"\\\"\"))
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
531
65960
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
532 gives a pair single-quotes, which surround a single character, a SYNTAX of
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
533 \"\\\"\" (meaning string quote syntax). Single-quote characters in other
59561c56ebba (font-lock-syntactic-keywords, font-lock-keywords): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 65618
diff changeset
534 contexts will not be affected.
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
535
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
536 This is normally set via `font-lock-defaults'.")
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
537
8457
c0492d7043b2 (font-lock-syntax-table): New syntax table.
Richard M. Stallman <rms@gnu.org>
parents: 7915
diff changeset
538 (defvar font-lock-syntax-table nil
10879
73ce8261c2ce Added font-lock-maximum-decoration; use it to set lisp-font-lock-keywords, and
Simon Marshall <simon@gnu.org>
parents: 10545
diff changeset
539 "Non-nil means use this syntax table for fontifying.
12813
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
540 If this is nil, the major mode's syntax table is used.
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
541 This is normally set via `font-lock-defaults'.")
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
542
c9ed95ec05b6 Functionality for font-lock-beginning-of-syntax-function to be used by font-lock-fontify-region when calculating the cache state. Also wrap value of buffer-file-truename to guard against clash detection. Also add scheme-font-lock-keywords.
Simon Marshall <simon@gnu.org>
parents: 12626
diff changeset
543 (defvar font-lock-beginning-of-syntax-function nil
45774
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
544 "*Non-nil means use this function to move back outside all constructs.
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
545 When called with no args it should move point backward to a place which
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
546 is not in a string or comment and not within any bracket-pairs (or else,
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
547 a place such that any bracket-pairs outside it can be ignored for Emacs
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
548 syntax analysis and fontification).
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
549
62638
98478012afa8 (font-lock-beginning-of-syntax-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 62549
diff changeset
550 If this is nil, Font Lock uses `syntax-begin-function' to move back
98478012afa8 (font-lock-beginning-of-syntax-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 62549
diff changeset
551 outside of any comment, string, or sexp. This variable is semi-obsolete;
98478012afa8 (font-lock-beginning-of-syntax-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 62549
diff changeset
552 we recommend setting `syntax-begin-function' instead.
98478012afa8 (font-lock-beginning-of-syntax-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 62549
diff changeset
553
98478012afa8 (font-lock-beginning-of-syntax-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 62549
diff changeset
554 This is normally set via `font-lock-defaults'.")
8457
c0492d7043b2 (font-lock-syntax-table): New syntax table.
Richard M. Stallman <rms@gnu.org>
parents: 7915
diff changeset
555
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
556 (defvar font-lock-mark-block-function nil
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
557 "*Non-nil means use this function to mark a block of text.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
558 When called with no args it should leave point at the beginning of any
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
559 enclosing textual block and mark at the end.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
560 This is normally set via `font-lock-defaults'.")
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
561
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
562 (defvar font-lock-fontify-buffer-function 'font-lock-default-fontify-buffer
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
563 "Function to use for fontifying the buffer.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
564 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
565
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
566 (defvar font-lock-unfontify-buffer-function 'font-lock-default-unfontify-buffer
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
567 "Function to use for unfontifying the buffer.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
568 This is used when turning off Font Lock mode.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
569 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
570
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
571 (defvar font-lock-fontify-region-function 'font-lock-default-fontify-region
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
572 "Function to use for fontifying a region.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
573 It should take two args, the beginning and end of the region, and an optional
61860
330b0fc9b83d (font-lock-fontify-region-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61826
diff changeset
574 third arg VERBOSE. If VERBOSE is non-nil, the function should print status
330b0fc9b83d (font-lock-fontify-region-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61826
diff changeset
575 messages. This is normally set via `font-lock-defaults'.")
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
576
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
577 (defvar font-lock-unfontify-region-function 'font-lock-default-unfontify-region
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
578 "Function to use for unfontifying a region.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
579 It should take two args, the beginning and end of the region.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
580 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
581
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
582 (defvar font-lock-inhibit-thing-lock nil
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
583 "List of Font Lock mode related modes that should not be turned on.
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
584 Currently, valid mode names are `fast-lock-mode', `jit-lock-mode' and
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
585 `lazy-lock-mode'. This is normally set via `font-lock-defaults'.")
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
586
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
587 (defvar font-lock-multiline nil
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
588 "Whether font-lock should cater to multiline keywords.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
589 If nil, don't try to handle multiline patterns.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
590 If t, always handle multiline patterns.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
591 If `undecided', don't try to handle multiline patterns until you see one.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
592 Major/minor modes can set this variable if they know which option applies.")
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
593
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
594 (defvar font-lock-fontified nil) ; Whether we have fontified the buffer.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
595
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
596 ;; Font Lock mode.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
597
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
598 (eval-when-compile
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
599 ;;
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
600 ;; We don't do this at the top-level as we only use non-autoloaded macros.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
601 (require 'cl)
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
602 ;;
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
603 ;; Borrowed from lazy-lock.el.
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
604 ;; We use this to preserve or protect things when modifying text properties.
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
605 (defmacro save-buffer-state (varlist &rest body)
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
606 "Bind variables according to VARLIST and eval BODY restoring buffer state."
63840
0e0d1ff0b641 (save-buffer-state): Use `declare'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63506
diff changeset
607 (declare (indent 1) (debug let))
44229
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
608 (let ((modified (make-symbol "modified")))
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
609 `(let* ,(append varlist
44258
fc8fbdc5ca4c (save-buffer-state): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 44229
diff changeset
610 `((,modified (buffer-modified-p))
44229
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
611 (buffer-undo-list t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
612 (inhibit-read-only t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
613 (inhibit-point-motion-hooks t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
614 (inhibit-modification-hooks t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
615 deactivate-mark
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
616 buffer-file-name
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
617 buffer-file-truename))
87419
b23fbf3b100b (save-buffer-state): Make sure the state of the
Andreas Schwab <schwab@suse.de>
parents: 87108
diff changeset
618 (unwind-protect
b23fbf3b100b (save-buffer-state): Make sure the state of the
Andreas Schwab <schwab@suse.de>
parents: 87108
diff changeset
619 (progn
b23fbf3b100b (save-buffer-state): Make sure the state of the
Andreas Schwab <schwab@suse.de>
parents: 87108
diff changeset
620 ,@body)
b23fbf3b100b (save-buffer-state): Make sure the state of the
Andreas Schwab <schwab@suse.de>
parents: 87108
diff changeset
621 (unless ,modified
b23fbf3b100b (save-buffer-state): Make sure the state of the
Andreas Schwab <schwab@suse.de>
parents: 87108
diff changeset
622 (restore-buffer-modified-p nil))))))
19846
f5f2feb0bd0f Try to comment where font-lock-keyword order is important.
Simon Marshall <simon@gnu.org>
parents: 19788
diff changeset
623 ;;
f5f2feb0bd0f Try to comment where font-lock-keyword order is important.
Simon Marshall <simon@gnu.org>
parents: 19788
diff changeset
624 ;; Shut up the byte compiler.
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
625 (defvar font-lock-face-attributes)) ; Obsolete but respected if set.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
626
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
627 (defun font-lock-mode-internal (arg)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
628 ;; Turn on Font Lock mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
629 (when arg
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
630 (add-hook 'after-change-functions 'font-lock-after-change-function t t)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
631 (font-lock-set-defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
632 (font-lock-turn-on-thing-lock)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
633 ;; Fontify the buffer if we have to.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
634 (let ((max-size (font-lock-value-in-major-mode font-lock-maximum-size)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
635 (cond (font-lock-fontified
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
636 nil)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
637 ((or (null max-size) (> max-size (buffer-size)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
638 (font-lock-fontify-buffer))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
639 (font-lock-verbose
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
640 (message "Fontifying %s...buffer size greater than font-lock-maximum-size"
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
641 (buffer-name))))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
642 ;; Turn off Font Lock mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
643 (unless font-lock-mode
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
644 (remove-hook 'after-change-functions 'font-lock-after-change-function t)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
645 (font-lock-unfontify-buffer)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
646 (font-lock-turn-off-thing-lock)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
647
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
648 (defun font-lock-add-keywords (mode keywords &optional how)
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
649 "Add highlighting KEYWORDS for MODE.
61826
f83763576d20 (font-lock-syntactic-face-function): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61813
diff changeset
650
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
651 MODE should be a symbol, the major mode command name, such as `c-mode'
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
652 or nil. If nil, highlighting keywords are added for the current buffer.
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
653 KEYWORDS should be a list; see the variable `font-lock-keywords'.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
654 By default they are added at the beginning of the current highlighting list.
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
655 If optional argument HOW is `set', they are used to replace the current
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
656 highlighting list. If HOW is any other non-nil value, they are added at the
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
657 end of the current highlighting list.
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
658
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
659 For example:
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
660
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
661 (font-lock-add-keywords 'c-mode
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
662 '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend)
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
663 (\"\\\\\\=<\\\\(and\\\\|or\\\\|not\\\\)\\\\\\=>\" . font-lock-keyword-face)))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
664
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
665 adds two fontification patterns for C mode, to fontify `FIXME:' words, even in
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
666 comments, and to fontify `and', `or' and `not' words as keywords.
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
667
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
668 The above procedure will only add the keywords for C mode, not
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
669 for modes derived from C mode. To add them for derived modes too,
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
670 pass nil for MODE and add the call to c-mode-hook.
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
671
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
672 For example:
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
673
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
674 (add-hook 'c-mode-hook
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
675 (lambda ()
63105
ad41fcdb0642 (font-lock-add-keywords): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63049
diff changeset
676 (font-lock-add-keywords nil
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
677 '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend)
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
678 (\"\\\\\\=<\\\\(and\\\\|or\\\\|not\\\\)\\\\\\=>\" .
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
679 font-lock-keyword-face)))))
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
680
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
681 The above procedure may fail to add keywords to derived modes if
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
682 some involved major mode does not follow the standard conventions.
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
683 File a bug report if this happens, so the major mode can be corrected.
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
684
47121
ec5f8ce91ceb (font-lock-add-keywords): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 46249
diff changeset
685 Note that some modes have specialized support for additional patterns, e.g.,
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
686 see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types',
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
687 `objc-font-lock-extra-types' and `java-font-lock-extra-types'."
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
688 (cond (mode
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
689 ;; If MODE is non-nil, add the KEYWORDS and HOW spec to
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
690 ;; `font-lock-keywords-alist' so `font-lock-set-defaults' uses them.
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
691 (let ((spec (cons keywords how)) cell)
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
692 (if (setq cell (assq mode font-lock-keywords-alist))
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
693 (if (eq how 'set)
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
694 (setcdr cell (list spec))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
695 (setcdr cell (append (cdr cell) (list spec))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
696 (push (list mode spec) font-lock-keywords-alist)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
697 ;; Make sure that `font-lock-removed-keywords-alist' does not
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
698 ;; contain the new keywords.
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
699 (font-lock-update-removed-keyword-alist mode keywords how))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
700 (t
78000
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
701 (when (and font-lock-mode
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
702 (not (or font-lock-keywords font-lock-defaults)))
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
703 ;; The major mode has not set any keywords, so when we enabled
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
704 ;; font-lock-mode it only enabled the font-core.el part, not the
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
705 ;; font-lock-mode-internal. Try again.
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
706 (font-lock-mode -1)
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
707 (set (make-local-variable 'font-lock-defaults) '(nil t))
4d83e9f9b01e (font-lock-add-keywords): In case font-lock was only
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77365
diff changeset
708 (font-lock-mode 1))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
709 ;; Otherwise set or add the keywords now.
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
710 ;; This is a no-op if it has been done already in this buffer
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
711 ;; for the correct major mode.
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
712 (font-lock-set-defaults)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
713 (let ((was-compiled (eq (car font-lock-keywords) t)))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
714 ;; Bring back the user-level (uncompiled) keywords.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
715 (if was-compiled
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
716 (setq font-lock-keywords (cadr font-lock-keywords)))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
717 ;; Now modify or replace them.
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
718 (if (eq how 'set)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
719 (setq font-lock-keywords keywords)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
720 (font-lock-remove-keywords nil keywords) ;to avoid duplicates
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
721 (let ((old (if (eq (car-safe font-lock-keywords) t)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
722 (cdr font-lock-keywords)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
723 font-lock-keywords)))
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
724 (setq font-lock-keywords (if how
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
725 (append old keywords)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
726 (append keywords old)))))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
727 ;; If the keywords were compiled before, compile them again.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
728 (if was-compiled
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
729 (setq font-lock-keywords
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
730 (font-lock-compile-keywords font-lock-keywords)))))))
26746
d22cd599a91a (font-lock-default-fontify-region): Fix subtle
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26620
diff changeset
731
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
732 (defun font-lock-update-removed-keyword-alist (mode keywords how)
61910
caf171b08132 (font-lock-add-keywords, font-lock-remove-keywords): Clarify docstring.
Lute Kamstra <lute@gnu.org>
parents: 61891
diff changeset
733 "Update `font-lock-removed-keywords-alist' when adding new KEYWORDS to MODE."
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
734 ;; When font-lock is enabled first all keywords in the list
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
735 ;; `font-lock-keywords-alist' are added, then all keywords in the
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
736 ;; list `font-lock-removed-keywords-alist' are removed. If a
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
737 ;; keyword was once added, removed, and then added again it must be
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
738 ;; removed from the removed-keywords list. Otherwise the second add
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
739 ;; will not take effect.
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
740 (let ((cell (assq mode font-lock-removed-keywords-alist)))
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
741 (if cell
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
742 (if (eq how 'set)
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
743 ;; A new set of keywords is defined. Forget all about
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
744 ;; our old keywords that should be removed.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
745 (setq font-lock-removed-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
746 (delq cell font-lock-removed-keywords-alist))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
747 ;; Delete all previously removed keywords.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
748 (dolist (kword keywords)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
749 (setcdr cell (delete kword (cdr cell))))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
750 ;; Delete the mode cell if empty.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
751 (if (null (cdr cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
752 (setq font-lock-removed-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
753 (delq cell font-lock-removed-keywords-alist)))))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
754
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
755 ;; Written by Anders Lindgren <andersl@andersl.com>.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
756 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
757 ;; Case study:
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
758 ;; (I) The keywords are removed from a major mode.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
759 ;; In this case the keyword could be local (i.e. added earlier by
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
760 ;; `font-lock-add-keywords'), global, or both.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
761 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
762 ;; (a) In the local case we remove the keywords from the variable
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
763 ;; `font-lock-keywords-alist'.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
764 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
765 ;; (b) The actual global keywords are not known at this time.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
766 ;; All keywords are added to `font-lock-removed-keywords-alist',
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
767 ;; when font-lock is enabled those keywords are removed.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
768 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
769 ;; Note that added keywords are taken out of the list of removed
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
770 ;; keywords. This ensure correct operation when the same keyword
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
771 ;; is added and removed several times.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
772 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
773 ;; (II) The keywords are removed from the current buffer.
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
774 (defun font-lock-remove-keywords (mode keywords)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
775 "Remove highlighting KEYWORDS for MODE.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
776
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
777 MODE should be a symbol, the major mode command name, such as `c-mode'
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
778 or nil. If nil, highlighting keywords are removed for the current buffer.
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
779
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
780 To make the removal apply to modes derived from MODE as well,
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
781 pass nil for MODE and add the call to MODE-hook. This may fail
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
782 for some derived modes if some involved major mode does not
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
783 follow the standard conventions. File a bug report if this
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
784 happens, so the major mode can be corrected."
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
785 (cond (mode
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
786 ;; Remove one keyword at the time.
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
787 (dolist (keyword keywords)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
788 (let ((top-cell (assq mode font-lock-keywords-alist)))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
789 ;; If MODE is non-nil, remove the KEYWORD from
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
790 ;; `font-lock-keywords-alist'.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
791 (when top-cell
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
792 (dolist (keyword-list-how-pair (cdr top-cell))
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
793 ;; `keywords-list-how-pair' is a cons with a list of
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
794 ;; keywords in the car top-cell and the original how
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
795 ;; argument in the cdr top-cell.
67571
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
796 (setcar keyword-list-how-pair
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
797 (delete keyword (car keyword-list-how-pair))))
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
798 ;; Remove keyword list/how pair when the keyword list
d263a07df092 (font-lock-keywords-alist): Rename `append' to `how'.
Romain Francoise <romain@orebokech.com>
parents: 67290
diff changeset
799 ;; is empty and how doesn't specify `set'. (If it
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
800 ;; should be deleted then previously deleted keywords
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
801 ;; would appear again.)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
802 (let ((cell top-cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
803 (while (cdr cell)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
804 (if (and (null (car (car (cdr cell))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
805 (not (eq (cdr (car (cdr cell))) 'set)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
806 (setcdr cell (cdr (cdr cell)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
807 (setq cell (cdr cell)))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
808 ;; Final cleanup, remove major mode cell if last keyword
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
809 ;; was deleted.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
810 (if (null (cdr top-cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
811 (setq font-lock-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
812 (delq top-cell font-lock-keywords-alist))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
813 ;; Remember the keyword in case it is not local.
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
814 (let ((cell (assq mode font-lock-removed-keywords-alist)))
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
815 (if cell
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
816 (unless (member keyword (cdr cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
817 (nconc cell (list keyword)))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
818 (push (cons mode (list keyword))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
819 font-lock-removed-keywords-alist))))))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
820 (t
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
821 ;; Otherwise remove it immediately.
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
822 (font-lock-set-defaults)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
823 (let ((was-compiled (eq (car font-lock-keywords) t)))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
824 ;; Bring back the user-level (uncompiled) keywords.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
825 (if was-compiled
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
826 (setq font-lock-keywords (cadr font-lock-keywords)))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
827
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
828 ;; Edit them.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
829 (setq font-lock-keywords (copy-sequence font-lock-keywords))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
830 (dolist (keyword keywords)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
831 (setq font-lock-keywords
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
832 (delete keyword font-lock-keywords)))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
833
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
834 ;; If the keywords were compiled before, compile them again.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
835 (if was-compiled
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
836 (setq font-lock-keywords
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
837 (font-lock-compile-keywords font-lock-keywords)))))))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
838
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
839 ;;; Font Lock Support mode.
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
840
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
841 ;; This is the code used to interface font-lock.el with any of its add-on
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
842 ;; packages, and provide the user interface. Packages that have their own
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
843 ;; local buffer fontification functions (see below) may have to call
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
844 ;; `font-lock-after-fontify-buffer' and/or `font-lock-after-unfontify-buffer'
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
845 ;; themselves.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
846
25319
f9b3511a51c4 (font-lock-support-mode): Make `jit-lock-mode'
Gerd Moellmann <gerd@gnu.org>
parents: 25286
diff changeset
847 (defcustom font-lock-support-mode 'jit-lock-mode
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
848 "*Support mode for Font Lock mode.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
849 Support modes speed up Font Lock mode by being choosy about when fontification
65378
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
850 occurs. The default support mode, Just-in-time Lock mode (symbol
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
851 `jit-lock-mode'), is recommended.
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
852
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
853 Other, older support modes are Fast Lock mode (symbol `fast-lock-mode') and
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
854 Lazy Lock mode (symbol `lazy-lock-mode'). See those modes for more info.
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
855 However, they are no longer recommended, as Just-in-time Lock mode is better.
f9dc4686f0a5 (font-lock-support-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 65307
diff changeset
856
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
857 If nil, means support for Font Lock mode is never performed.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
858 If a symbol, use that support mode.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
859 If a list, each element should be of the form (MAJOR-MODE . SUPPORT-MODE),
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
860 where MAJOR-MODE is a symbol or t (meaning the default). For example:
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
861 ((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
862 means that Fast Lock mode is used to support Font Lock mode for buffers in C or
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
863 C++ modes, and Lazy Lock mode is used to support Font Lock mode otherwise.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
864
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
865 The value of this variable is used when Font Lock mode is turned on."
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
866 :type '(choice (const :tag "none" nil)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
867 (const :tag "fast lock" fast-lock-mode)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
868 (const :tag "lazy lock" lazy-lock-mode)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
869 (const :tag "jit lock" jit-lock-mode)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
870 (repeat :menu-tag "mode specific" :tag "mode specific"
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
871 :value ((t . jit-lock-mode))
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
872 (cons :tag "Instance"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
873 (radio :tag "Mode"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
874 (const :tag "all" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
875 (symbol :tag "name"))
22892
850946452989 (lisp-font-lock-keywords-1): Fix previous change.
Simon Marshall <simon@gnu.org>
parents: 22857
diff changeset
876 (radio :tag "Support"
850946452989 (lisp-font-lock-keywords-1): Fix previous change.
Simon Marshall <simon@gnu.org>
parents: 22857
diff changeset
877 (const :tag "none" nil)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
878 (const :tag "fast lock" fast-lock-mode)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
879 (const :tag "lazy lock" lazy-lock-mode)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
880 (const :tag "JIT lock" jit-lock-mode)))
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
881 ))
29919
08e5e3740bf9 (font-lock-fontify-anchored-keywords): Use line-beginning-position.
Dave Love <fx@gnu.org>
parents: 29709
diff changeset
882 :version "21.1"
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
883 :group 'font-lock)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
884
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
885 (defvar fast-lock-mode)
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
886 (defvar lazy-lock-mode)
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
887 (defvar jit-lock-mode)
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
888
87108
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
889 (declare-function fast-lock-after-fontify-buffer "fast-lock")
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
890 (declare-function fast-lock-after-unfontify-buffer "fast-lock")
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
891 (declare-function fast-lock-mode "fast-lock")
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
892 (declare-function lazy-lock-after-fontify-buffer "lazy-lock")
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
893 (declare-function lazy-lock-after-unfontify-buffer "lazy-lock")
b7147cb1c966 Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents: 86265
diff changeset
894 (declare-function lazy-lock-mode "lazy-lock")
86265
22dc0bc9daf8 * frame.el (msdos-mouse-p):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85142
diff changeset
895
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
896 (defun font-lock-turn-on-thing-lock ()
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
897 (let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode)))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
898 (cond ((eq thing-mode 'fast-lock-mode)
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
899 (fast-lock-mode t))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
900 ((eq thing-mode 'lazy-lock-mode)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
901 (lazy-lock-mode t))
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
902 ((eq thing-mode 'jit-lock-mode)
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
903 ;; Prepare for jit-lock
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
904 (remove-hook 'after-change-functions
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
905 'font-lock-after-change-function t)
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
906 (set (make-local-variable 'font-lock-fontify-buffer-function)
32306
86a849ccfae1 (font-lock-defaults): Make buffer-local.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32272
diff changeset
907 'jit-lock-refontify)
63049
2c644f271d4c (font-lock-regexp-backslash)
Juri Linkov <juri@jurta.org>
parents: 63028
diff changeset
908 ;; Don't fontify eagerly (and don't abort if the buffer is large).
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
909 (set (make-local-variable 'font-lock-fontified) t)
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
910 ;; Use jit-lock.
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
911 (jit-lock-register 'font-lock-fontify-region
72230
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
912 (not font-lock-keywords-only))
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
913 ;; Tell jit-lock how we extend the region to refontify.
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
914 (add-hook 'jit-lock-after-change-extend-region-functions
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
915 'font-lock-extend-jit-lock-region-after-change
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
916 nil t)))))
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
917
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
918 (defun font-lock-turn-off-thing-lock ()
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
919 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
920 (fast-lock-mode -1))
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
921 ((and (boundp 'jit-lock-mode) jit-lock-mode)
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
922 (jit-lock-unregister 'font-lock-fontify-region)
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
923 ;; Reset local vars to the non-jit-lock case.
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
924 (kill-local-variable 'font-lock-fontify-buffer-function))
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
925 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
926 (lazy-lock-mode -1))))
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
927
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
928 (defun font-lock-after-fontify-buffer ()
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
929 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
930 (fast-lock-after-fontify-buffer))
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
931 ;; Useless now that jit-lock intercepts font-lock-fontify-buffer. -sm
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
932 ;; (jit-lock-mode
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
933 ;; (jit-lock-after-fontify-buffer))
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
934 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
935 (lazy-lock-after-fontify-buffer))))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
936
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
937 (defun font-lock-after-unfontify-buffer ()
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
938 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
939 (fast-lock-after-unfontify-buffer))
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
940 ;; Useless as well. It's only called when:
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
941 ;; - turning off font-lock: it does not matter if we leave spurious
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
942 ;; `fontified' text props around since jit-lock-mode is also off.
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
943 ;; - font-lock-default-fontify-buffer fails: this is not run
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
944 ;; any more anyway. -sm
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
945 ;;
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
946 ;; (jit-lock-mode
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
947 ;; (jit-lock-after-unfontify-buffer))
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
948 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
949 (lazy-lock-after-unfontify-buffer))))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
950
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
951 ;;; End of Font Lock Support mode.
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
952
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
953 ;;; Fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
954
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
955 ;; Rather than the function, e.g., `font-lock-fontify-region' containing the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
956 ;; code to fontify a region, the function runs the function whose name is the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
957 ;; value of the variable, e.g., `font-lock-fontify-region-function'. Normally,
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
958 ;; the value of this variable is, e.g., `font-lock-default-fontify-region'
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
959 ;; which does contain the code to fontify a region. However, the value of the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
960 ;; variable could be anything and thus, e.g., `font-lock-fontify-region' could
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
961 ;; do anything. The indirection of the fontification functions gives major
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
962 ;; modes the capability of modifying the way font-lock.el fontifies. Major
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
963 ;; modes can modify the values of, e.g., `font-lock-fontify-region-function',
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
964 ;; via the variable `font-lock-defaults'.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
965 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
966 ;; For example, Rmail mode sets the variable `font-lock-defaults' so that
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
967 ;; font-lock.el uses its own function for buffer fontification. This function
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
968 ;; makes fontification be on a message-by-message basis and so visiting an
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
969 ;; RMAIL file is much faster. A clever implementation of the function might
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
970 ;; fontify the headers differently than the message body. (It should, and
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
971 ;; correspondingly for Mail mode, but I can't be bothered to do the work. Can
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
972 ;; you?) This hints at a more interesting use...
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
973 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
974 ;; Languages that contain text normally contained in different major modes
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
975 ;; could define their own fontification functions that treat text differently
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
976 ;; depending on its context. For example, Perl mode could arrange that here
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
977 ;; docs are fontified differently than Perl code. Or Yacc mode could fontify
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
978 ;; rules one way and C code another. Neat!
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
979 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
980 ;; A further reason to use the fontification indirection feature is when the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
981 ;; default syntactual fontification, or the default fontification in general,
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
982 ;; is not flexible enough for a particular major mode. For example, perhaps
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
983 ;; comments are just too hairy for `font-lock-fontify-syntactically-region' to
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
984 ;; cope with. You need to write your own version of that function, e.g.,
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
985 ;; `hairy-fontify-syntactically-region', and make your own version of
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
986 ;; `hairy-fontify-region' call that function before calling
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
987 ;; `font-lock-fontify-keywords-region' for the normal regexp fontification
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
988 ;; pass. And Hairy mode would set `font-lock-defaults' so that font-lock.el
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
989 ;; would call your region fontification function instead of its own. For
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
990 ;; example, TeX modes could fontify {\foo ...} and \bar{...} etc. multi-line
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
991 ;; directives correctly and cleanly. (It is the same problem as fontifying
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
992 ;; multi-line strings and comments; regexps are not appropriate for the job.)
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
993
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
994 (defvar font-lock-extend-after-change-region-function nil
72308
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
995 "A function that determines the region to refontify after a change.
72232
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
996
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
997 This variable is either nil, or is a function that determines the
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
998 region to refontify after a change.
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
999 It is usually set by the major mode via `font-lock-defaults'.
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1000 Font-lock calls this function after each buffer change.
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1001
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1002 The function is given three parameters, the standard BEG, END, and OLD-LEN
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1003 from `after-change-functions'. It should return either a cons of the beginning
72308
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1004 and end buffer positions \(in that order) of the region to refontify, or nil
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1005 \(which directs the caller to fontify a default region).
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1006 This function should preserve the match-data.
72232
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1007 The region it returns may start or end in the middle of a line.")
93904
41ee2cc9680d (font-lock-extend-after-change-region-function): Make it buffer local.
Alan Mackenzie <acm@muc.de>
parents: 92939
diff changeset
1008 (make-variable-buffer-local 'font-lock-extend-after-change-region-function)
72232
ed72e8922d85 (font-lock-extend-region-function, font-lock-extend-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72230
diff changeset
1009
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1010 (defun font-lock-fontify-buffer ()
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1011 "Fontify the current buffer the way the function `font-lock-mode' would."
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1012 (interactive)
67996
8ebf91fa890e (font-lock-fontify-buffer, font-lock-fontify-region): Make sure we've setup
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67903
diff changeset
1013 (font-lock-set-defaults)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1014 (let ((font-lock-verbose (or font-lock-verbose (interactive-p))))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1015 (funcall font-lock-fontify-buffer-function)))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1016
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1017 (defun font-lock-unfontify-buffer ()
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1018 (funcall font-lock-unfontify-buffer-function))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1019
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1020 (defun font-lock-fontify-region (beg end &optional loudly)
67996
8ebf91fa890e (font-lock-fontify-buffer, font-lock-fontify-region): Make sure we've setup
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67903
diff changeset
1021 (font-lock-set-defaults)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1022 (funcall font-lock-fontify-region-function beg end loudly))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1023
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1024 (defun font-lock-unfontify-region (beg end)
58813
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1025 (save-buffer-state nil
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1026 (funcall font-lock-unfontify-region-function beg end)))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1027
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1028 (defun font-lock-default-fontify-buffer ()
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
1029 (let ((verbose (if (numberp font-lock-verbose)
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
1030 (> (buffer-size) font-lock-verbose)
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
1031 font-lock-verbose)))
23751
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1032 (with-temp-message
24002
c6bfff41f2b5 * font-lock.el (font-lock-default-fontify-buffer): When using
Simon Marshall <simon@gnu.org>
parents: 23826
diff changeset
1033 (when verbose
c6bfff41f2b5 * font-lock.el (font-lock-default-fontify-buffer): When using
Simon Marshall <simon@gnu.org>
parents: 23826
diff changeset
1034 (format "Fontifying %s..." (buffer-name)))
23751
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1035 ;; Make sure we fontify etc. in the whole buffer.
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1036 (save-restriction
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1037 (widen)
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1038 (condition-case nil
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1039 (save-excursion
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1040 (save-match-data
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1041 (font-lock-fontify-region (point-min) (point-max) verbose)
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1042 (font-lock-after-fontify-buffer)
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1043 (setq font-lock-fontified t)))
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1044 ;; We don't restore the old fontification, so it's best to unfontify.
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1045 (quit (font-lock-unfontify-buffer)))))))
13701
1dab6f0d9239 Don't turn on in any buffer with a leading space in its name.
Simon Marshall <simon@gnu.org>
parents: 13641
diff changeset
1046
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1047 (defun font-lock-default-unfontify-buffer ()
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1048 ;; Make sure we unfontify etc. in the whole buffer.
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1049 (save-restriction
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1050 (widen)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1051 (font-lock-unfontify-region (point-min) (point-max))
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14365
diff changeset
1052 (font-lock-after-unfontify-buffer)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1053 (setq font-lock-fontified nil)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1054
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1055 (defvar font-lock-dont-widen nil
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1056 "If non-nil, font-lock will work on the non-widened buffer.
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1057 Useful for things like RMAIL and Info where the whole buffer is not
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1058 a very meaningful entity to highlight.")
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1059
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1060
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1061 (defvar font-lock-beg) (defvar font-lock-end)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1062 (defvar font-lock-extend-region-functions
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1063 '(font-lock-extend-region-wholelines
72308
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1064 ;; This use of font-lock-multiline property is unreliable but is just
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1065 ;; a handy heuristic: in case you don't have a function that does
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1066 ;; /identification/ of multiline elements, you may still occasionally
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1067 ;; discover them by accident (or you may /identify/ them but not in all
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1068 ;; cases), in which case the font-lock-multiline property can help make
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1069 ;; sure you will properly *re*identify them during refontification.
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1070 font-lock-extend-region-multiline)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1071 "Special hook run just before proceeding to fontify a region.
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1072 This is used to allow major modes to help font-lock find safe buffer positions
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1073 as beginning and end of the fontified region. Its most common use is to solve
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1074 the problem of /identification/ of multiline elements by providing a function
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1075 that tries to find such elements and move the boundaries such that they do
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1076 not fall in the middle of one.
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1077 Each function is called with no argument; it is expected to adjust the
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1078 dynamically bound variables `font-lock-beg' and `font-lock-end'; and return
78492
7c8949dbfa0d Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
1079 non-nil if it did make such an adjustment.
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1080 These functions are run in turn repeatedly until they all return nil.
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1081 Put first the functions more likely to cause a change and cheaper to compute.")
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1082 ;; Mark it as a special hook which doesn't use any global setting
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1083 ;; (i.e. doesn't obey the element t in the buffer-local value).
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1084 (make-variable-buffer-local 'font-lock-extend-region-functions)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1085
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1086 (defun font-lock-extend-region-multiline ()
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1087 "Move fontification boundaries away from any `font-lock-multiline' property."
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1088 (let ((changed nil))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1089 (when (and (> font-lock-beg (point-min))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1090 (get-text-property (1- font-lock-beg) 'font-lock-multiline))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1091 (setq changed t)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1092 (setq font-lock-beg (or (previous-single-property-change
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1093 font-lock-beg 'font-lock-multiline)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1094 (point-min))))
75975
c99663d585cc (font-lock-extend-region-wholelines): Test for EOB in addition to BOL.
Eli Zaretskii <eliz@gnu.org>
parents: 75918
diff changeset
1095 ;;
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1096 (when (get-text-property font-lock-end 'font-lock-multiline)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1097 (setq changed t)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1098 (setq font-lock-end (or (text-property-any font-lock-end (point-max)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1099 'font-lock-multiline nil)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1100 (point-max))))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1101 changed))
75975
c99663d585cc (font-lock-extend-region-wholelines): Test for EOB in addition to BOL.
Eli Zaretskii <eliz@gnu.org>
parents: 75918
diff changeset
1102
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1103 (defun font-lock-extend-region-wholelines ()
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1104 "Move fontification boundaries to beginning of lines."
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1105 (let ((changed nil))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1106 (goto-char font-lock-beg)
75999
ce1b9c8dc108 (font-lock-extend-region-wholelines): Revert last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75975
diff changeset
1107 (unless (bolp)
75975
c99663d585cc (font-lock-extend-region-wholelines): Test for EOB in addition to BOL.
Eli Zaretskii <eliz@gnu.org>
parents: 75918
diff changeset
1108 (setq changed t font-lock-beg (line-beginning-position)))
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1109 (goto-char font-lock-end)
75918
f707dcebb152 (font-lock-extend-region-wholelines):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
1110 (unless (bolp)
f707dcebb152 (font-lock-extend-region-wholelines):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
1111 (unless (eq font-lock-end
f707dcebb152 (font-lock-extend-region-wholelines):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
1112 (setq font-lock-end (line-beginning-position 2)))
f707dcebb152 (font-lock-extend-region-wholelines):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
1113 (setq changed t)))
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1114 changed))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1115
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1116 (defun font-lock-default-fontify-region (beg end loudly)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1117 (save-buffer-state
61891
dd02c82eebe7 (font-lock-default-fontify-region): Don't force
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61860
diff changeset
1118 ((parse-sexp-lookup-properties
dd02c82eebe7 (font-lock-default-fontify-region): Don't force
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61860
diff changeset
1119 (or parse-sexp-lookup-properties font-lock-syntactic-keywords))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1120 (old-syntax-table (syntax-table)))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1121 (unwind-protect
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1122 (save-restriction
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1123 (unless font-lock-dont-widen (widen))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1124 ;; Use the fontification syntax table, if any.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
1125 (when font-lock-syntax-table
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
1126 (set-syntax-table font-lock-syntax-table))
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1127 ;; Extend the region to fontify so that it starts and ends at
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1128 ;; safe places.
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1129 (let ((funs font-lock-extend-region-functions)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1130 (font-lock-beg beg)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1131 (font-lock-end end))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1132 (while funs
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1133 (setq funs (if (or (not (funcall (car funs)))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1134 (eq funs font-lock-extend-region-functions))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1135 (cdr funs)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1136 ;; If there's been a change, we should go through
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1137 ;; the list again since this new position may
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1138 ;; warrant a different answer from one of the fun
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1139 ;; we've already seen.
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1140 font-lock-extend-region-functions)))
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1141 (setq beg font-lock-beg end font-lock-end))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1142 ;; Now do the fontification.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
1143 (font-lock-unfontify-region beg end)
76000
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1144 (when font-lock-syntactic-keywords
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1145 (font-lock-fontify-syntactic-keywords-region beg end))
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1146 (unless font-lock-keywords-only
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1147 (font-lock-fontify-syntactically-region beg end loudly))
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1148 (font-lock-fontify-keywords-region beg end loudly))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1149 ;; Clean up.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
1150 (set-syntax-table old-syntax-table))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1151
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1152 ;; The following must be rethought, since keywords can override fontification.
65618
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1153 ;; ;; Now scan for keywords, but not if we are inside a comment now.
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1154 ;; (or (and (not font-lock-keywords-only)
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1155 ;; (let ((state (parse-partial-sexp beg end nil nil
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1156 ;; font-lock-cache-state)))
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1157 ;; (or (nth 4 state) (nth 7 state))))
b9c26f9516da (font-lock-default-fontify-region): Don't unconditionally add a line, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65471
diff changeset
1158 ;; (font-lock-fontify-keywords-region beg end))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1159
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1160 (defvar font-lock-extra-managed-props nil
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1161 "Additional text properties managed by font-lock.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1162 This is used by `font-lock-default-unfontify-region' to decide
46249
54c4053e954f (font-lock-default-unfontify-region): Use remove-list-of-text-properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45774
diff changeset
1163 what properties to clear before refontifying a region.")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1164
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1165 (defun font-lock-default-unfontify-region (beg end)
58813
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1166 (remove-list-of-text-properties
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1167 beg end (append
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1168 font-lock-extra-managed-props
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1169 (if font-lock-syntactic-keywords
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1170 '(syntax-table face font-lock-multiline)
8d1a39cde5e3 (font-lock-unfontify-region): Save buffer state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58564
diff changeset
1171 '(face font-lock-multiline)))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1172
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1173 ;; Called when any modification is made to buffer text.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1174 (defun font-lock-after-change-function (beg end old-len)
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1175 (save-excursion
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1176 (let ((inhibit-point-motion-hooks t)
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1177 (inhibit-quit t)
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1178 (region (if font-lock-extend-after-change-region-function
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1179 (funcall font-lock-extend-after-change-region-function
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1180 beg end old-len))))
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1181 (save-match-data
69468
0c2790d73955 * font-core.el: New function/variable
Alan Mackenzie <acm@muc.de>
parents: 69264
diff changeset
1182 (if region
0c2790d73955 * font-core.el: New function/variable
Alan Mackenzie <acm@muc.de>
parents: 69264
diff changeset
1183 ;; Fontify the region the major mode has specified.
0c2790d73955 * font-core.el: New function/variable
Alan Mackenzie <acm@muc.de>
parents: 69264
diff changeset
1184 (setq beg (car region) end (cdr region))
0c2790d73955 * font-core.el: New function/variable
Alan Mackenzie <acm@muc.de>
parents: 69264
diff changeset
1185 ;; Fontify the whole lines which enclose the region.
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1186 ;; Actually, this is not needed because
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1187 ;; font-lock-default-fontify-region already rounds up to a whole
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1188 ;; number of lines.
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1189 ;; (setq beg (progn (goto-char beg) (line-beginning-position))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1190 ;; end (progn (goto-char end) (line-beginning-position 2)))
73156
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1191 (unless (eq end (point-max))
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1192 ;; Rounding up to a whole number of lines should include the
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1193 ;; line right after `end'. Typical case: the first char of
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1194 ;; the line was deleted. Or a \n was inserted in the middle
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1195 ;; of a line.
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1196 (setq end (1+ end))))
69468
0c2790d73955 * font-core.el: New function/variable
Alan Mackenzie <acm@muc.de>
parents: 69264
diff changeset
1197 (font-lock-fontify-region beg end)))))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1198
72230
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
1199 (defvar jit-lock-start) (defvar jit-lock-end)
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
1200 (defun font-lock-extend-jit-lock-region-after-change (beg end old-len)
72309
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1201 "Function meant for `jit-lock-after-change-extend-region-functions'.
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1202 This function does 2 things:
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1203 - extend the region so that it not only includes the part that was modified
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1204 but also the surrounding text whose highlighting may change as a consequence.
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1205 - anticipate (part of) the region extension that will happen later in
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1206 `font-lock-default-fontify-region', in order to avoid the need for
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1207 double-redisplay in `jit-lock-fontify-now'."
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1208 (save-excursion
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1209 ;; First extend the region as font-lock-after-change-function would.
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1210 (let ((region (if font-lock-extend-after-change-region-function
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1211 (funcall font-lock-extend-after-change-region-function
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1212 beg end old-len))))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1213 (if region
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1214 (setq beg (min jit-lock-start (car region))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1215 end (max jit-lock-end (cdr region))))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1216 ;; Then extend the region obeying font-lock-multiline properties,
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1217 ;; indicating which part of the buffer needs to be refontified.
72308
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1218 ;; !!! This is the *main* user of font-lock-multiline property !!!
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1219 ;; font-lock-after-change-function could/should also do that, but it
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1220 ;; doesn't need to because font-lock-default-fontify-region does
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1221 ;; it anyway. Here OTOH we have no guarantee that
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1222 ;; font-lock-default-fontify-region will be executed on this region
c49cd0ee6018 (font-lock-extend-after-change-region-function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72251
diff changeset
1223 ;; any time soon.
72311
4501a3a3a336 (font-lock-extend-jit-lock-region-after-change): Better comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72309
diff changeset
1224 ;; Note: contrary to font-lock-default-fontify-region, we do not do
4501a3a3a336 (font-lock-extend-jit-lock-region-after-change): Better comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72309
diff changeset
1225 ;; any loop here because we are not looking for a safe spot: we just
4501a3a3a336 (font-lock-extend-jit-lock-region-after-change): Better comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72309
diff changeset
1226 ;; mark the text whose appearance may need to change as a result of
4501a3a3a336 (font-lock-extend-jit-lock-region-after-change): Better comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72309
diff changeset
1227 ;; the buffer modification.
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1228 (when (and (> beg (point-min))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1229 (get-text-property (1- beg) 'font-lock-multiline))
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1230 (setq beg (or (previous-single-property-change
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1231 beg 'font-lock-multiline)
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1232 (point-min))))
73156
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1233 (when (< end (point-max))
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1234 (setq end
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1235 (if (get-text-property end 'font-lock-multiline)
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1236 (or (text-property-any end (point-max)
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1237 'font-lock-multiline nil)
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1238 (point-max))
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1239 ;; Rounding up to a whole number of lines should include the
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1240 ;; line right after `end'. Typical case: the first char of
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1241 ;; the line was deleted. Or a \n was inserted in the middle
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1242 ;; of a line.
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1243 (1+ end))))
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1244 ;; Finally, pre-enlarge the region to a whole number of lines, to try
72309
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1245 ;; and anticipate what font-lock-default-fontify-region will do, so as to
72250
482bf4e8cc00 (font-lock-extend-after-change-region-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72232
diff changeset
1246 ;; avoid double-redisplay.
72309
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1247 ;; We could just run `font-lock-extend-region-functions', but since
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1248 ;; the only purpose is to avoid the double-redisplay, we prefer to
e5f74bc78986 (font-lock-extend-jit-lock-region-after-change): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72308
diff changeset
1249 ;; do here only the part that is cheap and most likely to be useful.
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1250 (when (memq 'font-lock-extend-region-wholelines
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1251 font-lock-extend-region-functions)
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1252 (goto-char beg)
73156
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1253 (setq jit-lock-start (min jit-lock-start (line-beginning-position)))
72251
0933613f837b (font-lock-beg, font-lock-end, font-lock-extend-region-functions): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72250
diff changeset
1254 (goto-char end)
73156
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1255 (setq jit-lock-end
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1256 (max jit-lock-end
57c68ed8bb9c (font-lock-after-change-function): Refontify next line as well if end is at BOL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73100
diff changeset
1257 (if (bolp) (point) (line-beginning-position 2))))))))
72230
d254902ce935 (font-lock-extend-jit-lock-region-after-change): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70530
diff changeset
1258
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1259 (defun font-lock-fontify-block (&optional arg)
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1260 "Fontify some lines the way `font-lock-fontify-buffer' would.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1261 The lines could be a function or paragraph, or a specified number of lines.
14516
9360c3107669 Moved `supported' from turn-on-font-lock-if-supported to turn-on-font-lock.
Simon Marshall <simon@gnu.org>
parents: 14468
diff changeset
1262 If ARG is given, fontify that many lines before and after point, or 16 lines if
9360c3107669 Moved `supported' from turn-on-font-lock-if-supported to turn-on-font-lock.
Simon Marshall <simon@gnu.org>
parents: 14468
diff changeset
1263 no ARG is given and `font-lock-mark-block-function' is nil.
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1264 If `font-lock-mark-block-function' non-nil and no ARG is given, it is used to
14516
9360c3107669 Moved `supported' from turn-on-font-lock-if-supported to turn-on-font-lock.
Simon Marshall <simon@gnu.org>
parents: 14468
diff changeset
1265 delimit the region to fontify."
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1266 (interactive "P")
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1267 (let ((inhibit-point-motion-hooks t) font-lock-beginning-of-syntax-function
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1268 deactivate-mark)
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1269 ;; Make sure we have the right `font-lock-keywords' etc.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1270 (if (not font-lock-mode) (font-lock-set-defaults))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1271 (save-excursion
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1272 (save-match-data
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1273 (condition-case error-data
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1274 (if (or arg (not font-lock-mark-block-function))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1275 (let ((lines (if arg (prefix-numeric-value arg) 16)))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1276 (font-lock-fontify-region
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1277 (save-excursion (forward-line (- lines)) (point))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1278 (save-excursion (forward-line lines) (point))))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1279 (funcall font-lock-mark-block-function)
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1280 (font-lock-fontify-region (point) (mark)))
15442
b4c8360e450e (global-font-lock-mode): Set up find-file-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 14780
diff changeset
1281 ((error quit) (message "Fontifying block...%s" error-data)))))))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1282
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1283 ;;; End of Fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1284
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1285 ;;; Additional text property functions.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1286
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1287 ;; The following text property functions should be builtins. This means they
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1288 ;; should be written in C and put with all the other text property functions.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1289 ;; In the meantime, those that are used by font-lock.el are defined in Lisp
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1290 ;; below and given a `font-lock-' prefix. Those that are not used are defined
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1291 ;; in Lisp below and commented out. sm.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1292
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1293 (defun font-lock-prepend-text-property (start end prop value &optional object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1294 "Prepend to one property of the text from START to END.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1295 Arguments PROP and VALUE specify the property and value to prepend to the value
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1296 already in place. The resulting property values are always lists.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1297 Optional argument OBJECT is the string or buffer containing the text."
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1298 (let ((val (if (listp value) value (list value))) next prev)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1299 (while (/= start end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1300 (setq next (next-single-property-change start prop object end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1301 prev (get-text-property start prop object))
79653
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1302 ;; Canonicalize old forms of face property.
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1303 (and (memq prop '(face font-lock-face))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1304 (listp prev)
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1305 (or (keywordp (car prev))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1306 (memq (car prev) '(foreground-color background-color)))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1307 (setq prev (list prev)))
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1308 (put-text-property start next prop
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1309 (append val (if (listp prev) prev (list prev)))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1310 object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1311 (setq start next))))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1312
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1313 (defun font-lock-append-text-property (start end prop value &optional object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1314 "Append to one property of the text from START to END.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1315 Arguments PROP and VALUE specify the property and value to append to the value
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1316 already in place. The resulting property values are always lists.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1317 Optional argument OBJECT is the string or buffer containing the text."
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1318 (let ((val (if (listp value) value (list value))) next prev)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1319 (while (/= start end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1320 (setq next (next-single-property-change start prop object end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1321 prev (get-text-property start prop object))
79653
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1322 ;; Canonicalize old forms of face property.
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1323 (and (memq prop '(face font-lock-face))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1324 (listp prev)
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1325 (or (keywordp (car prev))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1326 (memq (car prev) '(foreground-color background-color)))
f99fcd1db425 (font-lock-prepend-text-property, font-lock-append-text-property):
Richard M. Stallman <rms@gnu.org>
parents: 78492
diff changeset
1327 (setq prev (list prev)))
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1328 (put-text-property start next prop
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1329 (append (if (listp prev) prev (list prev)) val)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1330 object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1331 (setq start next))))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1332
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1333 (defun font-lock-fillin-text-property (start end prop value &optional object)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1334 "Fill in one property of the text from START to END.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1335 Arguments PROP and VALUE specify the property and value to put where none are
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1336 already in place. Therefore existing property values are not overwritten.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1337 Optional argument OBJECT is the string or buffer containing the text."
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1338 (let ((start (text-property-any start end prop nil object)) next)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1339 (while start
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1340 (setq next (next-single-property-change start prop object end))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1341 (put-text-property start next prop value object)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1342 (setq start (text-property-any next end prop nil object)))))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1343
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1344 ;; For completeness: this is to `remove-text-properties' as `put-text-property'
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1345 ;; is to `add-text-properties', etc.
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1346 ;;(defun remove-text-property (start end property &optional object)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1347 ;; "Remove a property from text from START to END.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1348 ;;Argument PROPERTY is the property to remove.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1349 ;;Optional argument OBJECT is the string or buffer containing the text.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1350 ;;Return t if the property was actually removed, nil otherwise."
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1351 ;; (remove-text-properties start end (list property) object))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1352
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1353 ;; For consistency: maybe this should be called `remove-single-property' like
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1354 ;; `next-single-property-change' (not `next-single-text-property-change'), etc.
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1355 ;;(defun remove-single-text-property (start end prop value &optional object)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1356 ;; "Remove a specific property value from text from START to END.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1357 ;;Arguments PROP and VALUE specify the property and value to remove. The
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1358 ;;resulting property values are not equal to VALUE nor lists containing VALUE.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1359 ;;Optional argument OBJECT is the string or buffer containing the text."
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1360 ;; (let ((start (text-property-not-all start end prop nil object)) next prev)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1361 ;; (while start
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1362 ;; (setq next (next-single-property-change start prop object end)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1363 ;; prev (get-text-property start prop object))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1364 ;; (cond ((and (symbolp prev) (eq value prev))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1365 ;; (remove-text-property start next prop object))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1366 ;; ((and (listp prev) (memq value prev))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1367 ;; (let ((new (delq value prev)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1368 ;; (cond ((null new)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1369 ;; (remove-text-property start next prop object))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1370 ;; ((= (length new) 1)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1371 ;; (put-text-property start next prop (car new) object))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1372 ;; (t
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1373 ;; (put-text-property start next prop new object))))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1374 ;; (setq start (text-property-not-all next end prop nil object)))))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1375
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1376 ;;; End of Additional text property functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1377
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1378 ;;; Syntactic regexp fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1379
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1380 ;; These syntactic keyword pass functions are identical to those keyword pass
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1381 ;; functions below, with the following exceptions; (a) they operate on
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1382 ;; `font-lock-syntactic-keywords' of course, (b) they are all `defun' as speed
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1383 ;; is less of an issue, (c) eval of property value does not occur JIT as speed
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1384 ;; is less of an issue, (d) OVERRIDE cannot be `prepend' or `append' as it
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1385 ;; makes no sense for `syntax-table' property values, (e) they do not do it
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1386 ;; LOUDLY as it is not likely to be intensive.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1387
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1388 (defun font-lock-apply-syntactic-highlight (highlight)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1389 "Apply HIGHLIGHT following a match.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1390 HIGHLIGHT should be of the form MATCH-HIGHLIGHT,
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1391 see `font-lock-syntactic-keywords'."
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1392 (let* ((match (nth 0 highlight))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1393 (start (match-beginning match)) (end (match-end match))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1394 (value (nth 1 highlight))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1395 (override (nth 2 highlight)))
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1396 (if (not start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1397 ;; No match but we might not signal an error.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1398 (or (nth 3 highlight)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1399 (error "No match %d in highlight %S" match highlight))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1400 (when (and (consp value) (not (numberp (car value))))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1401 (setq value (eval value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1402 (when (stringp value) (setq value (string-to-syntax value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1403 ;; Flush the syntax-cache. I believe this is not necessary for
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1404 ;; font-lock's use of syntax-ppss, but I'm not 100% sure and it can
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1405 ;; still be necessary for other users of syntax-ppss anyway.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1406 (syntax-ppss-after-change-function start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1407 (cond
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1408 ((not override)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1409 ;; Cannot override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1410 (or (text-property-not-all start end 'syntax-table nil)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1411 (put-text-property start end 'syntax-table value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1412 ((eq override t)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1413 ;; Override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1414 (put-text-property start end 'syntax-table value))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1415 ((eq override 'keep)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1416 ;; Keep existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1417 (font-lock-fillin-text-property start end 'syntax-table value))))))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1418
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1419 (defun font-lock-fontify-syntactic-anchored-keywords (keywords limit)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1420 "Fontify according to KEYWORDS until LIMIT.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1421 KEYWORDS should be of the form MATCH-ANCHORED, see `font-lock-keywords',
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1422 LIMIT can be modified by the value of its PRE-MATCH-FORM."
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1423 (let ((matcher (nth 0 keywords)) (lowdarks (nthcdr 3 keywords)) highlights
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1424 ;; Evaluate PRE-MATCH-FORM.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1425 (pre-match-value (eval (nth 1 keywords))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1426 ;; Set LIMIT to value of PRE-MATCH-FORM or the end of line.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1427 (if (and (numberp pre-match-value) (> pre-match-value (point)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1428 (setq limit pre-match-value)
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
1429 (setq limit (line-end-position)))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1430 (save-match-data
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1431 ;; Find an occurrence of `matcher' before `limit'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1432 (while (if (stringp matcher)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1433 (re-search-forward matcher limit t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1434 (funcall matcher limit))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1435 ;; Apply each highlight to this instance of `matcher'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1436 (setq highlights lowdarks)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1437 (while highlights
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1438 (font-lock-apply-syntactic-highlight (car highlights))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1439 (setq highlights (cdr highlights)))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1440 ;; Evaluate POST-MATCH-FORM.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1441 (eval (nth 2 keywords))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1442
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1443 (defun font-lock-fontify-syntactic-keywords-region (start end)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1444 "Fontify according to `font-lock-syntactic-keywords' between START and END.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1445 START should be at the beginning of a line."
76000
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1446 ;; Ensure the beginning of the file is properly syntactic-fontified.
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1447 (when (and font-lock-syntactically-fontified
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1448 (< font-lock-syntactically-fontified start))
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1449 (setq start (max font-lock-syntactically-fontified (point-min)))
8d61685ee62b Revert the accidental commit of unrelated patches in the previous commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75999
diff changeset
1450 (setq font-lock-syntactically-fontified end))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1451 ;; If `font-lock-syntactic-keywords' is a symbol, get the real keywords.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1452 (when (symbolp font-lock-syntactic-keywords)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1453 (setq font-lock-syntactic-keywords (font-lock-eval-keywords
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1454 font-lock-syntactic-keywords)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1455 ;; If `font-lock-syntactic-keywords' is not compiled, compile it.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1456 (unless (eq (car font-lock-syntactic-keywords) t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1457 (setq font-lock-syntactic-keywords (font-lock-compile-keywords
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1458 font-lock-syntactic-keywords
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1459 t)))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1460 ;; Get down to business.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1461 (let ((case-fold-search font-lock-keywords-case-fold-search)
56265
da55b7f62f95 (font-lock-fontify-syntactic-keywords-region):
Richard M. Stallman <rms@gnu.org>
parents: 56244
diff changeset
1462 (keywords (cddr font-lock-syntactic-keywords))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1463 keyword matcher highlights)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1464 (while keywords
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1465 ;; Find an occurrence of `matcher' from `start' to `end'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1466 (setq keyword (car keywords) matcher (car keyword))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1467 (goto-char start)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1468 (while (if (stringp matcher)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1469 (re-search-forward matcher end t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1470 (funcall matcher end))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1471 ;; Apply each highlight to this instance of `matcher', which may be
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1472 ;; specific highlights or more keywords anchored to `matcher'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1473 (setq highlights (cdr keyword))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1474 (while highlights
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1475 (if (numberp (car (car highlights)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1476 (font-lock-apply-syntactic-highlight (car highlights))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1477 (font-lock-fontify-syntactic-anchored-keywords (car highlights)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1478 end))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1479 (setq highlights (cdr highlights))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1480 (setq keywords (cdr keywords)))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1481
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1482 ;;; End of Syntactic regexp fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1483
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1484 ;;; Syntactic fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1485
62362
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1486 (defvar font-lock-comment-start-skip nil
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1487 "If non-nil, Font Lock mode uses this instead of `comment-start-skip'.")
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1488
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1489 (defvar font-lock-comment-end-skip nil
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1490 "If non-nil, Font Lock mode uses this instead of `comment-end'.")
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1491
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1492 (defun font-lock-fontify-syntactically-region (start end &optional loudly ppss)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1493 "Put proper face on each string and comment between START and END.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1494 START should be at the beginning of a line."
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
1495 (let ((comment-end-regexp
62362
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1496 (or font-lock-comment-end-skip
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1497 (regexp-quote
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1498 (replace-regexp-in-string "^ *" "" comment-end))))
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
1499 state face beg)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1500 (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1501 (goto-char start)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1502 ;;
58161
5451548f1bd9 (font-lock-fontify-syntactically-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57433
diff changeset
1503 ;; Find the `start' state.
41513
92d06d8cd81d (font-lock-cache-state, font-lock-cache-position)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41226
diff changeset
1504 (setq state (or ppss (syntax-ppss start)))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1505 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1506 ;; Find each interesting place between here and `end'.
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1507 (while
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1508 (progn
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1509 (when (or (nth 3 state) (nth 4 state))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1510 (setq face (funcall font-lock-syntactic-face-function state))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1511 (setq beg (max (nth 8 state) start))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1512 (setq state (parse-partial-sexp (point) end nil nil state
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1513 'syntax-table))
62235
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1514 (when face (put-text-property beg (point) 'face face))
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
1515 (when (and (eq face 'font-lock-comment-face)
62362
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1516 (or font-lock-comment-start-skip
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1517 comment-start-skip))
62235
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1518 ;; Find the comment delimiters
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1519 ;; and use font-lock-comment-delimiter-face for them.
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1520 (save-excursion
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1521 (goto-char beg)
62362
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1522 (if (looking-at (or font-lock-comment-start-skip
ebcb47e6b3f3 (font-lock-comment-start-skip): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 62272
diff changeset
1523 comment-start-skip))
62235
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1524 (put-text-property beg (match-end 0) 'face
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
1525 font-lock-comment-delimiter-face)))
62863
3c095150855a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62638
diff changeset
1526 (if (looking-back comment-end-regexp (point-at-bol) t)
62235
cd487105a05a (font-lock-fontify-syntactically-region):
Richard M. Stallman <rms@gnu.org>
parents: 62233
diff changeset
1527 (put-text-property (match-beginning 0) (point) 'face
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
1528 font-lock-comment-delimiter-face))))
58203
cd5849662239 (font-lock-fontify-syntactically-region): Fix last fix
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58161
diff changeset
1529 (< (point) end))
cd5849662239 (font-lock-fontify-syntactically-region): Fix last fix
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58161
diff changeset
1530 (setq state (parse-partial-sexp (point) end nil nil state
cd5849662239 (font-lock-fontify-syntactically-region): Fix last fix
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58161
diff changeset
1531 'syntax-table)))))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1532
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1533 ;;; End of Syntactic fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1534
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1535 ;;; Keyword regexp fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1536
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1537 (defsubst font-lock-apply-highlight (highlight)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1538 "Apply HIGHLIGHT following a match.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1539 HIGHLIGHT should be of the form MATCH-HIGHLIGHT, see `font-lock-keywords'."
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1540 (let* ((match (nth 0 highlight))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1541 (start (match-beginning match)) (end (match-end match))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1542 (override (nth 2 highlight)))
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1543 (if (not start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1544 ;; No match but we might not signal an error.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1545 (or (nth 3 highlight)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1546 (error "No match %d in highlight %S" match highlight))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1547 (let ((val (eval (nth 1 highlight))))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1548 (when (eq (car-safe val) 'face)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1549 (add-text-properties start end (cddr val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1550 (setq val (cadr val)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1551 (cond
57433
1b88b2a7544f (font-lock-apply-highlight): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57416
diff changeset
1552 ((not (or val (eq override t)))
57416
05afd8f1212e (font-lock-apply-highlight): Explicitly check the case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56758
diff changeset
1553 ;; If `val' is nil, don't do anything. It is important to do it
05afd8f1212e (font-lock-apply-highlight): Explicitly check the case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56758
diff changeset
1554 ;; explicitly, because when adding nil via things like
05afd8f1212e (font-lock-apply-highlight): Explicitly check the case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56758
diff changeset
1555 ;; font-lock-append-text-property, the property is actually
05afd8f1212e (font-lock-apply-highlight): Explicitly check the case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56758
diff changeset
1556 ;; changed from <face> to (<face>) which is undesirable. --Stef
05afd8f1212e (font-lock-apply-highlight): Explicitly check the case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56758
diff changeset
1557 nil)
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1558 ((not override)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1559 ;; Cannot override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1560 (or (text-property-not-all start end 'face nil)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1561 (put-text-property start end 'face val)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1562 ((eq override t)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1563 ;; Override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1564 (put-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1565 ((eq override 'prepend)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1566 ;; Prepend to existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1567 (font-lock-prepend-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1568 ((eq override 'append)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1569 ;; Append to existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1570 (font-lock-append-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1571 ((eq override 'keep)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1572 ;; Keep existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1573 (font-lock-fillin-text-property start end 'face val)))))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1574
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1575 (defsubst font-lock-fontify-anchored-keywords (keywords limit)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1576 "Fontify according to KEYWORDS until LIMIT.
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1577 KEYWORDS should be of the form MATCH-ANCHORED, see `font-lock-keywords',
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1578 LIMIT can be modified by the value of its PRE-MATCH-FORM."
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1579 (let ((matcher (nth 0 keywords)) (lowdarks (nthcdr 3 keywords)) highlights
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1580 (lead-start (match-beginning 0))
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1581 ;; Evaluate PRE-MATCH-FORM.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1582 (pre-match-value (eval (nth 1 keywords))))
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1583 ;; Set LIMIT to value of PRE-MATCH-FORM or the end of line.
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1584 (if (not (and (numberp pre-match-value) (> pre-match-value (point))))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
1585 (setq limit (line-end-position))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1586 (setq limit pre-match-value)
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1587 (when (and font-lock-multiline (>= limit (line-beginning-position 2)))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1588 ;; this is a multiline anchored match
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1589 ;; (setq font-lock-multiline t)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1590 (put-text-property (if (= limit (line-beginning-position 2))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1591 (1- limit)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1592 (min lead-start (point)))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1593 limit
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
1594 'font-lock-multiline t)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1595 (save-match-data
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1596 ;; Find an occurrence of `matcher' before `limit'.
28087
9ca294cf76c7 (font-lock-keywords): Fix the doc now that regexp-opt-depth is unnecessary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28069
diff changeset
1597 (while (and (< (point) limit)
9ca294cf76c7 (font-lock-keywords): Fix the doc now that regexp-opt-depth is unnecessary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28069
diff changeset
1598 (if (stringp matcher)
9ca294cf76c7 (font-lock-keywords): Fix the doc now that regexp-opt-depth is unnecessary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28069
diff changeset
1599 (re-search-forward matcher limit t)
9ca294cf76c7 (font-lock-keywords): Fix the doc now that regexp-opt-depth is unnecessary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28069
diff changeset
1600 (funcall matcher limit)))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1601 ;; Apply each highlight to this instance of `matcher'.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1602 (setq highlights lowdarks)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1603 (while highlights
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1604 (font-lock-apply-highlight (car highlights))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1605 (setq highlights (cdr highlights)))))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1606 ;; Evaluate POST-MATCH-FORM.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1607 (eval (nth 2 keywords))))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1608
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1609 (defun font-lock-fontify-keywords-region (start end &optional loudly)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1610 "Fontify according to `font-lock-keywords' between START and END.
47611
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1611 START should be at the beginning of a line.
6bc56530304a (fast-lock-mode, lazy-lock-mode, jit-lock-mode): Don't bind them variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47121
diff changeset
1612 LOUDLY, if non-nil, allows progress-meter bar."
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1613 (unless (eq (car font-lock-keywords) t)
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1614 (setq font-lock-keywords
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1615 (font-lock-compile-keywords font-lock-keywords)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1616 (let ((case-fold-search font-lock-keywords-case-fold-search)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1617 (keywords (cddr font-lock-keywords))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1618 (bufname (buffer-name)) (count 0)
62233
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1619 (pos (make-marker))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1620 keyword matcher highlights)
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1621 ;;
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1622 ;; Fontify each item in `font-lock-keywords' from `start' to `end'.
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1623 (while keywords
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1624 (if loudly (message "Fontifying %s... (regexps..%s)" bufname
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
1625 (make-string (incf count) ?.)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1626 ;;
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1627 ;; Find an occurrence of `matcher' from `start' to `end'.
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1628 (setq keyword (car keywords) matcher (car keyword))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1629 (goto-char start)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1630 (while (and (< (point) end)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1631 (if (stringp matcher)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1632 (re-search-forward matcher end t)
64265
dde987aec664 (font-lock-fontify-keywords-region): Avoid inf-loops
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64091
diff changeset
1633 (funcall matcher end))
dde987aec664 (font-lock-fontify-keywords-region): Avoid inf-loops
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64091
diff changeset
1634 ;; Beware empty string matches since they will
dde987aec664 (font-lock-fontify-keywords-region): Avoid inf-loops
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64091
diff changeset
1635 ;; loop indefinitely.
dde987aec664 (font-lock-fontify-keywords-region): Avoid inf-loops
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64091
diff changeset
1636 (or (> (point) (match-beginning 0))
dde987aec664 (font-lock-fontify-keywords-region): Avoid inf-loops
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64091
diff changeset
1637 (progn (forward-char 1) t)))
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
1638 (when (and font-lock-multiline
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1639 (>= (point)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1640 (save-excursion (goto-char (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1641 (forward-line 1) (point))))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1642 ;; this is a multiline regexp match
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1643 ;; (setq font-lock-multiline t)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1644 (put-text-property (if (= (point)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1645 (save-excursion
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1646 (goto-char (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1647 (forward-line 1) (point)))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1648 (1- (point))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1649 (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1650 (point)
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1651 'font-lock-multiline t))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1652 ;; Apply each highlight to this instance of `matcher', which may be
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1653 ;; specific highlights or more keywords anchored to `matcher'.
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1654 (setq highlights (cdr keyword))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1655 (while highlights
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1656 (if (numberp (car (car highlights)))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1657 (font-lock-apply-highlight (car highlights))
62233
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1658 (set-marker pos (point))
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1659 (font-lock-fontify-anchored-keywords (car highlights) end)
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1660 ;; Ensure forward progress. `pos' is a marker because anchored
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1661 ;; keyword may add/delete text (this happens e.g. in grep.el).
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1662 (if (< (point) pos) (goto-char pos)))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1663 (setq highlights (cdr highlights))))
62233
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1664 (setq keywords (cdr keywords)))
5dfcab314a42 (font-lock-fontify-keywords-region): Use a marker
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62208
diff changeset
1665 (set-marker pos nil)))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1666
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1667 ;;; End of Keyword regexp fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1668
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1669 ;; Various functions.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1670
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1671 (defun font-lock-compile-keywords (keywords &optional syntactic-keywords)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1672 "Compile KEYWORDS into the form (t KEYWORDS COMPILED...)
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1673 Here each COMPILED is of the form (MATCHER HIGHLIGHT ...) as shown in the
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1674 `font-lock-keywords' doc string.
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1675 If SYNTACTIC-KEYWORDS is non-nil, it means these keywords are used for
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1676 `font-lock-syntactic-keywords' rather than for `font-lock-keywords'."
67903
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1677 (if (not font-lock-set-defaults)
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1678 ;; This should never happen. But some external packages sometimes
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1679 ;; call font-lock in unexpected and incorrect ways. It's important to
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1680 ;; stop processing at this point, otherwise we may end up changing the
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1681 ;; global value of font-lock-keywords and break highlighting in many
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1682 ;; other buffers.
a57273fb71d3 (font-lock-compile-keywords): Signal an error when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67738
diff changeset
1683 (error "Font-lock trying to use keywords before setting them up"))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1684 (if (eq (car-safe keywords) t)
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1685 keywords
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1686 (setq keywords
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1687 (cons t (cons keywords
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1688 (mapcar 'font-lock-compile-keyword keywords))))
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1689 (if (and (not syntactic-keywords)
73100
20bdb0abafe2 (font-lock-compile-keywords): Allow value of
Richard M. Stallman <rms@gnu.org>
parents: 72933
diff changeset
1690 (let ((beg-function
20bdb0abafe2 (font-lock-compile-keywords): Allow value of
Richard M. Stallman <rms@gnu.org>
parents: 72933
diff changeset
1691 (or font-lock-beginning-of-syntax-function
20bdb0abafe2 (font-lock-compile-keywords): Allow value of
Richard M. Stallman <rms@gnu.org>
parents: 72933
diff changeset
1692 syntax-begin-function)))
20bdb0abafe2 (font-lock-compile-keywords): Allow value of
Richard M. Stallman <rms@gnu.org>
parents: 72933
diff changeset
1693 (or (eq beg-function 'beginning-of-defun)
20bdb0abafe2 (font-lock-compile-keywords): Allow value of
Richard M. Stallman <rms@gnu.org>
parents: 72933
diff changeset
1694 (get beg-function 'font-lock-syntax-paren-check)))
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1695 (not beginning-of-defun-function))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1696 ;; Try to detect when a string or comment contains something that
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1697 ;; looks like a defun and would thus confuse font-lock.
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1698 (nconc keywords
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1699 `((,(if defun-prompt-regexp
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1700 (concat "^\\(?:" defun-prompt-regexp "\\)?\\s(")
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1701 "^\\s(")
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1702 (0
58564
eea39a81fd89 (font-lock-compile-keywords): Don't complain if the end
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58203
diff changeset
1703 (if (memq (get-text-property (match-beginning 0) 'face)
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1704 '(font-lock-string-face font-lock-doc-face
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1705 font-lock-comment-face))
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1706 (list 'face font-lock-warning-face
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1707 'help-echo "Looks like a toplevel defun: escape the parenthesis"))
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1708 prepend)))))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1709 keywords))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1710
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1711 (defun font-lock-compile-keyword (keyword)
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1712 (cond ((nlistp keyword) ; MATCHER
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1713 (list keyword '(0 font-lock-keyword-face)))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1714 ((eq (car keyword) 'eval) ; (eval . FORM)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1715 (font-lock-compile-keyword (eval (cdr keyword))))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1716 ((eq (car-safe (cdr keyword)) 'quote) ; (MATCHER . 'FORM)
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1717 ;; If FORM is a FACENAME then quote it. Otherwise ignore the quote.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1718 (if (symbolp (nth 2 keyword))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1719 (list (car keyword) (list 0 (cdr keyword)))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1720 (font-lock-compile-keyword (cons (car keyword) (nth 2 keyword)))))
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1721 ((numberp (cdr keyword)) ; (MATCHER . MATCH)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1722 (list (car keyword) (list (cdr keyword) 'font-lock-keyword-face)))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1723 ((symbolp (cdr keyword)) ; (MATCHER . FACENAME)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1724 (list (car keyword) (list 0 (cdr keyword))))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1725 ((nlistp (nth 1 keyword)) ; (MATCHER . HIGHLIGHT)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1726 (list (car keyword) (cdr keyword)))
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
1727 (t ; (MATCHER HIGHLIGHT ...)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1728 keyword)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1729
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1730 (defun font-lock-eval-keywords (keywords)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1731 "Evalulate KEYWORDS if a function (funcall) or variable (eval) name."
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1732 (if (listp keywords)
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1733 keywords
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1734 (font-lock-eval-keywords (if (fboundp keywords)
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1735 (funcall keywords)
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1736 (eval keywords)))))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1737
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1738 (defun font-lock-value-in-major-mode (alist)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1739 "Return value in ALIST for `major-mode', or ALIST if it is not an alist.
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1740 Structure is ((MAJOR-MODE . VALUE) ...) where MAJOR-MODE may be t."
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1741 (if (consp alist)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1742 (cdr (or (assq major-mode alist) (assq t alist)))
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1743 alist))
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1744
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1745 (defun font-lock-choose-keywords (keywords level)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1746 "Return LEVELth element of KEYWORDS.
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1747 A LEVEL of nil is equal to a LEVEL of 0, a LEVEL of t is equal to
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1748 \(1- (length KEYWORDS))."
32306
86a849ccfae1 (font-lock-defaults): Make buffer-local.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32272
diff changeset
1749 (cond ((not (and (listp keywords) (symbolp (car keywords))))
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1750 keywords)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1751 ((numberp level)
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
1752 (or (nth level keywords) (car (last keywords))))
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1753 ((eq level t)
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
1754 (car (last keywords)))
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1755 (t
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1756 (car keywords))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1757
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1758 (defvar font-lock-set-defaults nil) ; Whether we have set up defaults.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1759
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
1760 (defvar font-lock-mode-major-mode)
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1761 (defun font-lock-set-defaults ()
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1762 "Set fontification defaults appropriately for this mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1763 Sets various variables using `font-lock-defaults' (or, if nil, using
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1764 `font-lock-defaults-alist') and `font-lock-maximum-decoration'."
78492
7c8949dbfa0d Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
1765 ;; Set fontification defaults if not previously set for correct major mode.
63025
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
1766 (unless (and font-lock-set-defaults
36a997bd89f7 (font-lock-add-keywords): Doc fix. Comment change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 62863
diff changeset
1767 (eq font-lock-mode-major-mode major-mode))
63028
6e292941905b (font-lock-set-defaults): Fix omission in last change.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63025
diff changeset
1768 (setq font-lock-mode-major-mode major-mode)
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1769 (set (make-local-variable 'font-lock-set-defaults) t)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1770 (make-local-variable 'font-lock-fontified)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1771 (make-local-variable 'font-lock-multiline)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1772 (let* ((defaults (or font-lock-defaults
56758
7a0ad15724f6 (font-lock-set-defaults): Use with-no-warnings.
Richard M. Stallman <rms@gnu.org>
parents: 56553
diff changeset
1773 (cdr (assq major-mode
7a0ad15724f6 (font-lock-set-defaults): Use with-no-warnings.
Richard M. Stallman <rms@gnu.org>
parents: 56553
diff changeset
1774 (with-no-warnings
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
1775 font-lock-defaults-alist)))))
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1776 (keywords
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1777 (font-lock-choose-keywords (nth 0 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1778 (font-lock-value-in-major-mode font-lock-maximum-decoration)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1779 (local (cdr (assq major-mode font-lock-keywords-alist)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1780 (removed-keywords
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1781 (cdr-safe (assq major-mode font-lock-removed-keywords-alist))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1782 (set (make-local-variable 'font-lock-defaults) defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1783 ;; Syntactic fontification?
80112
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1784 (if (nth 1 defaults)
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1785 (set (make-local-variable 'font-lock-keywords-only) t)
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1786 (kill-local-variable 'font-lock-keywords-only))
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1787 ;; Case fold during regexp fontification?
80112
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1788 (if (nth 2 defaults)
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1789 (set (make-local-variable 'font-lock-keywords-case-fold-search) t)
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1790 (kill-local-variable 'font-lock-keywords-case-fold-search))
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1791 ;; Syntax table for regexp and syntactic fontification?
80112
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1792 (if (null (nth 3 defaults))
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1793 (kill-local-variable 'font-lock-syntax-table)
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1794 (set (make-local-variable 'font-lock-syntax-table)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1795 (copy-syntax-table (syntax-table)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1796 (dolist (selem (nth 3 defaults))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1797 ;; The character to modify may be a single CHAR or a STRING.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1798 (let ((syntax (cdr selem)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1799 (dolist (char (if (numberp (car selem))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1800 (list (car selem))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1801 (mapcar 'identity (car selem))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1802 (modify-syntax-entry char syntax font-lock-syntax-table)))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1803 ;; Syntax function for syntactic fontification?
80112
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1804 (if (nth 4 defaults)
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1805 (set (make-local-variable 'font-lock-beginning-of-syntax-function)
80112
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1806 (nth 4 defaults))
c0a87fab3914 (font-lock-set-defaults): Unset previously set variables when needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1807 (kill-local-variable 'font-lock-beginning-of-syntax-function))
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1808 ;; Variable alist?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1809 (dolist (x (nthcdr 5 defaults))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1810 (set (make-local-variable (car x)) (cdr x)))
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1811 ;; Set up `font-lock-keywords' last because its value might depend
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1812 ;; on other settings (e.g. font-lock-compile-keywords uses
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1813 ;; font-lock-beginning-of-syntax-function).
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1814 (set (make-local-variable 'font-lock-keywords)
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1815 (font-lock-eval-keywords keywords))
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1816 ;; Local fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1817 (while local
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1818 (font-lock-add-keywords nil (car (car local)) (cdr (car local)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1819 (setq local (cdr local)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1820 (when removed-keywords
56238
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1821 (font-lock-remove-keywords nil removed-keywords))
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1822 ;; Now compile the keywords.
f186f03b4d6b (font-lock-keywords): Change format of compiled values. Document it.
Richard M. Stallman <rms@gnu.org>
parents: 55856
diff changeset
1823 (unless (eq (car font-lock-keywords) t)
67738
f2537ba84319 (font-lock-default-fontify-buffer): Try and set-defaults even if font-lock-mode
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67678
diff changeset
1824 (setq font-lock-keywords
72933
cc737d1f33f9 (font-lock-compile-keywords): Rename optional arg to SYNTACTIC-KEYWORDS
Richard M. Stallman <rms@gnu.org>
parents: 72426
diff changeset
1825 (font-lock-compile-keywords font-lock-keywords))))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1826
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1827 ;;; Colour etc. support.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828
66717
5271a20d9255 * font-lock.el: Don't deal with font-lock-face-attributes here,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 66678
diff changeset
1829 ;; Note that `defface' will not overwrite any faces declared above via
5271a20d9255 * font-lock.el: Don't deal with font-lock-face-attributes here,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 66678
diff changeset
1830 ;; `custom-declare-face'.
61771
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1831 (defface font-lock-comment-face
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1832 '((((class grayscale) (background light))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1833 (:foreground "DimGray" :weight bold :slant italic))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1834 (((class grayscale) (background dark))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1835 (:foreground "LightGray" :weight bold :slant italic))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1836 (((class color) (min-colors 88) (background light))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1837 (:foreground "Firebrick"))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1838 (((class color) (min-colors 88) (background dark))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1839 (:foreground "chocolate1"))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1840 (((class color) (min-colors 16) (background light))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1841 (:foreground "red"))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1842 (((class color) (min-colors 16) (background dark))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1843 (:foreground "red1"))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1844 (((class color) (min-colors 8) (background light))
92848
9b6110ff87b2 (font-lock-comment-face): Set the foreground for
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92811
diff changeset
1845 (:foreground "red"))
61771
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1846 (((class color) (min-colors 8) (background dark))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1847 )
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1848 (t (:weight bold :slant italic)))
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1849 "Font Lock mode face used to highlight comments."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1850 :group 'font-lock-faces)
61771
024d90514771 (font-lock-comment-face): On terminals with few colors,
Richard M. Stallman <rms@gnu.org>
parents: 61394
diff changeset
1851
62264
01b87ce19664 (font-lock-comment-delimiter-face): Inherit from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62253
diff changeset
1852 (defface font-lock-comment-delimiter-face
62266
8db74faa378a (font-lock-comment-delimiter-face): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62264
diff changeset
1853 '((default :inherit font-lock-comment-face)
62272
f1e03f4e94d2 (font-lock-comment-delimiter-face): Fix up the inheritance.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62266
diff changeset
1854 (((class grayscale)))
f1e03f4e94d2 (font-lock-comment-delimiter-face): Fix up the inheritance.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62266
diff changeset
1855 (((class color) (min-colors 16)))
62266
8db74faa378a (font-lock-comment-delimiter-face): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62264
diff changeset
1856 (((class color) (min-colors 8) (background light))
8db74faa378a (font-lock-comment-delimiter-face): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62264
diff changeset
1857 :foreground "red")
8db74faa378a (font-lock-comment-delimiter-face): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62264
diff changeset
1858 (((class color) (min-colors 8) (background dark))
8db74faa378a (font-lock-comment-delimiter-face): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62264
diff changeset
1859 :foreground "red1"))
62264
01b87ce19664 (font-lock-comment-delimiter-face): Inherit from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62253
diff changeset
1860 "Font Lock mode face used to highlight comment delimiters."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1861 :group 'font-lock-faces)
62264
01b87ce19664 (font-lock-comment-delimiter-face): Inherit from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62253
diff changeset
1862
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1863 (defface font-lock-string-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1864 '((((class grayscale) (background light)) (:foreground "DimGray" :slant italic))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1865 (((class grayscale) (background dark)) (:foreground "LightGray" :slant italic))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1866 (((class color) (min-colors 88) (background light)) (:foreground "RosyBrown"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1867 (((class color) (min-colors 88) (background dark)) (:foreground "LightSalmon"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1868 (((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1869 (((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1870 (((class color) (min-colors 8)) (:foreground "green"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1871 (t (:slant italic)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1872 "Font Lock mode face used to highlight strings."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1873 :group 'font-lock-faces)
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
1874
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1875 (defface font-lock-doc-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1876 '((t :inherit font-lock-string-face))
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1877 "Font Lock mode face used to highlight documentation."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1878 :group 'font-lock-faces)
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1879
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1880 (defface font-lock-keyword-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1881 '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1882 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1883 (((class color) (min-colors 88) (background light)) (:foreground "Purple"))
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 61392
diff changeset
1884 (((class color) (min-colors 88) (background dark)) (:foreground "Cyan1"))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1885 (((class color) (min-colors 16) (background light)) (:foreground "Purple"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1886 (((class color) (min-colors 16) (background dark)) (:foreground "Cyan"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1887 (((class color) (min-colors 8)) (:foreground "cyan" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1888 (t (:weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1889 "Font Lock mode face used to highlight keywords."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1890 :group 'font-lock-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1891
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1892 (defface font-lock-builtin-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1893 '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1894 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1895 (((class color) (min-colors 88) (background light)) (:foreground "Orchid"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1896 (((class color) (min-colors 88) (background dark)) (:foreground "LightSteelBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1897 (((class color) (min-colors 16) (background light)) (:foreground "Orchid"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1898 (((class color) (min-colors 16) (background dark)) (:foreground "LightSteelBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1899 (((class color) (min-colors 8)) (:foreground "blue" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1900 (t (:weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1901 "Font Lock mode face used to highlight builtins."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1902 :group 'font-lock-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1903
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1904 (defface font-lock-function-name-face
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 61392
diff changeset
1905 '((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1906 (((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1907 (((class color) (min-colors 16) (background light)) (:foreground "Blue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1908 (((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1909 (((class color) (min-colors 8)) (:foreground "blue" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1910 (t (:inverse-video t :weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1911 "Font Lock mode face used to highlight function names."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1912 :group 'font-lock-faces)
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
1913
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1914 (defface font-lock-variable-name-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1915 '((((class grayscale) (background light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1916 (:foreground "Gray90" :weight bold :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1917 (((class grayscale) (background dark))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1918 (:foreground "DimGray" :weight bold :slant italic))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1919 (((class color) (min-colors 88) (background light)) (:foreground "DarkGoldenrod"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1920 (((class color) (min-colors 88) (background dark)) (:foreground "LightGoldenrod"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1921 (((class color) (min-colors 16) (background light)) (:foreground "DarkGoldenrod"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1922 (((class color) (min-colors 16) (background dark)) (:foreground "LightGoldenrod"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1923 (((class color) (min-colors 8)) (:foreground "yellow" :weight light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1924 (t (:weight bold :slant italic)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1925 "Font Lock mode face used to highlight variable names."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1926 :group 'font-lock-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1927
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1928 (defface font-lock-type-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1929 '((((class grayscale) (background light)) (:foreground "Gray90" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1930 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1931 (((class color) (min-colors 88) (background light)) (:foreground "ForestGreen"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1932 (((class color) (min-colors 88) (background dark)) (:foreground "PaleGreen"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1933 (((class color) (min-colors 16) (background light)) (:foreground "ForestGreen"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1934 (((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1935 (((class color) (min-colors 8)) (:foreground "green"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1936 (t (:weight bold :underline t)))
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1937 "Font Lock mode face used to highlight type and classes."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1938 :group 'font-lock-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1939
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1940 (defface font-lock-constant-face
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1941 '((((class grayscale) (background light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1942 (:foreground "LightGray" :weight bold :underline t))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1943 (((class grayscale) (background dark))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1944 (:foreground "Gray50" :weight bold :underline t))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1945 (((class color) (min-colors 88) (background light)) (:foreground "CadetBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1946 (((class color) (min-colors 88) (background dark)) (:foreground "Aquamarine"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1947 (((class color) (min-colors 16) (background light)) (:foreground "CadetBlue"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1948 (((class color) (min-colors 16) (background dark)) (:foreground "Aquamarine"))
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1949 (((class color) (min-colors 8)) (:foreground "magenta"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1950 (t (:weight bold :underline t)))
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1951 "Font Lock mode face used to highlight constants and labels."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1952 :group 'font-lock-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1953
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1954 (defface font-lock-warning-face
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 61392
diff changeset
1955 '((((class color) (min-colors 88) (background light)) (:foreground "Red1" :weight bold))
54153
efe95a1385e1 (font-lock-comment-face, font-lock-string-face,
Eli Zaretskii <eliz@gnu.org>
parents: 53710
diff changeset
1956 (((class color) (min-colors 88) (background dark)) (:foreground "Pink" :weight bold))
66678
d3efdaf600d9 (font-lock-warning-face): Use the more vivid red1,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 66579
diff changeset
1957 (((class color) (min-colors 16) (background light)) (:foreground "Red1" :weight bold))
55062
44fb4d4fdf7b (font-lock-preprocessor-face): Remove spurious quote.
Juanma Barranquero <lekktu@gmail.com>
parents: 54550
diff changeset
1958 (((class color) (min-colors 16) (background dark)) (:foreground "Pink" :weight bold))
44fb4d4fdf7b (font-lock-preprocessor-face): Remove spurious quote.
Juanma Barranquero <lekktu@gmail.com>
parents: 54550
diff changeset
1959 (((class color) (min-colors 8)) (:foreground "red"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1960 (t (:inverse-video t :weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1961 "Font Lock mode face used to highlight warnings."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1962 :group 'font-lock-faces)
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1963
62078
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
1964 (defface font-lock-negation-char-face
62253
6bbb1e95d2f7 (font-lock-negation-char-face): Default to "off".
Kim F. Storm <storm@cua.dk>
parents: 62239
diff changeset
1965 '((t nil))
62078
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
1966 "Font Lock mode face used to highlight easy to overlook negation."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1967 :group 'font-lock-faces)
62078
82c979abe63f (font-lock-negation-char-face): New face and variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 61910
diff changeset
1968
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1969 (defface font-lock-preprocessor-face
55062
44fb4d4fdf7b (font-lock-preprocessor-face): Remove spurious quote.
Juanma Barranquero <lekktu@gmail.com>
parents: 54550
diff changeset
1970 '((t :inherit font-lock-builtin-face))
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1971 "Font Lock mode face used to highlight preprocessor directives."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1972 :group 'font-lock-faces)
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1973
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
1974 (defface font-lock-regexp-grouping-backslash
64498
44d210b5de14 (font-lock-regexp-grouping-backslash): Don't
Juri Linkov <juri@jurta.org>
parents: 64265
diff changeset
1975 '((t :inherit bold))
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
1976 "Font Lock mode face for backslashes in Lisp regexp grouping constructs."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1977 :group 'font-lock-faces)
63049
2c644f271d4c (font-lock-regexp-backslash)
Juri Linkov <juri@jurta.org>
parents: 63028
diff changeset
1978
63929
7b7a48be14e2 (font-lock-regexp-grouping-construct): Fix the bogus name from
Eli Zaretskii <eliz@gnu.org>
parents: 63911
diff changeset
1979 (defface font-lock-regexp-grouping-construct
63049
2c644f271d4c (font-lock-regexp-backslash)
Juri Linkov <juri@jurta.org>
parents: 63028
diff changeset
1980 '((t :inherit bold))
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
1981 "Font Lock mode face used to highlight grouping constructs in Lisp regexps."
66956
0f46b2eb27ed (font-lock-faces): Rename this defgroup from
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1982 :group 'font-lock-faces)
63049
2c644f271d4c (font-lock-regexp-backslash)
Juri Linkov <juri@jurta.org>
parents: 63028
diff changeset
1983
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1984 ;;; End of Colour etc. support.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
1985
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1986 ;;; Menu support.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1987
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1988 ;; This section of code is commented out because Emacs does not have real menu
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1989 ;; buttons. (We can mimic them by putting "( ) " or "(X) " at the beginning of
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1990 ;; the menu entry text, but with Xt it looks both ugly and embarrassingly
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1991 ;; amateur.) If/When Emacs gets real menus buttons, put in menu-bar.el after
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1992 ;; the entry for "Text Properties" something like:
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1993 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1994 ;; (define-key menu-bar-edit-menu [font-lock]
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
1995 ;; (cons "Syntax Highlighting" font-lock-menu))
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1996 ;;
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1997 ;; and remove a single ";" from the beginning of each line in the rest of this
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1998 ;; section. Probably the mechanism for telling the menu code what are menu
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
1999 ;; buttons and when they are on or off needs tweaking. I have assumed that the
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
2000 ;; mechanism is via `menu-toggle' and `menu-selected' symbol properties. sm.
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
2001
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2002 ;;;;;###autoload
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2003 ;;(progn
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2004 ;; ;; Make the Font Lock menu.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2005 ;; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting"))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2006 ;; ;; Add the menu items in reverse order.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2007 ;; (define-key font-lock-menu [fontify-less]
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2008 ;; '("Less In Current Buffer" . font-lock-fontify-less))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2009 ;; (define-key font-lock-menu [fontify-more]
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2010 ;; '("More In Current Buffer" . font-lock-fontify-more))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2011 ;; (define-key font-lock-menu [font-lock-sep]
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2012 ;; '("--"))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2013 ;; (define-key font-lock-menu [font-lock-mode]
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2014 ;; '("In Current Buffer" . font-lock-mode))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2015 ;; (define-key font-lock-menu [global-font-lock-mode]
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2016 ;; '("In All Buffers" . global-font-lock-mode)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2017 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2018 ;;;;;###autoload
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2019 ;;(progn
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2020 ;; ;; We put the appropriate `menu-enable' etc. symbol property values on when
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2021 ;; ;; font-lock.el is loaded, so we don't need to autoload the three variables.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2022 ;; (put 'global-font-lock-mode 'menu-toggle t)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2023 ;; (put 'font-lock-mode 'menu-toggle t)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2024 ;; (put 'font-lock-fontify-more 'menu-enable '(identity))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2025 ;; (put 'font-lock-fontify-less 'menu-enable '(identity)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2026 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2027 ;; ;; Put the appropriate symbol property values on now. See above.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2028 ;;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2029 ;;(put 'font-lock-mode 'menu-selected 'font-lock-mode)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2030 ;;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2031 ;;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2032 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2033 ;;(defvar font-lock-fontify-level nil) ; For less/more fontification.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2034 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2035 ;;(defun font-lock-fontify-level (level)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2036 ;; (let ((font-lock-maximum-decoration level))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2037 ;; (when font-lock-mode
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2038 ;; (font-lock-mode))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2039 ;; (font-lock-mode)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2040 ;; (when font-lock-verbose
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2041 ;; (message "Fontifying %s... level %d" (buffer-name) level))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2042 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2043 ;;(defun font-lock-fontify-less ()
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2044 ;; "Fontify the current buffer with less decoration.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2045 ;;See `font-lock-maximum-decoration'."
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2046 ;; (interactive)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2047 ;; ;; Check in case we get called interactively.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2048 ;; (if (nth 1 font-lock-fontify-level)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2049 ;; (font-lock-fontify-level (1- (car font-lock-fontify-level)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2050 ;; (error "No less decoration")))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2051 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2052 ;;(defun font-lock-fontify-more ()
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2053 ;; "Fontify the current buffer with more decoration.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2054 ;;See `font-lock-maximum-decoration'."
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2055 ;; (interactive)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2056 ;; ;; Check in case we get called interactively.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2057 ;; (if (nth 2 font-lock-fontify-level)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2058 ;; (font-lock-fontify-level (1+ (car font-lock-fontify-level)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2059 ;; (error "No more decoration")))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2060 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2061 ;; ;; This should be called by `font-lock-set-defaults'.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2062 ;;(defun font-lock-set-menu ()
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2063 ;; ;; Activate less/more fontification entries if there are multiple levels for
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2064 ;; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2065 ;; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2066 ;; (let ((keywords (or (nth 0 font-lock-defaults)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2067 ;; (nth 1 (assq major-mode font-lock-defaults-alist))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2068 ;; (level (font-lock-value-in-major-mode font-lock-maximum-decoration)))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2069 ;; (make-local-variable 'font-lock-fontify-level)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2070 ;; (if (or (symbolp keywords) (= (length keywords) 1))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2071 ;; (font-lock-unset-menu)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2072 ;; (cond ((eq level t)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2073 ;; (setq level (1- (length keywords))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2074 ;; ((or (null level) (zerop level))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2075 ;; ;; The default level is usually, but not necessarily, level 1.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2076 ;; (setq level (- (length keywords)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2077 ;; (length (member (eval (car keywords))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2078 ;; (mapcar 'eval (cdr keywords))))))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2079 ;; (setq font-lock-fontify-level (list level (> level 1)
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2080 ;; (< level (1- (length keywords))))))))
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2081 ;;
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2082 ;; ;; This should be called by `font-lock-unset-defaults'.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2083 ;;(defun font-lock-unset-menu ()
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2084 ;; ;; Deactivate less/more fontification entries.
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2085 ;; (setq font-lock-fontify-level nil))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
2086
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
2087 ;;; End of Menu support.
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
2088
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
2089 ;;; Various regexp information shared by several modes.
66268
edfe61dd2874 (font-lock-compile-keywords): Add a help-echo to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65960
diff changeset
2090 ;; ;; Information specific to a single mode should go in its load library.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2091
51720
9d8489f40d2c (font-lock-extra-types-widget)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50594
diff changeset
2092 ;; Font Lock support for C, C++, Objective-C and Java modes is now in
9d8489f40d2c (font-lock-extra-types-widget)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50594
diff changeset
2093 ;; cc-fonts.el (and required by cc-mode.el). However, the below function
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
2094 ;; should stay in font-lock.el, since it is used by other libraries. sm.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2095
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2096 (defun font-lock-match-c-style-declaration-item-and-skip-to-next (limit)
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2097 "Match, and move over, any declaration/definition item after point.
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2098 Matches after point, but ignores leading whitespace and `*' characters.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2099 Does not move further than LIMIT.
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2100
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
2101 The expected syntax of a declaration/definition item is `word' (preceded by
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
2102 optional whitespace and `*' characters and proceeded by optional whitespace)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
2103 optionally followed by a `('. Everything following the item (but belonging to
49569
d8d2b16ffa18 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Andreas Schwab <schwab@suse.de>
parents: 49522
diff changeset
2104 it) is expected to be skip-able by `scan-sexps', and items are expected to be
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
2105 separated with a `,' and to be terminated with a `;'.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2106
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2107 Thus the regexp matches after point: word (
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2108 ^^^^ ^
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2109 Where the match subexpressions are: 1 2
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2110
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2111 The item is delimited by (match-beginning 1) and (match-end 1).
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2112 If (match-beginning 2) is non-nil, the item is followed by a `('.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2113
16578
c921b60ee783 (a) add font-lock-keywords-alist, (b) fix compilation of quoted conses in keyword form, (c) make simple font-lock-match-c-style-declaration-item-and-skip-to-next and more complex font-lock-match-c++-style-declaration-item-and-skip-to-next.
Simon Marshall <simon@gnu.org>
parents: 16456
diff changeset
2114 This function could be MATCHER in a MATCH-ANCHORED `font-lock-keywords' item."
40780
9639c00722d3 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40540
diff changeset
2115 (when (looking-at "[ \n\t*]*\\(\\sw+\\)[ \t\n]*\\(((?\\)?")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2116 (when (and (match-end 2) (> (- (match-end 2) (match-beginning 2)) 1))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2117 ;; If `word' is followed by a double open-paren, it's probably
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2118 ;; a macro used for "int myfun P_ ((int arg1))". Let's go back one
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2119 ;; word to try and match `myfun' rather than `P_'.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2120 (let ((pos (point)))
40780
9639c00722d3 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40540
diff changeset
2121 (skip-chars-backward " \t\n")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2122 (skip-syntax-backward "w")
49569
d8d2b16ffa18 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Andreas Schwab <schwab@suse.de>
parents: 49522
diff changeset
2123 (unless (looking-at "\\(\\sw+\\)[ \t\n]*\\sw+[ \t\n]*\\(((?\\)?")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2124 ;; Looks like it was something else, so go back to where we
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2125 ;; were and reset the match data by rematching.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
2126 (goto-char pos)
40780
9639c00722d3 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40540
diff changeset
2127 (looking-at "[ \n\t*]*\\(\\sw+\\)[ \t\n]*\\(((?\\)?"))))
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2128 (save-match-data
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2129 (condition-case nil
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2130 (save-restriction
40780
9639c00722d3 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40540
diff changeset
2131 ;; Restrict to the LIMIT.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2132 (narrow-to-region (point-min) limit)
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2133 (goto-char (match-end 1))
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2134 ;; Move over any item value, etc., to the next item.
40780
9639c00722d3 (font-lock-match-c-style-declaration-item-and-skip-to-next):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40540
diff changeset
2135 (while (not (looking-at "[ \t\n]*\\(\\(,\\)\\|;\\|\\'\\)"))
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2136 (goto-char (or (scan-sexps (point) 1) (point-max))))
89464
3bd06346cb4b (font-lock-match-c-style-declaration-item-and-skip-to-next):
Kenichi Handa <handa@m17n.org>
parents: 43193
diff changeset
2137 (if (match-end 2)
3bd06346cb4b (font-lock-match-c-style-declaration-item-and-skip-to-next):
Kenichi Handa <handa@m17n.org>
parents: 43193
diff changeset
2138 (goto-char (match-end 2))))
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2139 (error t)))))
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2140
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2141 ;; C preprocessor(cpp) is used outside of C, C++ and Objective-C source file.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2142 ;; e.g. assembler code and GNU linker script in Linux kernel.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2143 ;; `cpp-font-lock-keywords' is handy for modes for the files.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2144 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2145 ;; Here we cannot use `regexp-opt' because because regex-opt is not preloaded
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2146 ;; while font-lock.el is preloaded to emacs. So values pre-calculated with
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2147 ;; regexp-opt are used here.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2148
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2149 ;; `cpp-font-lock-keywords-source-directives' is calculated from:
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2150 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2151 ;; (regexp-opt
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2152 ;; '("define" "elif" "else" "endif" "error" "file" "if" "ifdef"
70530
958e92b75789 (cpp-font-lock-keywords-source-directives): Addded
Masatake YAMATO <jet@gyve.org>
parents: 69499
diff changeset
2153 ;; "ifndef" "import" "include" "line" "pragma" "undef" "warning"))
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2154 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2155 (defconst cpp-font-lock-keywords-source-directives
70530
958e92b75789 (cpp-font-lock-keywords-source-directives): Addded
Masatake YAMATO <jet@gyve.org>
parents: 69499
diff changeset
2156 "define\\|e\\(?:l\\(?:if\\|se\\)\\|ndif\\|rror\\)\\|file\\|i\\(?:f\\(?:n?def\\)?\\|mport\\|nclude\\)\\|line\\|pragma\\|undef\\|warning"
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2157 "Regular expressoin used in `cpp-font-lock-keywords'.")
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2158
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2159 ;; `cpp-font-lock-keywords-source-depth' is calculated from:
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2160 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2161 ;; (regexp-opt-depth (regexp-opt
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2162 ;; '("define" "elif" "else" "endif" "error" "file" "if" "ifdef"
70530
958e92b75789 (cpp-font-lock-keywords-source-directives): Addded
Masatake YAMATO <jet@gyve.org>
parents: 69499
diff changeset
2163 ;; "ifndef" "import" "include" "line" "pragma" "undef" "warning")))
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2164 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2165 (defconst cpp-font-lock-keywords-source-depth 0
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2166 "An integer representing regular expression depth of `cpp-font-lock-keywords-source-directives'.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2167 Used in `cpp-font-lock-keywords'.")
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2168
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2169 (defconst cpp-font-lock-keywords
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2170 (let* ((directives cpp-font-lock-keywords-source-directives)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2171 (directives-depth cpp-font-lock-keywords-source-depth))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2172 (list
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2173 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2174 ;; Fontify error directives.
70530
958e92b75789 (cpp-font-lock-keywords-source-directives): Addded
Masatake YAMATO <jet@gyve.org>
parents: 69499
diff changeset
2175 '("^#[ \t]*\\(?:error\\|warning\\)[ \t]+\\(.+\\)" 1 font-lock-warning-face prepend)
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2176 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2177 ;; Fontify filenames in #include <...> preprocessor directives as strings.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2178 '("^#[ \t]*\\(?:import\\|include\\)[ \t]*\\(<[^>\"\n]*>?\\)"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2179 1 font-lock-string-face prepend)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2180 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2181 ;; Fontify function macro names.
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2182 '("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)("
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2183 (1 font-lock-function-name-face prepend)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2184 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2185 ;; Macro arguments.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2186 ((lambda (limit)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2187 (re-search-forward
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2188 "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)"
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2189 (or (save-excursion (re-search-forward ")" limit t))
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2190 limit)
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2191 t))
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2192 nil nil (1 font-lock-variable-name-face prepend)))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2193 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2194 ;; Fontify symbol names in #elif or #if ... defined preprocessor directives.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2195 '("^#[ \t]*\\(?:elif\\|if\\)\\>"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2196 ("\\<\\(defined\\)\\>[ \t]*(?\\([[:alpha:]_][[:alnum:]_]*\\)?" nil nil
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2197 (1 font-lock-builtin-face prepend) (2 font-lock-variable-name-face prepend t)))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2198 ;;
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2199 ;; Fontify otherwise as symbol names, and the preprocessor directive names.
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2200 (list
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2201 (concat "^\\(#[ \t]*\\(?:" directives
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2202 "\\)\\)\\>[ \t!]*\\([[:alpha:]_][[:alnum:]_]*\\)?")
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2203 '(1 font-lock-preprocessor-face prepend)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2204 (list (+ 2 directives-depth)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2205 'font-lock-variable-name-face nil t))))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2206 "Font lock keyords for C preprocessor directives.
94157
f4ec8461e0fc (font-lock-reference-face): Add WHEN to obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 93904
diff changeset
2207 `c-mode', `c++-mode' and `objc-mode' have their own
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2208 font lock keyords for C preprocessor directives. This definition is for the
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2209 other modes in which C preprocessor directives are used. e.g. `asm-mode' and
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2210 `ld-script-mode'.")
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 67996
diff changeset
2211
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
2212
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
2213 ;; Lisp.
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2214
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2215 (defconst lisp-font-lock-keywords-1
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2216 (eval-when-compile
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2217 `(;; Definitions.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2218 (,(concat "(\\(def\\("
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2219 ;; Function declarations.
68234
95acdeaf74a2 (lisp-font-lock-keywords-1): Minor rearrangement.
Richard M. Stallman <rms@gnu.org>
parents: 68134
diff changeset
2220 "\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2221 "setf\\|subst\\*?\\|un\\*?\\|"
67290
562153259d35 (lisp-font-lock-keywords-1): Add define-global-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67201
diff changeset
2222 "ine-\\(condition\\|"
76576
f117baed9372 Fix typo in last commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 76573
diff changeset
2223 "\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2224 "method-combination\\|setf-expander\\|skeleton\\|widget\\|"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2225 "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2226 ;; Variable declarations.
68234
95acdeaf74a2 (lisp-font-lock-keywords-1): Minor rearrangement.
Richard M. Stallman <rms@gnu.org>
parents: 68134
diff changeset
2227 "\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2228 ;; Structure declarations.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2229 "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2230 "\\)\\)\\>"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2231 ;; Any whitespace and defined object.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2232 "[ \t'\(]*"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2233 "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2234 (1 font-lock-keyword-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2235 (9 (cond ((match-beginning 3) font-lock-function-name-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2236 ((match-beginning 6) font-lock-variable-name-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2237 (t font-lock-type-face))
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2238 nil t))
92811
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2239 ;; Emacs Lisp autoload cookies. Supports the slightly different
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2240 ;; forms used by mh-e, calendar, etc.
2dc33caeb08c (lisp-font-lock-keywords-1): Support wider range of
Glenn Morris <rgm@gnu.org>
parents: 92148
diff changeset
2241 ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend)
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2242 ;; Regexp negated char group.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2243 ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)))
17055
f0f8005780cc 1. If PRE-MATCH-FORM returns a suitable number, use that as a value for LIMIT.
Simon Marshall <simon@gnu.org>
parents: 16852
diff changeset
2244 "Subdued level highlighting for Lisp modes.")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2245
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2246 (defconst lisp-font-lock-keywords-2
10879
73ce8261c2ce Added font-lock-maximum-decoration; use it to set lisp-font-lock-keywords, and
Simon Marshall <simon@gnu.org>
parents: 10545
diff changeset
2247 (append lisp-font-lock-keywords-1
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2248 (eval-when-compile
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2249 `(;; Control structures. Emacs Lisp forms.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2250 (,(concat
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2251 "(" (regexp-opt
63049
2c644f271d4c (font-lock-regexp-backslash)
Juri Linkov <juri@jurta.org>
parents: 63028
diff changeset
2252 '("cond" "if" "while" "while-no-input" "let" "let*"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2253 "prog" "progn" "progv" "prog1" "prog2" "prog*"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2254 "inline" "lambda" "save-restriction" "save-excursion"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2255 "save-window-excursion" "save-selected-window"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2256 "save-match-data" "save-current-buffer" "unwind-protect"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2257 "condition-case" "track-mouse"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2258 "eval-after-load" "eval-and-compile" "eval-when-compile"
66323
7f93058a1608 (lisp-font-lock-keywords-2): Add eval-at-startup
Andreas Schwab <schwab@suse.de>
parents: 66291
diff changeset
2259 "eval-when" "eval-at-startup" "eval-next-after-load"
76961
43ce98afcc71 (lisp-font-lock-keywords-2): Add `with-case-table'.
John Paul Wallington <jpw@pobox.com>
parents: 76576
diff changeset
2260 "with-case-table" "with-category-table"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2261 "with-current-buffer" "with-electric-help"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2262 "with-local-quit" "with-no-warnings"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2263 "with-output-to-string" "with-output-to-temp-buffer"
83307
21eea50897a7 Merged from miles@gnu.org--gnu-2005 (patch 69, 313-319)
Karoly Lorentey <lorentey@elte.hu>
parents: 83306 62502
diff changeset
2264 "with-selected-window" "with-selected-frame" "with-syntax-table"
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2265 "with-temp-buffer" "with-temp-file" "with-temp-message"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2266 "with-timeout" "with-timeout-handler") t)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2267 "\\>")
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2268 . 1)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2269 ;; Control structures. Common Lisp forms.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2270 (,(concat
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2271 "(" (regexp-opt
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2272 '("when" "unless" "case" "ecase" "typecase" "etypecase"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2273 "ccase" "ctypecase" "handler-case" "handler-bind"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2274 "restart-bind" "restart-case" "in-package"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2275 "break" "ignore-errors"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2276 "loop" "do" "do*" "dotimes" "dolist" "the" "locally"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2277 "proclaim" "declaim" "declare" "symbol-macrolet"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2278 "lexical-let" "lexical-let*" "flet" "labels" "compiler-let"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2279 "destructuring-bind" "macrolet" "tagbody" "block" "go"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2280 "multiple-value-bind" "multiple-value-prog1"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2281 "return" "return-from"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2282 "with-accessors" "with-compilation-unit"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2283 "with-condition-restarts" "with-hash-table-iterator"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2284 "with-input-from-string" "with-open-file"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2285 "with-open-stream" "with-output-to-string"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2286 "with-package-iterator" "with-simple-restart"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2287 "with-slots" "with-standard-io-syntax") t)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2288 "\\>")
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2289 . 1)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2290 ;; Exit/Feature symbols as constants.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2291 (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>"
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2292 "[ \t']*\\(\\sw+\\)?")
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2293 (1 font-lock-keyword-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2294 (2 font-lock-constant-face nil t))
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2295 ;; Erroneous structures.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2296 ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>" 1 font-lock-warning-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2297 ;; Words inside \\[] tend to be for `substitute-command-keys'.
69264
322d4f69063b (lisp-font-lock-keywords-2): Quote "]"s in regexps when they have no
Eli Zaretskii <eliz@gnu.org>
parents: 68364
diff changeset
2298 ("\\\\\\\\\\[\\(\\sw+\\)\\]" 1 font-lock-constant-face prepend)
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2299 ;; Words inside `' tend to be symbol names.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2300 ("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2301 ;; Constant values.
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2302 ("\\<:\\sw+\\>" 0 font-lock-builtin-face)
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2303 ;; ELisp and CLisp `&' keywords as types.
68364
8c8d4f7c9da5 (lisp-font-lock-keywords-2):
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68234
diff changeset
2304 ("\\<\\&\\sw+\\>" . font-lock-type-face)
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2305 ;; ELisp regexp grouping constructs
62502
8f934f346603 (lisp-font-lock-keywords-2): Do \\) only in strings, because (eq ... ?\\) is fairly frequent.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62413
diff changeset
2306 ((lambda (bound)
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2307 (catch 'found
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2308 ;; The following loop is needed to continue searching after matches
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2309 ;; that do not occur in strings. The associated regexp matches one
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2310 ;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'. `\\\\' has been included to
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2311 ;; avoid highlighting, for example, `\\(' in `\\\\('.
81664
7ef84bc04072 (lisp-font-lock-keywords-2): Recognize the new \(?1:..\)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78000
diff changeset
2312 (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
63911
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2313 (unless (match-beginning 2)
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2314 (let ((face (get-text-property (1- (point)) 'face)))
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2315 (when (or (and (listp face)
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2316 (memq 'font-lock-string-face face))
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2317 (eq 'font-lock-string-face face))
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2318 (throw 'found t)))))))
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2319 (1 'font-lock-regexp-grouping-backslash prepend)
954c9ade6e2b (font-lock-regexp-grouping-backslash): Rename from
Eli Zaretskii <eliz@gnu.org>
parents: 63840
diff changeset
2320 (3 'font-lock-regexp-grouping-construct prepend))
62239
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
2321 ;;; This is too general -- rms.
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
2322 ;;; A user complained that he has functions whose names start with `do'
55168ce0d00d (font-lock-fontify-syntactically-region): Don't use comment-end if
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62235
diff changeset
2323 ;;; and that they get the wrong color.
54255
5cf652dfce17 (lisp-font-lock-keywords-2):
Richard M. Stallman <rms@gnu.org>
parents: 54161
diff changeset
2324 ;;; ;; CL `with-' and `do-' constructs
62413
f0e96503b7e0 (lisp-font-lock-keywords-1): Set `font-lock-negation-char-face' for [^...] char group.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 62362
diff changeset
2325 ;;; ("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
16456
63b6583c9e5c Changes to font-lock-fontify-syntactically-region: (a) the cache position must be a marker, (b) use a loop to look for comment start, some speedups.
Simon Marshall <simon@gnu.org>
parents: 15814
diff changeset
2326 )))
12385
c80966dc0b60 Specify in font-lock-defaults/font-lock-defaults-alist which keywords we can
Simon Marshall <simon@gnu.org>
parents: 12268
diff changeset
2327 "Gaudy level highlighting for Lisp modes.")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2328
12385
c80966dc0b60 Specify in font-lock-defaults/font-lock-defaults-alist which keywords we can
Simon Marshall <simon@gnu.org>
parents: 12268
diff changeset
2329 (defvar lisp-font-lock-keywords lisp-font-lock-keywords-1
c80966dc0b60 Specify in font-lock-defaults/font-lock-defaults-alist which keywords we can
Simon Marshall <simon@gnu.org>
parents: 12268
diff changeset
2330 "Default expressions to highlight in Lisp modes.")
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
2331
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2332 (provide 'font-lock)
39146
d1a5ac2a48eb (toplevel): Require `jit-lock' only if
Gerd Moellmann <gerd@gnu.org>
parents: 38491
diff changeset
2333
58161
5451548f1bd9 (font-lock-fontify-syntactically-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57433
diff changeset
2334 ;; arch-tag: 682327e4-64d8-4057-b20b-1fbb9f1fc54c
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2335 ;;; font-lock.el ends here