annotate lisp/font-lock.el @ 53514:db81ac8829b6

(buffer_posn_from_coords): Return both buffer/string object and image object. Return glyph width and height. (mode_line_string, marginal_area_string): Ditto.
author Kim F. Storm <storm@cua.dk>
date Tue, 06 Jan 2004 22:37:11 +0000
parents decc60fe49d5
children 31ae933487b2
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
51720
9d8489f40d2c (font-lock-extra-types-widget)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50594
diff changeset
3 ;; Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999, 2000, 2001, 02, 2003
27414
d30c57a6b35c (turn-on-font-lock): Don't depend on window-system &c.
Dave Love <fx@gnu.org>
parents: 26920
diff changeset
4 ;; Free Software Foundation, Inc.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
28874
f2f374d8b0bf Update copyright. Remove Simon Marshall's email
Gerd Moellmann <gerd@gnu.org>
parents: 28192
diff changeset
6 ;; Author: jwz, then rms, then sm
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Maintainer: FSF
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: languages, faces
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13982
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13982
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13982
diff changeset
25 ;; Boston, MA 02111-1307, USA.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
29 ;; 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
30 ;; 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
31 ;;
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; Comments will be displayed in `font-lock-comment-face'.
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; 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
34 ;; Regexps are used to display selected patterns in other faces.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
36 ;; 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
37 ;; 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
38 ;; every insertion or deletion.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
40 ;; 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
41 ;;
9487
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
42 ;; (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
44 ;; 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
45 ;;
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
46 ;; (global-font-lock-mode t)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
47 ;;
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
48 ;; 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
49 ;; 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
50 ;; 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
51 ;; 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
52 ;; 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
53
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
54 ;;; 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
55
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 ;; 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
57 ;; 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
58 ;; 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
59 ;; 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
60 ;; 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
61 ;; 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
62 ;;
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
63 ;; 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
64 ;; 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
65 ;; 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
66 ;; the keyword pass. Confused?
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
67 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
68 ;; 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
69 ;; 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
70 ;; 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
71 ;; 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
72 ;; 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
73 ;; (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
74 ;; 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
75 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
76 ;; 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
77 ;; 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
78 ;; 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
79 ;; 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
80 ;; 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
81 ;; 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
82 ;; 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
83 ;; 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
84 ;; 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
85 ;; 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
86 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
87 ;; 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
88 ;; 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
89 ;; (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
90 ;; 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
91 ;; fontifies language reserved words, etc.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
92 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
93 ;; 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
94 ;; 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
95 ;; 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
96 ;; 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
97 ;; 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
98
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
99 ;;; 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
100
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 ;; 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
102 ;; 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
103 ;; 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
104 ;; 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
105 ;; 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
106 ;; 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
107 ;; 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
108 ;; 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
109 ;; (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
110 ;; 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
111 ;; 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
112 ;;
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 ;; 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
114 ;; 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
115
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 ;;; 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
117
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
118 ;; 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
119 ;;
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
120 ;; 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
121 ;; `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
122 ;; `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
123
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
124 ;;; 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
125
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
126 ;; 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
127 ;; 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
128 ;; 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
129 ;; `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
130 ;; 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
131 ;; 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
132 ;;
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
133 ;; (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
134 ;;
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
135 ;; 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
136 ;; 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
137 ;; 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
138
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 ;;; 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
140
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 ;; 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
142 ;; 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
143 ;; 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
144 ;; 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
145 ;; 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
146 ;; 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
147 ;; 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
148 ;;
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
149 ;; (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
150 ;; '(("\\<\\(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
151 ;; ("\\<\\(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
152 ;; "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
153 ;;
f80b2a33df03 * font-lock.el: To make font-lock.el dumpable: (font-lock-display-type,
Simon Marshall <simon@gnu.org>
parents: 9444
diff changeset
154 ;; (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
155 ;; (lambda ()
3d25fe242d2a (font-lock-set-defaults-1): Variable alist is now set in
Colin Walters <walters@gnu.org>
parents: 45445
diff changeset
156 ;; (make-local-variable 'font-lock-defaults)
3d25fe242d2a (font-lock-set-defaults-1): Variable alist is now set in
Colin Walters <walters@gnu.org>
parents: 45445
diff changeset
157 ;; (setq font-lock-defaults '(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
158
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 ;;; 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
160
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 ;; 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
162 ;; 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
163 ;; 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
164 ;; 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
165 ;; 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
166 ;; 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
167 ;; 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
168 ;; 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
169 ;;
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 ;; (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
171 ;; '(("\\<\\(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
172 ;; ("\\<\\(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
173 ;; "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
174 ;;
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 ;; 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
176 ;;
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
177 ;; (make-local-variable 'font-lock-defaults)
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
178 ;; (setq font-lock-defaults '(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
179
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
180 ;; 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
181 ;; 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
182 ;; 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
183 ;; 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
184 ;; 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
185 ;; 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
186 ;; 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
187 ;;
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
188 ;; 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
189 ;;
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
190 ;; - 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
191 ;; 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
192 ;; 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
193 ;; - 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
194 ;; i.e., (a) above.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
195 ;; - 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
196 ;; 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
197 ;; 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
198 ;; - 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
199 ;; 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
200 ;; 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
201 ;; 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
202 ;; - 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
203 ;; 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
204 ;; 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
205 ;; 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
206 ;; - Err, that's it.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
207
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
208 ;;; 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
209
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
210 (require 'syntax)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
211
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
212 ;; Define core `font-lock' group.
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
213 (defgroup font-lock nil
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
214 "Font Lock mode text highlighting package."
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
215 :link '(custom-manual "(emacs)Font Lock")
25286
fb00c7bb8642 Add a :link to font-lock defgroup.
Dave Love <fx@gnu.org>
parents: 25124
diff changeset
216 :link '(custom-manual "(elisp)Font Lock Mode")
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
217 :group 'faces)
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
218
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
219 (defgroup font-lock-highlighting-faces nil
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
220 "Faces for highlighting text."
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
221 :prefix "font-lock-"
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
222 :group 'font-lock)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
223
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
224 (defgroup font-lock-extra-types nil
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
225 "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
226 :group 'font-lock)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
227
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
228 ;; Define support mode groups here to impose `font-lock' group order.
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
229 (defgroup fast-lock nil
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
230 "Font Lock support mode to cache fontification."
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
231 :link '(custom-manual "(emacs)Support Modes")
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
232 :load 'fast-lock
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
233 :group 'font-lock)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
234
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
235 (defgroup lazy-lock nil
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
236 "Font Lock support mode to fontify lazily."
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
237 :link '(custom-manual "(emacs)Support Modes")
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
238 :load 'lazy-lock
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
239 :group 'font-lock)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
240
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
241 (defgroup jit-lock nil
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
242 "Font Lock support mode to fontify just-in-time."
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
243 :link '(custom-manual "(emacs)Support Modes")
25286
fb00c7bb8642 Add a :link to font-lock defgroup.
Dave Love <fx@gnu.org>
parents: 25124
diff changeset
244 :version "21.1"
25124
5ae84fc3bc96 (jit-lock): Fix :load, add :version.
Dave Love <fx@gnu.org>
parents: 25049
diff changeset
245 :load 'jit-lock
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
246 :group 'font-lock)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
247
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
248 ;; User variables.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
249
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
250 (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
251 "*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
252 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
253 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
254 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
255 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
256 ((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
257 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
258 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
259 :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
260 (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
261 (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
262 :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
263 (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
264 (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
265 (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
266 (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
267 (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
268 (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
269 (integer :tag "size")))))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
270 :group 'font-lock)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
272 (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
273 "*Maximum decoration level for fontification.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
274 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
275 If t, use the maximum decoration available.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
276 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
277 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
278 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
279 ((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
280 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
281 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
282 :type '(choice (const :tag "default" nil)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
283 (const :tag "maximum" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
284 (integer :tag "level" 1)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
285 (repeat :menu-tag "mode specific" :tag "mode specific"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
286 :value ((t . t))
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
287 (cons :tag "Instance"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
288 (radio :tag "Mode"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
289 (const :tag "all" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
290 (symbol :tag "name"))
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
291 (radio :tag "Decoration"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
292 (const :tag "default" nil)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
293 (const :tag "maximum" t)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
294 (integer :tag "level" 1)))))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
295 :group 'font-lock)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
296
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
297 (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
298 "*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
299 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
300 :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
301 (other :tag "always" t)
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
302 (integer :tag "size"))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
303 :group 'font-lock)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
304
33360
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 ;; 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
307 ;; 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
308 ;; 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
309 ;; 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
310 ;; 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
311 ;; 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
312 (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
313 "Face name to use for comments.")
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-string-face 'font-lock-string-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
316 "Face name to use for strings.")
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-doc-face 'font-lock-doc-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
319 "Face name to use for documentation.")
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-keyword-face 'font-lock-keyword-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
322 "Face name to use for keywords.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
323
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
324 (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
325 "Face name to use for builtins.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
326
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
327 (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
328 "Face name to use for function names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
329
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
330 (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
331 "Face name to use for variable names.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
332
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
333 (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
334 "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
335
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
336 (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
337 "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
338
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
339 (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
340 "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
341
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
342 (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
343 "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
344
49615
0ddc2f13992e (font-lock-reference-face): Add obsolescence declaration and remove redundant
Juanma Barranquero <lekktu@gmail.com>
parents: 49569
diff changeset
345 (defvar font-lock-reference-face 'font-lock-constant-face)
0ddc2f13992e (font-lock-reference-face): Add obsolescence declaration and remove redundant
Juanma Barranquero <lekktu@gmail.com>
parents: 49569
diff changeset
346 (make-obsolete-variable 'font-lock-reference-face 'font-lock-constant-face)
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
347
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
348 ;; Fontification variables:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
349
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (defvar font-lock-keywords nil
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
351 "A list of the keywords to highlight.
20851
26c5d61bc3fd (font-lock-keywords): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20761
diff changeset
352 Each element should have one of these forms:
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
353
11515
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
354 MATCHER
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
355 (MATCHER . MATCH)
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
356 (MATCHER . FACENAME)
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
357 (MATCHER . HIGHLIGHT)
0ebfc7701ebf Make font-lock.el use compiled keywords; added FN as possible matcher.
Simon Marshall <simon@gnu.org>
parents: 11467
diff changeset
358 (MATCHER HIGHLIGHT ...)
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
359 (eval . FORM)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
361 where MATCHER can be either the regexp to search for, or the function name to
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
362 call to make the search (called with one argument, the limit of the search) and
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
363 return non-nil if it succeeds (and set `match-data' appropriately).
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
364 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
365
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
366 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
367 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
368 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
369
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
370 HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
371
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
372 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
373 typically only MATCH-HIGHLIGHT is required.
13982
baba81b17362 (font-lock-keywords): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13701
diff changeset
374 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
375 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
376 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
377
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
378 MATCH-HIGHLIGHT should be of the form:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
379
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
380 (MATCH FACENAME OVERRIDE LAXMATCH)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
381
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
382 MATCH is the subexpression of MATCHER to be highlighted. FACENAME is an
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
383 expression whose value is the face name to use. Face default attributes
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
384 can be modified via \\[customize]. Instead of a face, FACENAME can
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
385 evaluate to a property list of the form (face VAL1 PROP2 VAL2 PROP3 VAL3 ...)
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
386 in which case all the listed text-properties will be set rather than
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
387 just `face'. In such a case, you will most likely want to put those
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
388 properties in `font-lock-extra-managed-props' or to override
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
389 `font-lock-unfontify-region-function'.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
391 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
392 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
393 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
394 which the new or existing fontification, respectively, takes precedence.
13982
baba81b17362 (font-lock-keywords): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13701
diff changeset
395 If LAXMATCH is non-nil, no error is signaled if there is no MATCH in MATCHER.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
397 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
398
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
399 \"\\\\\\=<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
400 variable `font-lock-keyword-face'.
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
401 (\"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
402 the value of `font-lock-keyword-face'.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
403 (\"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
404 (\"foo\\\\|bar\" 0 foo-bar-face t)
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
405 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
406 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
407 (fubar-match 1 fubar-face)
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
408 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
409 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
410 in the value of `fubar-face'.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
411
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
412 MATCH-ANCHORED should be of the form:
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
413
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
414 (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
415
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
416 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
417 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
418 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
419 the last, instance MATCH-ANCHORED's MATCHER is used. Therefore they can be
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
420 used to initialise before, and cleanup after, MATCHER is used. Typically,
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
421 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
422 MATCHER, before starting with MATCH-ANCHORED's MATCHER. POST-MATCH-FORM might
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
423 be used to move, 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
424
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
425 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
426
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
427 (\"\\\\\\=<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
428
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
429 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
430 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
431 (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
432 initially searched for starting from the end of the match of \"anchor\", and
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
433 searching for subsequent instance of \"anchor\" resumes from where searching
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
434 for \"item\" concluded.)
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
435
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
436 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
437 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
438 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
439 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
440 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
441 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
442
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
443 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
444 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
445 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
446 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
447
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
448 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
449 Be careful when composing regexps for this list; a poorly written pattern can
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
450 dramatically slow things down!")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451
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
452 (defvar font-lock-keywords-alist nil
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
453 "*Alist of `font-lock-keywords' local to a `major-mode'.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
454 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
455 `font-lock-remove-keywords'.")
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
456
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
457 (defvar font-lock-removed-keywords-alist nil
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
458 "*Alist of `font-lock-keywords' removed from `major-mode'.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
459 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
460 `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
461
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
462 (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
463 "*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
464 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
465
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (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
467 "*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
468 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
469 (make-variable-buffer-local 'font-lock-keywords-case-fold-search)
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470
32483
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
471 (defvar font-lock-syntactically-fontified 0
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
472 "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
473 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
474 sometimes be slightly incorrect.")
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
475 (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
476
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
477 (defvar font-lock-syntactic-face-function
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
478 (lambda (state)
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
479 (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
480 "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
481 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
482 `parse-partial-sexp' at the beginning of the region to highlight) and
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
483 should return a face.")
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
484
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
485 (defvar font-lock-syntactic-keywords nil
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
486 "A list of the syntactic keywords to highlight.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
487 Can be the list or the name of a function or variable whose value is the list.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
488 See `font-lock-keywords' for a description of the form of this list;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
489 the differences are listed below. MATCH-HIGHLIGHT should be of the form:
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
490
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
491 (MATCH SYNTAX OVERRIDE LAXMATCH)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
492
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
493 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
494 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
495 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
496
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
497 For example, an element of the form highlights syntactically:
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
498
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
499 (\"\\\\$\\\\(#\\\\)\" 1 \".\")
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
500
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
501 a hash character when following a dollar character, with a SYNTAX of
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
502 \".\" (meaning punctuation syntax). Assuming that the buffer syntax table does
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
503 specify hash characters to have comment start syntax, the element will only
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
504 highlight hash characters that do not follow dollar characters as comments
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
505 syntactically.
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
506
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
507 (\"\\\\('\\\\).\\\\('\\\\)\"
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
508 (1 \"\\\"\")
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
509 (2 \"\\\"\"))
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
510
32509
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
511 both single quotes which surround a single character, with a SYNTAX of
54ef67bbcd42 (font-lock-syntactic-keywords): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32483
diff changeset
512 \"\\\"\" (meaning string quote syntax). Assuming that the buffer syntax table
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
513 does not specify single quotes to have quote syntax, the element will only
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
514 highlight single quotes of the form 'c' as strings syntactically.
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
515 Other forms, such as foo'bar or 'fubar', will not be highlighted as strings.
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
516
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
517 This is normally set via `font-lock-defaults'.")
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
518
8457
c0492d7043b2 (font-lock-syntax-table): New syntax table.
Richard M. Stallman <rms@gnu.org>
parents: 7915
diff changeset
519 (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
520 "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
521 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
522 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
523
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
524 (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
525 "*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
526 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
527 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
528 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
529 syntax analysis and fontification).
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
530
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
531 If this is nil, the beginning of the buffer is used, which is
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
532 always correct but tends to be slow.
41513
92d06d8cd81d (font-lock-cache-state, font-lock-cache-position)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41226
diff changeset
533 This is normally set via `font-lock-defaults'.
45774
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
534 This variable is semi-obsolete; we recommend setting
71755f1fa5a4 (font-lock-beginning-of-syntax-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 45762
diff changeset
535 `syntax-begin-function' instead.")
8457
c0492d7043b2 (font-lock-syntax-table): New syntax table.
Richard M. Stallman <rms@gnu.org>
parents: 7915
diff changeset
536
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
537 (defvar font-lock-mark-block-function nil
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
538 "*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
539 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
540 enclosing textual block and mark at the end.
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
541 This is normally set via `font-lock-defaults'.")
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
542
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
543 (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
544 "Function to use for fontifying the buffer.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
545 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
546
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
547 (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
548 "Function to use for unfontifying the buffer.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
549 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
550 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
551
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
552 (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
553 "Function to use for fontifying a region.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
554 It should take two args, the beginning and end of the region, and an optional
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
555 third arg VERBOSE. If non-nil, the function should print status messages.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
556 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
557
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
558 (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
559 "Function to use for unfontifying a region.
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
560 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
561 This is normally set via `font-lock-defaults'.")
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
562
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
563 (defvar font-lock-inhibit-thing-lock nil
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
564 "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
565 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
566 `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
567
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
568 (defvar font-lock-multiline nil
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
569 "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
570 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
571 If t, always handle multiline patterns.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
572 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
573 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
574
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
575 (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
576
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
577 ;; Font Lock mode.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
578
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
579 (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
580 ;;
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
581 ;; 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
582 (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
583 ;;
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
584 ;; 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
585 ;; 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
586 (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
587 "Bind variables according to VARLIST and eval BODY restoring buffer state."
44229
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
588 (let ((modified (make-symbol "modified")))
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
589 `(let* ,(append varlist
44258
fc8fbdc5ca4c (save-buffer-state): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 44229
diff changeset
590 `((,modified (buffer-modified-p))
44229
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
591 (buffer-undo-list t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
592 (inhibit-read-only t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
593 (inhibit-point-motion-hooks t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
594 (inhibit-modification-hooks t)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
595 deactivate-mark
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
596 buffer-file-name
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
597 buffer-file-truename))
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
598 (progn
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
599 ,@body)
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
600 (unless ,modified
8c0a16af093a (save-buffer-state): Use make-symbol to bind `modified'.
Eli Zaretskii <eliz@gnu.org>
parents: 43835
diff changeset
601 (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
602 (put 'save-buffer-state 'lisp-indent-function 1)
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
603 (def-edebug-spec save-buffer-state let)
19846
f5f2feb0bd0f Try to comment where font-lock-keyword order is important.
Simon Marshall <simon@gnu.org>
parents: 19788
diff changeset
604 ;;
f5f2feb0bd0f Try to comment where font-lock-keyword order is important.
Simon Marshall <simon@gnu.org>
parents: 19788
diff changeset
605 ;; Shut up the byte compiler.
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
606 (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
607
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
608 ;;;###autoload
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
609 (defun font-lock-mode-internal (arg)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
610 ;; Turn on Font Lock mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
611 (when arg
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
612 (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
613 (font-lock-set-defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
614 (font-lock-turn-on-thing-lock)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
615 ;; Fontify the buffer if we have to.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
616 (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
617 (cond (font-lock-fontified
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
618 nil)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
619 ((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
620 (font-lock-fontify-buffer))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
621 (font-lock-verbose
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
622 (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
623 (buffer-name))))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
624 ;; Turn off Font Lock mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
625 (unless font-lock-mode
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
626 (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
627 (font-lock-unfontify-buffer)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
628 (font-lock-turn-off-thing-lock)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
629
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
630 ;;;###autoload
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
631 (defun font-lock-add-keywords (mode keywords &optional append)
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
632 "Add highlighting KEYWORDS for MODE.
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
633 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
634 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
635 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
636 By default they are added at the beginning of the current highlighting list.
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
637 If optional argument APPEND is `set', they are used to replace the current
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
638 highlighting list. If APPEND is any other non-nil value, they are added at the
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
639 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
640
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
641 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
642
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
643 (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
644 '((\"\\\\\\=<\\\\(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
645 (\"\\\\\\=<\\\\(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
646
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
647 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
648 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
649
37693
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
650 When used from an elisp package (such as a minor mode), it is recommended
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
651 to use nil for MODE (and place the call in a loop or on a hook) to avoid
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
652 subtle problems due to details of the implementation.
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
653
47121
ec5f8ce91ceb (font-lock-add-keywords): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 46249
diff changeset
654 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
655 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
656 `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
657 (cond (mode
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
658 ;; If MODE is non-nil, add the KEYWORDS and APPEND 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
659 ;; `font-lock-keywords-alist' so `font-lock-set-defaults' uses them.
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 (let ((spec (cons keywords append)) cell)
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
661 (if (setq cell (assq mode font-lock-keywords-alist))
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
662 (if (eq append 'set)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
663 (setcdr cell (list spec))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
664 (setcdr cell (append (cdr cell) (list spec))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
665 (push (list mode spec) font-lock-keywords-alist)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
666 ;; 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
667 ;; contain the new keywords.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
668 (font-lock-update-removed-keyword-alist mode keywords append))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
669 (t
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
670 ;; Otherwise set or add the keywords now.
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
671 (font-lock-set-defaults)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
672 (if (eq append 'set)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
673 (setq font-lock-keywords keywords)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
674 (font-lock-remove-keywords nil keywords) ;to avoid duplicates
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
675 (let ((old (if (eq (car-safe font-lock-keywords) t)
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
676 (cdr 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
677 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
678 (setq font-lock-keywords (if append
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
679 (append old 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
680 (append keywords old))))))))
26746
d22cd599a91a (font-lock-default-fontify-region): Fix subtle
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26620
diff changeset
681
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
682 (defun font-lock-update-removed-keyword-alist (mode keywords append)
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
683 ;; Update `font-lock-removed-keywords-alist' when adding new
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
684 ;; KEYWORDS to MODE.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
685 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
686 ;; 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
687 ;; `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
688 ;; 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
689 ;; 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
690 ;; 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
691 ;; will not take effect.
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
692 (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
693 (if cell
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
694 (if (eq append 'set)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
695 ;; 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
696 ;; our old keywords that should be removed.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
697 (setq font-lock-removed-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
698 (delq cell font-lock-removed-keywords-alist))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
699 ;; Delete all previously removed keywords.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
700 (dolist (kword keywords)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
701 (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
702 ;; Delete the mode cell if empty.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
703 (if (null (cdr cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
704 (setq font-lock-removed-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
705 (delq cell font-lock-removed-keywords-alist)))))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
706
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
707 ;; Written by Anders Lindgren <andersl@andersl.com>.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
708 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
709 ;; Case study:
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
710 ;; (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
711 ;; 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
712 ;; `font-lock-add-keywords'), global, or both.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
713 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
714 ;; (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
715 ;; `font-lock-keywords-alist'.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
716 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
717 ;; (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
718 ;; 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
719 ;; 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
720 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
721 ;; 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
722 ;; 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
723 ;; is added and removed several times.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
724 ;;
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
725 ;; (II) The keywords are removed from the current buffer.
26746
d22cd599a91a (font-lock-default-fontify-region): Fix subtle
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26620
diff changeset
726 ;;;###autoload
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
727 (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
728 "Remove highlighting KEYWORDS for MODE.
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
729
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
730 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
731 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
732
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
733 When used from an elisp package (such as a minor mode), it is recommended
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
734 to use nil for MODE (and place the call in a loop or on a hook) to avoid
15212455191b Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37522
diff changeset
735 subtle problems due to details of the implementation."
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
736 (cond (mode
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
737 ;; 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
738 (dolist (keyword keywords)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
739 (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
740 ;; 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
741 ;; `font-lock-keywords-alist'.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
742 (when top-cell
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
743 (dolist (keyword-list-append-pair (cdr top-cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
744 ;; `keywords-list-append-pair' is a cons with a list of
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
745 ;; keywords in the car top-cell and the original append
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
746 ;; argument in the cdr top-cell.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
747 (setcar keyword-list-append-pair
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
748 (delete keyword (car keyword-list-append-pair))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
749 ;; Remove keyword list/append pair when the keyword list
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
750 ;; is empty and append doesn't specify `set'. (If it
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
751 ;; should be deleted then previously deleted keywords
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
752 ;; would appear again.)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
753 (let ((cell top-cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
754 (while (cdr cell)
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
755 (if (and (null (car (car (cdr cell))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
756 (not (eq (cdr (car (cdr cell))) 'set)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
757 (setcdr cell (cdr (cdr cell)))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
758 (setq cell (cdr cell)))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
759 ;; 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
760 ;; was deleted.
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
761 (if (null (cdr top-cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
762 (setq font-lock-keywords-alist
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
763 (delq top-cell font-lock-keywords-alist))))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
764 ;; 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
765 (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
766 (if cell
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
767 (unless (member keyword (cdr cell))
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
768 (nconc cell (list keyword)))
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
769 (push (cons mode (list keyword))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
770 font-lock-removed-keywords-alist))))))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
771 (t
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
772 ;; Otherwise remove it immediately.
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
773 (font-lock-set-defaults)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
774 (setq font-lock-keywords (copy-sequence font-lock-keywords))
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
775 (dolist (keyword keywords)
26920
e510f839bc63 System for adding and removing keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 26915
diff changeset
776 (setq font-lock-keywords
27636
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
777 (delete keyword
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
778 ;; The keywords might be compiled.
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
779 (delete (font-lock-compile-keyword keyword)
161ec77aa308 (font-lock-keywords): Fix doc for multiline matches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27414
diff changeset
780 font-lock-keywords)))))))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
781
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
782 ;;; Font Lock Support mode.
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
783
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
784 ;; 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
785 ;; 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
786 ;; 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
787 ;; `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
788 ;; themselves.
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
789
25319
f9b3511a51c4 (font-lock-support-mode): Make `jit-lock-mode'
Gerd Moellmann <gerd@gnu.org>
parents: 25286
diff changeset
790 (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
791 "*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
792 Support modes speed up Font Lock mode by being choosy about when fontification
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
793 occurs. Known support modes are Fast Lock mode (symbol `fast-lock-mode'),
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
794 Lazy Lock mode (symbol `lazy-lock-mode'), and Just-in-time Lock mode (symbol
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
795 `jit-lock-mode'. See those modes for more info.
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
796 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
797 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
798 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
799 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
800 ((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
801 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
802 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
803
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
804 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
805 :type '(choice (const :tag "none" nil)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
806 (const :tag "fast lock" fast-lock-mode)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
807 (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
808 (const :tag "jit lock" jit-lock-mode)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
809 (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
810 :value ((t . jit-lock-mode))
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
811 (cons :tag "Instance"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
812 (radio :tag "Mode"
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
813 (const :tag "all" t)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
814 (symbol :tag "name"))
22892
850946452989 (lisp-font-lock-keywords-1): Fix previous change.
Simon Marshall <simon@gnu.org>
parents: 22857
diff changeset
815 (radio :tag "Support"
850946452989 (lisp-font-lock-keywords-1): Fix previous change.
Simon Marshall <simon@gnu.org>
parents: 22857
diff changeset
816 (const :tag "none" nil)
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
817 (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
818 (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
819 (const :tag "JIT lock" jit-lock-mode)))
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17495
diff changeset
820 ))
29919
08e5e3740bf9 (font-lock-fontify-anchored-keywords): Use line-beginning-position.
Dave Love <fx@gnu.org>
parents: 29709
diff changeset
821 :version "21.1"
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
822 :group 'font-lock)
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
823
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
824 (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
825 (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
826 (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
827
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
828 (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
829 (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
830 (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
831 (fast-lock-mode t))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
832 ((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
833 (lazy-lock-mode t))
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
834 ((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
835 ;; Prepare for jit-lock
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
836 (remove-hook 'after-change-functions
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
837 '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
838 (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
839 'jit-lock-refontify)
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
840 ;; Don't fontify eagerly (and don't abort is the buffer is large).
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
841 (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
842 ;; Use jit-lock.
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
843 (jit-lock-register 'font-lock-fontify-region
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
844 (not font-lock-keywords-only))))))
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
845
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
846 (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
847 (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
848 (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
849 ((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
850 (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
851 ;; 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
852 (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
853 ((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
854 (lazy-lock-mode -1))))
15492
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
855
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
856 (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
857 (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
858 (fast-lock-after-fontify-buffer))
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
859 ;; 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
860 ;; (jit-lock-mode
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
861 ;; (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
862 ((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
863 (lazy-lock-after-fontify-buffer))))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
864
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
865 (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
866 (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
867 (fast-lock-after-unfontify-buffer))
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
868 ;; Useless as well. It's only called when:
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
869 ;; - 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
870 ;; `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
871 ;; - 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
872 ;; any more anyway. -sm
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
873 ;;
29709
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
874 ;; (jit-lock-mode
69ac77ea153c (font-lock-after-fontify-buffer)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28891
diff changeset
875 ;; (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
876 ((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
877 (lazy-lock-after-unfontify-buffer))))
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
878
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
879 ;;; 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
880
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
881 ;;; Fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
882
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
883 ;; 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
884 ;; 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
885 ;; 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
886 ;; 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
887 ;; 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
888 ;; 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
889 ;; 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
890 ;; 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
891 ;; 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
892 ;; 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
893 ;;
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
894 ;; 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
895 ;; 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
896 ;; 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
897 ;; 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
898 ;; 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
899 ;; 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
900 ;; 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
901 ;;
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
902 ;; 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
903 ;; 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
904 ;; 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
905 ;; 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
906 ;; 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
907 ;;
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
908 ;; 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
909 ;; 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
910 ;; 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
911 ;; 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
912 ;; 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
913 ;; `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
914 ;; `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
915 ;; `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
916 ;; 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
917 ;; 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
918 ;; 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
919 ;; 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
920 ;; 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
921
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
922 ;;;###autoload
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
923 (defun font-lock-fontify-buffer ()
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
924 "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
925 (interactive)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
926 (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
927 (funcall font-lock-fontify-buffer-function)))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
928
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
929 (defun font-lock-unfontify-buffer ()
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
930 (funcall font-lock-unfontify-buffer-function))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
931
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
932 (defun font-lock-fontify-region (beg end &optional loudly)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
933 (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
934
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
935 (defun font-lock-unfontify-region (beg end)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
936 (funcall font-lock-unfontify-region-function beg end))
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
937
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
938 (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
939 (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
940 (> (buffer-size) font-lock-verbose)
348f0896b1e7 (font-lock-verbose): Default to 0. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15485
diff changeset
941 font-lock-verbose)))
23751
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
942 (with-temp-message
24002
c6bfff41f2b5 * font-lock.el (font-lock-default-fontify-buffer): When using
Simon Marshall <simon@gnu.org>
parents: 23826
diff changeset
943 (when verbose
c6bfff41f2b5 * font-lock.el (font-lock-default-fontify-buffer): When using
Simon Marshall <simon@gnu.org>
parents: 23826
diff changeset
944 (format "Fontifying %s..." (buffer-name)))
23751
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
945 ;; Make sure we have the right `font-lock-keywords' etc.
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
946 (unless font-lock-mode
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
947 (font-lock-set-defaults))
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
948 ;; 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
949 (save-restriction
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
950 (widen)
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
951 (condition-case nil
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
952 (save-excursion
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
953 (save-match-data
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
954 (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
955 (font-lock-after-fontify-buffer)
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
956 (setq font-lock-fontified t)))
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
957 ;; 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
958 (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
959
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
960 (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
961 ;; 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
962 (save-restriction
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
963 (widen)
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
964 (font-lock-unfontify-region (point-min) (point-max))
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14365
diff changeset
965 (font-lock-after-unfontify-buffer)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
966 (setq font-lock-fontified nil)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
967
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
968 (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
969 "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
970 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
971 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
972
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
973 (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
974 (save-buffer-state
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
975 ((parse-sexp-lookup-properties font-lock-syntactic-keywords)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
976 (old-syntax-table (syntax-table)))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
977 (unwind-protect
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
978 (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
979 (unless font-lock-dont-widen (widen))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
980 ;; 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
981 (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
982 (set-syntax-table font-lock-syntax-table))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
983 ;; check to see if we should expand the beg/end area for
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
984 ;; proper multiline matches
35419
e233da20040a (font-lock-multiline): Default to nil.
Gerd Moellmann <gerd@gnu.org>
parents: 35195
diff changeset
985 (when (and font-lock-multiline
e233da20040a (font-lock-multiline): Default to nil.
Gerd Moellmann <gerd@gnu.org>
parents: 35195
diff changeset
986 (> beg (point-min))
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
987 (get-text-property (1- beg) 'font-lock-multiline))
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
988 ;; We are just after or in a multiline match.
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
989 (setq beg (or (previous-single-property-change
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
990 beg 'font-lock-multiline)
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
991 (point-min)))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
992 (goto-char beg)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
993 (setq beg (line-beginning-position)))
35422
1f7abd8b98dd (font-lock-default-fontify-region): Fix last
Gerd Moellmann <gerd@gnu.org>
parents: 35419
diff changeset
994 (when font-lock-multiline
1f7abd8b98dd (font-lock-default-fontify-region): Fix last
Gerd Moellmann <gerd@gnu.org>
parents: 35419
diff changeset
995 (setq end (or (text-property-any end (point-max)
1f7abd8b98dd (font-lock-default-fontify-region): Fix last
Gerd Moellmann <gerd@gnu.org>
parents: 35419
diff changeset
996 'font-lock-multiline nil)
1f7abd8b98dd (font-lock-default-fontify-region): Fix last
Gerd Moellmann <gerd@gnu.org>
parents: 35419
diff changeset
997 (point-max))))
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
998 (goto-char end)
34324
4d26cf62962c (font-lock-default-fontify-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33642
diff changeset
999 (setq end (line-beginning-position 2))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1000 ;; 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
1001 (font-lock-unfontify-region beg end)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1002 (when font-lock-syntactic-keywords
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1003 (font-lock-fontify-syntactic-keywords-region beg end))
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
1004 (unless font-lock-keywords-only
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1005 (font-lock-fontify-syntactically-region beg end loudly))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1006 (font-lock-fontify-keywords-region beg end loudly))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1007 ;; 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
1008 (set-syntax-table old-syntax-table))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1009
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1010 ;; The following must be rethought, since keywords can override fontification.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1011 ; ;; Now scan for keywords, but not if we are inside a comment now.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1012 ; (or (and (not font-lock-keywords-only)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1013 ; (let ((state (parse-partial-sexp beg end nil nil
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1014 ; font-lock-cache-state)))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1015 ; (or (nth 4 state) (nth 7 state))))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1016 ; (font-lock-fontify-keywords-region beg end))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1017
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1018 (defvar font-lock-extra-managed-props nil
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1019 "Additional text properties managed by font-lock.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1020 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
1021 what properties to clear before refontifying a region.")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1022
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1023 (defun font-lock-default-unfontify-region (beg end)
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
1024 (save-buffer-state nil
46249
54c4053e954f (font-lock-default-unfontify-region): Use remove-list-of-text-properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45774
diff changeset
1025 (remove-list-of-text-properties
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1026 beg end (append
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1027 font-lock-extra-managed-props
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1028 (if font-lock-syntactic-keywords
46249
54c4053e954f (font-lock-default-unfontify-region): Use remove-list-of-text-properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45774
diff changeset
1029 '(syntax-table face font-lock-multiline)
54c4053e954f (font-lock-default-unfontify-region): Use remove-list-of-text-properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45774
diff changeset
1030 '(face font-lock-multiline))))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1031
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1032 ;; 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
1033 (defun font-lock-after-change-function (beg end old-len)
53405
decc60fe49d5 (font-lock-after-change-function): Bind inhibit-quit.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1034 (let ((inhibit-point-motion-hooks t)
decc60fe49d5 (font-lock-after-change-function): Bind inhibit-quit.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1035 (inhibit-quit t))
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1036 (save-excursion
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1037 (save-match-data
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1038 ;; Rescan between start of lines enclosing the region.
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1039 (font-lock-fontify-region
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1040 (progn (goto-char beg) (beginning-of-line) (point))
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1041 (progn (goto-char end) (forward-line 1) (point)))))))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1042
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1043 (defun font-lock-fontify-block (&optional arg)
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1044 "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
1045 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
1046 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
1047 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
1048 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
1049 delimit the region to fontify."
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1050 (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
1051 (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
1052 deactivate-mark)
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1053 ;; 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
1054 (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
1055 (save-excursion
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1056 (save-match-data
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1057 (condition-case error-data
14468
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1058 (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
1059 (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
1060 (font-lock-fontify-region
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1061 (save-excursion (forward-line (- lines)) (point))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1062 (save-excursion (forward-line lines) (point))))
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1063 (funcall font-lock-mark-block-function)
e41a60d26291 Correct specialised fontification and associated stuff.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
1064 (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
1065 ((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
1066
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
1067 (if (boundp 'facemenu-keymap)
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
1068 (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1069
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1070 ;;; End of Fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1071
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1072 ;;; Additional text property functions.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1073
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1074 ;; 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
1075 ;; 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
1076 ;; 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
1077 ;; 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
1078 ;; in Lisp below and commented out. sm.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1079
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1080 (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
1081 "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
1082 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
1083 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
1084 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
1085 (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
1086 (while (/= start end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1087 (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
1088 prev (get-text-property start prop object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1089 (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
1090 (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
1091 object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1092 (setq start next))))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1093
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1094 (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
1095 "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
1096 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
1097 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
1098 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
1099 (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
1100 (while (/= start end)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1101 (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
1102 prev (get-text-property start prop object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1103 (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
1104 (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
1105 object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1106 (setq start next))))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1107
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1108 (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
1109 "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
1110 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
1111 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
1112 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
1113 (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
1114 (while start
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1115 (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
1116 (put-text-property start next prop value object)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1117 (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
1118
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1119 ;; 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
1120 ;; is to `add-text-properties', etc.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1121 ;(defun remove-text-property (start end property &optional object)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1122 ; "Remove a property from 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
1123 ;Argument PROPERTY is the property to remove.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1124 ;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
1125 ;Return t if the property was actually removed, nil otherwise."
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1126 ; (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
1127
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1128 ;; 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
1129 ;; `next-single-property-change' (not `next-single-text-property-change'), etc.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1130 ;(defun remove-single-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
1131 ; "Remove a specific property value from 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
1132 ;Arguments PROP and VALUE specify the property and value to remove. The
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1133 ;resulting property values are not equal to VALUE nor lists containing VALUE.
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1134 ;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
1135 ; (let ((start (text-property-not-all start end prop nil object)) next prev)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1136 ; (while start
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1137 ; (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
1138 ; prev (get-text-property start prop object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1139 ; (cond ((and (symbolp prev) (eq value prev))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1140 ; (remove-text-property start next prop object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1141 ; ((and (listp prev) (memq value prev))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1142 ; (let ((new (delq value prev)))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1143 ; (cond ((null new)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1144 ; (remove-text-property start next prop object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1145 ; ((= (length new) 1)
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1146 ; (put-text-property start next prop (car new) object))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1147 ; (t
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1148 ; (put-text-property start next prop new object))))))
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1149 ; (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
1150
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1151 ;;; End of Additional text property functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1152
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1153 ;;; Syntactic regexp fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1154
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1155 ;; 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
1156 ;; 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
1157 ;; `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
1158 ;; 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
1159 ;; 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
1160 ;; 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
1161 ;; 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
1162
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1163 (defun font-lock-apply-syntactic-highlight (highlight)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1164 "Apply HIGHLIGHT following a match.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1165 HIGHLIGHT should be of the form MATCH-HIGHLIGHT,
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1166 see `font-lock-syntactic-keywords'."
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1167 (let* ((match (nth 0 highlight))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1168 (start (match-beginning match)) (end (match-end match))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1169 (value (nth 1 highlight))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1170 (override (nth 2 highlight)))
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1171 (if (not start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1172 ;; No match but we might not signal an error.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1173 (or (nth 3 highlight)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1174 (error "No match %d in highlight %S" match highlight))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1175 (when (and (consp value) (not (numberp (car value))))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1176 (setq value (eval value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1177 (when (stringp value) (setq value (string-to-syntax value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1178 ;; Flush the syntax-cache. I believe this is not necessary for
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1179 ;; 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
1180 ;; still be necessary for other users of syntax-ppss anyway.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1181 (syntax-ppss-after-change-function start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1182 (cond
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1183 ((not override)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1184 ;; Cannot override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1185 (or (text-property-not-all start end 'syntax-table nil)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1186 (put-text-property start end 'syntax-table value)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1187 ((eq override t)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1188 ;; Override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1189 (put-text-property start end 'syntax-table value))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1190 ((eq override 'keep)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1191 ;; Keep existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1192 (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
1193
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1194 (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
1195 "Fontify according to KEYWORDS until LIMIT.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1196 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
1197 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
1198 (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
1199 ;; Evaluate PRE-MATCH-FORM.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1200 (pre-match-value (eval (nth 1 keywords))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1201 ;; 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
1202 (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
1203 (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
1204 (setq limit (line-end-position)))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1205 (save-match-data
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1206 ;; Find an occurrence of `matcher' before `limit'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1207 (while (if (stringp matcher)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1208 (re-search-forward matcher limit t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1209 (funcall matcher limit))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1210 ;; Apply each highlight to this instance of `matcher'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1211 (setq highlights lowdarks)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1212 (while highlights
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1213 (font-lock-apply-syntactic-highlight (car highlights))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1214 (setq highlights (cdr highlights)))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1215 ;; Evaluate POST-MATCH-FORM.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1216 (eval (nth 2 keywords))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1217
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1218 (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
1219 "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
1220 START should be at the beginning of a line."
32483
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
1221 ;; Ensure the beginning of the file is properly syntactic-fontified.
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
1222 (when (and font-lock-syntactically-fontified
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
1223 (< font-lock-syntactically-fontified start))
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
1224 (setq start (max font-lock-syntactically-fontified (point-min)))
09a7b2ac5750 (font-lock-syntactically-fontified): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32474
diff changeset
1225 (setq font-lock-syntactically-fontified end))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1226 ;; 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
1227 (when (symbolp font-lock-syntactic-keywords)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1228 (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
1229 font-lock-syntactic-keywords)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1230 ;; 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
1231 (unless (eq (car font-lock-syntactic-keywords) t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1232 (setq font-lock-syntactic-keywords (font-lock-compile-keywords
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1233 font-lock-syntactic-keywords)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1234 ;; Get down to business.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1235 (let ((case-fold-search font-lock-keywords-case-fold-search)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1236 (keywords (cdr font-lock-syntactic-keywords))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1237 keyword matcher highlights)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1238 (while keywords
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1239 ;; 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
1240 (setq keyword (car keywords) matcher (car keyword))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1241 (goto-char start)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1242 (while (if (stringp matcher)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1243 (re-search-forward matcher end t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1244 (funcall matcher end))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1245 ;; 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
1246 ;; specific highlights or more keywords anchored to `matcher'.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1247 (setq highlights (cdr keyword))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1248 (while highlights
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1249 (if (numberp (car (car highlights)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1250 (font-lock-apply-syntactic-highlight (car highlights))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1251 (font-lock-fontify-syntactic-anchored-keywords (car highlights)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1252 end))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1253 (setq highlights (cdr highlights))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1254 (setq keywords (cdr keywords)))))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1255
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1256 ;;; End of Syntactic regexp fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1257
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1258 ;;; Syntactic fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1259
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1260 (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
1261 "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
1262 START should be at the beginning of a line."
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1263 (let (state face beg)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1264 (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name)))
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1265 (goto-char start)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1266 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1267 ;; Find the state at the `beginning-of-line' before `start'.
41513
92d06d8cd81d (font-lock-cache-state, font-lock-cache-position)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41226
diff changeset
1268 (setq state (or ppss (syntax-ppss start)))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1269 ;;
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1270 ;; Find each interesting place between here and `end'.
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1271 (while
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1272 (progn
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1273 (when (or (nth 3 state) (nth 4 state))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1274 (setq face (funcall font-lock-syntactic-face-function state))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1275 (setq beg (max (nth 8 state) start))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1276 (setq state (parse-partial-sexp (point) end nil nil state
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1277 'syntax-table))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1278 (when face (put-text-property beg (point) 'face face)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1279 (setq state (parse-partial-sexp (point) end nil nil state
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1280 'syntax-table))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1281 (< (point) end)))))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1282
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1283 ;;; End of Syntactic fontification functions.
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1284
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1285 ;;; Keyword regexp fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1286
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1287 (defsubst font-lock-apply-highlight (highlight)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1288 "Apply HIGHLIGHT following a match.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1289 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
1290 (let* ((match (nth 0 highlight))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1291 (start (match-beginning match)) (end (match-end match))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1292 (override (nth 2 highlight)))
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1293 (if (not start)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1294 ;; No match but we might not signal an error.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1295 (or (nth 3 highlight)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1296 (error "No match %d in highlight %S" match highlight))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1297 (let ((val (eval (nth 1 highlight))))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1298 (when (eq (car-safe val) 'face)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1299 (add-text-properties start end (cddr val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1300 (setq val (cadr val)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1301 (cond
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1302 ((not override)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1303 ;; Cannot override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1304 (or (text-property-not-all start end 'face nil)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1305 (put-text-property start end 'face val)))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1306 ((eq override t)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1307 ;; Override existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1308 (put-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1309 ((eq override 'prepend)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1310 ;; Prepend to existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1311 (font-lock-prepend-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1312 ((eq override 'append)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1313 ;; Append to existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1314 (font-lock-append-text-property start end 'face val))
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1315 ((eq override 'keep)
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1316 ;; Keep existing fontification.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1317 (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
1318
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1319 (defsubst font-lock-fontify-anchored-keywords (keywords limit)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1320 "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
1321 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
1322 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
1323 (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
1324 (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
1325 ;; 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
1326 (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
1327 ;; 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
1328 (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
1329 (setq limit (line-end-position))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1330 (setq limit pre-match-value)
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1331 (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
1332 ;; this is a multiline anchored match
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1333 ;; (setq font-lock-multiline t)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1334 (put-text-property (if (= limit (line-beginning-position 2))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1335 (1- limit)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1336 (min lead-start (point)))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1337 limit
32216
82e4865603dd (font-lock-defaults-alist): Remove the TeX entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31969
diff changeset
1338 'font-lock-multiline t)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1339 (save-match-data
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1340 ;; 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
1341 (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
1342 (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
1343 (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
1344 (funcall matcher limit)))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1345 ;; 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
1346 (setq highlights lowdarks)
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1347 (while highlights
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1348 (font-lock-apply-highlight (car highlights))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1349 (setq highlights (cdr highlights)))))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1350 ;; Evaluate POST-MATCH-FORM.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1351 (eval (nth 2 keywords))))
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1352
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1353 (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
1354 "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
1355 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
1356 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
1357 (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
1358 (setq font-lock-keywords
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1359 (font-lock-compile-keywords font-lock-keywords t)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1360 (let ((case-fold-search font-lock-keywords-case-fold-search)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1361 (keywords (cdr font-lock-keywords))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1362 (bufname (buffer-name)) (count 0)
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1363 keyword matcher highlights)
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1364 ;;
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1365 ;; 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
1366 (while keywords
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1367 (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
1368 (make-string (incf count) ?.)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1369 ;;
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1370 ;; 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
1371 (setq keyword (car keywords) matcher (car keyword))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1372 (goto-char start)
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1373 (while (and (< (point) end)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1374 (if (stringp matcher)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1375 (re-search-forward matcher end t)
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1376 (funcall matcher end)))
26775
ea2b51ce35a7 (font-lock-multiline): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26746
diff changeset
1377 (when (and font-lock-multiline
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1378 (>= (point)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1379 (save-excursion (goto-char (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1380 (forward-line 1) (point))))
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1381 ;; this is a multiline regexp match
33163
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1382 ;; (setq font-lock-multiline t)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1383 (put-text-property (if (= (point)
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1384 (save-excursion
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1385 (goto-char (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1386 (forward-line 1) (point)))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1387 (1- (point))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1388 (match-beginning 0))
aebffd7162d1 (font-lock-buffers): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32573
diff changeset
1389 (point)
25596
359d6e7a6ffc (font-lock-multiline): New text property contains
Richard M. Stallman <rms@gnu.org>
parents: 25331
diff changeset
1390 'font-lock-multiline t))
13440
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1391 ;; 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
1392 ;; 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
1393 (setq highlights (cdr keyword))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1394 (while highlights
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1395 (if (numberp (car (car highlights)))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1396 (font-lock-apply-highlight (car highlights))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1397 (font-lock-fontify-anchored-keywords (car highlights) end))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1398 (setq highlights (cdr highlights))))
e8cd2c9309c8 1. Use local hooks, not local variables.
Simon Marshall <simon@gnu.org>
parents: 13337
diff changeset
1399 (setq keywords (cdr keywords)))))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1400
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1401 ;;; End of Keyword regexp fontification functions.
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1402
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1403 ;; Various functions.
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1404
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1405 (defun font-lock-compile-keywords (keywords &optional regexp)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1406 "Compile KEYWORDS into the form (t KEYWORD ...).
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1407 Here KEYWORD 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
1408 `font-lock-keywords' doc string.
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1409 If REGEXP is non-nil, it means these keywords are used for
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1410 `font-lock-keywords' rather than for `font-lock-syntactic-keywords'."
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1411 (if (eq (car-safe keywords) t)
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1412 keywords
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1413 (setq keywords (cons t (mapcar 'font-lock-compile-keyword keywords)))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1414 (if (and regexp
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1415 (eq (or syntax-begin-function
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1416 font-lock-beginning-of-syntax-function)
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1417 'beginning-of-defun)
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1418 (not beginning-of-defun-function))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1419 ;; 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
1420 ;; 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
1421 (nconc keywords
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1422 `((,(if defun-prompt-regexp
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1423 (concat "^\\(?:" defun-prompt-regexp "\\)?\\s(")
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1424 "^\\s(")
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1425 (0
41513
92d06d8cd81d (font-lock-cache-state, font-lock-cache-position)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41226
diff changeset
1426 (if (memq (get-text-property (1- (point)) 'face)
41226
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1427 '(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
1428 font-lock-comment-face))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1429 font-lock-warning-face)
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1430 prepend)))))
170c7bb7fc74 (font-lock-compile-keywords): New arg `regexp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40780
diff changeset
1431 keywords))
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1432
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1433 (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
1434 (cond ((nlistp keyword) ; MATCHER
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1435 (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
1436 ((eq (car keyword) 'eval) ; (eval . FORM)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1437 (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
1438 ((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
1439 ;; 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
1440 (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
1441 (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
1442 (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
1443 ((numberp (cdr keyword)) ; (MATCHER . MATCH)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1444 (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
1445 ((symbolp (cdr keyword)) ; (MATCHER . FACENAME)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1446 (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
1447 ((nlistp (nth 1 keyword)) ; (MATCHER . HIGHLIGHT)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1448 (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
1449 (t ; (MATCHER HIGHLIGHT ...)
14365
ef148b168aad Support for buffer local fontification functions.
Simon Marshall <simon@gnu.org>
parents: 14266
diff changeset
1450 keyword)))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1451
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1452 (defun font-lock-eval-keywords (keywords)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1453 "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
1454 (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
1455 keywords
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1456 (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
1457 (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
1458 (eval keywords)))))
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1459
14708
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1460 (defun font-lock-value-in-major-mode (alist)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1461 "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
1462 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
1463 (if (consp alist)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1464 (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
1465 alist))
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1466
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1467 (defun font-lock-choose-keywords (keywords level)
26620
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1468 "Return LEVELth element of KEYWORDS.
ca5397ec67cb Doc fixes.
Dave Love <fx@gnu.org>
parents: 25720
diff changeset
1469 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
1470 \(1- (length KEYWORDS))."
32306
86a849ccfae1 (font-lock-defaults): Make buffer-local.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32272
diff changeset
1471 (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
1472 keywords)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1473 ((numberp level)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1474 (or (nth level keywords) (car (reverse keywords))))
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1475 ((eq level t)
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1476 (car (reverse keywords)))
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1477 (t
da278f255507 Make global-font-lock-mode show status messages, and fontification interruptable.
Simon Marshall <simon@gnu.org>
parents: 14516
diff changeset
1478 (car keywords))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1479
50594
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1480 (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
1481
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1482 (defun font-lock-set-defaults ()
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1483 "Set fontification defaults appropriately for this mode.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1484 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
1485 `font-lock-defaults-alist') and `font-lock-maximum-decoration'."
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1486 ;; Set fontification defaults iff not previously set.
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1487 (unless font-lock-set-defaults
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1488 (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
1489 (make-local-variable 'font-lock-fontified)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1490 (make-local-variable 'font-lock-multiline)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1491 (let* ((defaults (or font-lock-defaults
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1492 (cdr (assq major-mode font-lock-defaults-alist))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1493 (keywords
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1494 (font-lock-choose-keywords (nth 0 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1495 (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
1496 (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
1497 (removed-keywords
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1498 (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
1499 (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
1500 ;; Syntactic fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1501 (when (nth 1 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1502 (set (make-local-variable 'font-lock-keywords-only) t))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1503 ;; Case fold during regexp fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1504 (when (nth 2 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1505 (set (make-local-variable 'font-lock-keywords-case-fold-search) t))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1506 ;; Syntax table for regexp and syntactic fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1507 (when (nth 3 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1508 (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
1509 (copy-syntax-table (syntax-table)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1510 (dolist (selem (nth 3 defaults))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1511 ;; 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
1512 (let ((syntax (cdr selem)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1513 (dolist (char (if (numberp (car selem))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1514 (list (car selem))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1515 (mapcar 'identity (car selem))))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1516 (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
1517 ;; Syntax function for syntactic fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1518 (when (nth 4 defaults)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1519 (set (make-local-variable 'font-lock-beginning-of-syntax-function)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1520 (nth 4 defaults)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1521 ;; Variable alist?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1522 (dolist (x (nthcdr 5 defaults))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1523 (set (make-local-variable (car x)) (cdr x)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1524 ;; Setup `font-lock-keywords' last because its value might depend
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1525 ;; 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
1526 ;; font-lock-beginning-of-syntax-function).
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1527 (set (make-local-variable 'font-lock-keywords)
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1528 (font-lock-compile-keywords (font-lock-eval-keywords keywords) t))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1529 ;; Local fontification?
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1530 (while local
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1531 (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
1532 (setq local (cdr local)))
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1533 (when removed-keywords
09c07c654b23 (font-lock-multiline, font-lock-fontified)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50588
diff changeset
1534 (font-lock-remove-keywords nil removed-keywords)))))
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1535
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1536 ;;; Colour etc. support.
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1538 ;; Originally face attributes were specified via `font-lock-face-attributes'.
18332
ee997de5b74b Rearrange custom options. Also enable custom control of Global Font Lock mode.
Simon Marshall <simon@gnu.org>
parents: 18025
diff changeset
1539 ;; Users then changed the default face attributes by setting that variable.
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1540 ;; However, we try and be back-compatible and respect its value if set except
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1541 ;; for faces where M-x customize has been used to save changes for the face.
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1542 (when (boundp 'font-lock-face-attributes)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1543 (let ((face-attributes font-lock-face-attributes))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1544 (while face-attributes
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1545 (let* ((face-attribute (pop face-attributes))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1546 (face (car face-attribute)))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1547 ;; Rustle up a `defface' SPEC from a `font-lock-face-attributes' entry.
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1548 (unless (get face 'saved-face)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1549 (let ((foreground (nth 1 face-attribute))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1550 (background (nth 2 face-attribute))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1551 (bold-p (nth 3 face-attribute))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1552 (italic-p (nth 4 face-attribute))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1553 (underline-p (nth 5 face-attribute))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1554 face-spec)
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1555 (when foreground
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1556 (setq face-spec (cons ':foreground (cons foreground face-spec))))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1557 (when background
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1558 (setq face-spec (cons ':background (cons background face-spec))))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1559 (when bold-p
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1560 (setq face-spec (append '(:weight bold) face-spec)))
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1561 (when italic-p
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1562 (setq face-spec (append '(:slant italic) face-spec)))
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1563 (when underline-p
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1564 (setq face-spec (append '(:underline t) face-spec)))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1565 (custom-declare-face face (list (list t face-spec)) nil)))))))
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1566
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1567 ;; But now we do it the custom way. Note that `defface' will not overwrite any
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1568 ;; faces declared above via `custom-declare-face'.
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1569 (defface font-lock-comment-face
32573
8005157ad452 (font-lock-comment-face): Define a separate default
Eli Zaretskii <eliz@gnu.org>
parents: 32509
diff changeset
1570 '((((type tty pc) (class color) (background light)) (:foreground "red"))
38056
f912becdb93a (font-lock-comment-face): For tty's with dark
Eli Zaretskii <eliz@gnu.org>
parents: 37829
diff changeset
1571 (((type tty pc) (class color) (background dark)) (:foreground "red1"))
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1572 (((class grayscale) (background light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1573 (:foreground "DimGray" :weight bold :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1574 (((class grayscale) (background dark))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1575 (:foreground "LightGray" :weight bold :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1576 (((class color) (background light)) (:foreground "Firebrick"))
32474
fc8c8c50646e (font-lock-comment-face): Change dark-background,
Miles Bader <miles@gnu.org>
parents: 32306
diff changeset
1577 (((class color) (background dark)) (:foreground "chocolate1"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1578 (t (:weight bold :slant italic)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1579 "Font Lock mode face used to highlight comments."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1580 :group 'font-lock-highlighting-faces)
16852
70e9b1d69d0d Fix additional text prop fns to behave as proposed builtins.
Simon Marshall <simon@gnu.org>
parents: 16578
diff changeset
1581
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1582 (defface font-lock-string-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1583 '((((type tty) (class color)) (:foreground "green"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1584 (((class grayscale) (background light)) (:foreground "DimGray" :slant italic))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1585 (((class grayscale) (background dark)) (:foreground "LightGray" :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1586 (((class color) (background light)) (:foreground "RosyBrown"))
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1587 (((class color) (background dark)) (:foreground "LightSalmon"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1588 (t (:slant italic)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1589 "Font Lock mode face used to highlight strings."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1590 :group 'font-lock-highlighting-faces)
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
1591
33360
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1592 (defface font-lock-doc-face
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1593 '((t :inherit font-lock-string-face))
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1594 "Font Lock mode face used to highlight documentation."
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1595 :group 'font-lock-highlighting-faces)
cda8c854bb02 (font-lock-*-face) <defvar>: Move.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33163
diff changeset
1596
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1597 (defface font-lock-keyword-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1598 '((((type tty) (class color)) (:foreground "cyan" :weight bold))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1599 (((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1600 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1601 (((class color) (background light)) (:foreground "Purple"))
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1602 (((class color) (background dark)) (:foreground "Cyan"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1603 (t (:weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1604 "Font Lock mode face used to highlight keywords."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1605 :group 'font-lock-highlighting-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1606
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1607 (defface font-lock-builtin-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1608 '((((type tty) (class color)) (:foreground "blue" :weight light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1609 (((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1610 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1611 (((class color) (background light)) (:foreground "Orchid"))
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1612 (((class color) (background dark)) (:foreground "LightSteelBlue"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1613 (t (:weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1614 "Font Lock mode face used to highlight builtins."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1615 :group 'font-lock-highlighting-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1616
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1617 (defface font-lock-function-name-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1618 '((((type tty) (class color)) (:foreground "blue" :weight bold))
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1619 (((class color) (background light)) (:foreground "Blue"))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1620 (((class color) (background dark)) (:foreground "LightSkyBlue"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1621 (t (:inverse-video t :weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1622 "Font Lock mode face used to highlight function names."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1623 :group 'font-lock-highlighting-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
1624
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1625 (defface font-lock-variable-name-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1626 '((((type tty) (class color)) (:foreground "yellow" :weight light))
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1627 (((class grayscale) (background light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1628 (:foreground "Gray90" :weight bold :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1629 (((class grayscale) (background dark))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1630 (:foreground "DimGray" :weight bold :slant italic))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1631 (((class color) (background light)) (:foreground "DarkGoldenrod"))
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1632 (((class color) (background dark)) (:foreground "LightGoldenrod"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1633 (t (:weight bold :slant italic)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1634 "Font Lock mode face used to highlight variable names."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1635 :group 'font-lock-highlighting-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1636
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1637 (defface font-lock-type-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1638 '((((type tty) (class color)) (:foreground "green"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1639 (((class grayscale) (background light)) (:foreground "Gray90" :weight bold))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1640 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1641 (((class color) (background light)) (:foreground "ForestGreen"))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1642 (((class color) (background dark)) (:foreground "PaleGreen"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1643 (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
1644 "Font Lock mode face used to highlight type and classes."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1645 :group 'font-lock-highlighting-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1646
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1647 (defface font-lock-constant-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1648 '((((type tty) (class color)) (:foreground "magenta"))
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1649 (((class grayscale) (background light))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1650 (:foreground "LightGray" :weight bold :underline t))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1651 (((class grayscale) (background dark))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1652 (:foreground "Gray50" :weight bold :underline t))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1653 (((class color) (background light)) (:foreground "CadetBlue"))
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1654 (((class color) (background dark)) (:foreground "Aquamarine"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1655 (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
1656 "Font Lock mode face used to highlight constants and labels."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1657 :group 'font-lock-highlighting-faces)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1658
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1659 (defface font-lock-warning-face
25048
6d32371bea44 (top-level): Add jit-lock-mode as new support mode.
Gerd Moellmann <gerd@gnu.org>
parents: 25045
diff changeset
1660 '((((type tty) (class color)) (:foreground "red"))
42449
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1661 (((class color) (background light)) (:foreground "Red" :weight bold))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1662 (((class color) (background dark)) (:foreground "Pink" :weight bold))
b4510b1b83f3 (initializing from font-lock-face-attributes):
Richard M. Stallman <rms@gnu.org>
parents: 41934
diff changeset
1663 (t (:inverse-video t :weight bold)))
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1664 "Font Lock mode face used to highlight warnings."
17543
9b75a01e03e5 Respect font-lock-face-attributes and custom fixes.
Simon Marshall <simon@gnu.org>
parents: 17507
diff changeset
1665 :group 'font-lock-highlighting-faces)
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1666
50588
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1667 (defface font-lock-preprocessor-face
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1668 '((t :inherit 'font-lock-builtin-face))
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1669 "Font Lock mode face used to highlight preprocessor directives."
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1670 :group 'font-lock-highlighting-faces)
7bfe36160365 (font-lock-preprocessor-face): New var and face.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49615
diff changeset
1671
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1672 ;;; End of Colour etc. support.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
1673
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
1674 ;;; 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
1675
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
1676 ;; 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
1677 ;; 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
1678 ;; 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
1679 ;; 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
1680 ;; 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
1681 ;;
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
1682 ;; (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
1683 ;; (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
1684 ;;
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
1685 ;; 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
1686 ;; 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
1687 ;; 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
1688 ;; 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
1689
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
1690 ;;;;###autoload
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
1691 ;(progn
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
1692 ; ;; Make the Font Lock 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
1693 ; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting"))
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
1694 ; ;; Add the menu items in reverse order.
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
1695 ; (define-key font-lock-menu [fontify-less]
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
1696 ; '("Less In Current Buffer" . font-lock-fontify-less))
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
1697 ; (define-key font-lock-menu [fontify-more]
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
1698 ; '("More In Current Buffer" . font-lock-fontify-more))
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
1699 ; (define-key font-lock-menu [font-lock-sep]
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
1700 ; '("--"))
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
1701 ; (define-key font-lock-menu [font-lock-mode]
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
1702 ; '("In Current Buffer" . font-lock-mode))
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
1703 ; (define-key font-lock-menu [global-font-lock-mode]
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
1704 ; '("In All Buffers" . global-font-lock-mode)))
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
1705 ;
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
1706 ;;;;###autoload
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
1707 ;(progn
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
1708 ; ;; We put the appropriate `menu-enable' etc. symbol property values on when
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
1709 ; ;; font-lock.el is loaded, so we don't need to autoload the three variables.
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
1710 ; (put 'global-font-lock-mode 'menu-toggle t)
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
1711 ; (put 'font-lock-mode 'menu-toggle t)
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
1712 ; (put 'font-lock-fontify-more 'menu-enable '(identity))
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
1713 ; (put 'font-lock-fontify-less 'menu-enable '(identity)))
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
1714 ;
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
1715 ;;; Put the appropriate symbol property values on now. See above.
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
1716 ;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode)
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
1717 ;(put 'font-lock-mode 'menu-selected 'font-lock-mode)
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
1718 ;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level))
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
1719 ;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level))
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
1720 ;
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
1721 ;(defvar font-lock-fontify-level nil) ; For less/more 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
1722 ;
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
1723 ;(defun font-lock-fontify-level (level)
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
1724 ; (let ((font-lock-maximum-decoration level))
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
1725 ; (when font-lock-mode
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
1726 ; (font-lock-mode))
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
1727 ; (font-lock-mode)
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
1728 ; (when font-lock-verbose
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
1729 ; (message "Fontifying %s... level %d" (buffer-name) level))))
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
1730 ;
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
1731 ;(defun font-lock-fontify-less ()
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
1732 ; "Fontify the current buffer with less decoration.
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
1733 ;See `font-lock-maximum-decoration'."
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
1734 ; (interactive)
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
1735 ; ;; Check in case we get called interactively.
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
1736 ; (if (nth 1 font-lock-fontify-level)
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
1737 ; (font-lock-fontify-level (1- (car font-lock-fontify-level)))
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
1738 ; (error "No less decoration")))
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
1739 ;
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
1740 ;(defun font-lock-fontify-more ()
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
1741 ; "Fontify the current buffer with more decoration.
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
1742 ;See `font-lock-maximum-decoration'."
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
1743 ; (interactive)
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
1744 ; ;; Check in case we get called interactively.
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
1745 ; (if (nth 2 font-lock-fontify-level)
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
1746 ; (font-lock-fontify-level (1+ (car font-lock-fontify-level)))
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
1747 ; (error "No more decoration")))
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
1748 ;
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
1749 ;;; This should be called by `font-lock-set-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
1750 ;(defun font-lock-set-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
1751 ; ;; Activate less/more fontification entries if there are multiple levels for
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
1752 ; ;; the current buffer. Sets `font-lock-fontify-level' to be of the 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
1753 ; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation.
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
1754 ; (let ((keywords (or (nth 0 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
1755 ; (nth 1 (assq major-mode font-lock-defaults-alist))))
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
1756 ; (level (font-lock-value-in-major-mode font-lock-maximum-decoration)))
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
1757 ; (make-local-variable 'font-lock-fontify-level)
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
1758 ; (if (or (symbolp keywords) (= (length keywords) 1))
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
1759 ; (font-lock-unset-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
1760 ; (cond ((eq level t)
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
1761 ; (setq level (1- (length 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
1762 ; ((or (null level) (zerop level))
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
1763 ; ;; The default level is usually, but not necessarily, level 1.
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
1764 ; (setq level (- (length 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
1765 ; (length (member (eval (car 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
1766 ; (mapcar 'eval (cdr 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
1767 ; (setq font-lock-fontify-level (list level (> level 1)
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
1768 ; (< level (1- (length 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
1769 ;
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
1770 ;;; This should be called by `font-lock-unset-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
1771 ;(defun font-lock-unset-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
1772 ; ;; Deactivate less/more fontification entries.
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
1773 ; (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
1774
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1775 ;;; 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
1776
13299
d6bfe124472c General reorganisation; moving and renaming etc.
Simon Marshall <simon@gnu.org>
parents: 12813
diff changeset
1777 ;;; Various regexp information shared by several modes.
9389
fec6bd86e836 (compilation-mode-font-lock-keywords,
Richard M. Stallman <rms@gnu.org>
parents: 9350
diff changeset
1778 ;;; 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
1779
51720
9d8489f40d2c (font-lock-extra-types-widget)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50594
diff changeset
1780 ;; 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
1781 ;; 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
1782 ;; 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
1783
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
1784 (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
1785 "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
1786 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
1787 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
1788
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1789 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
1790 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
1791 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
1792 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
1793 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
1794
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
1795 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
1796 ^^^^ ^
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
1797 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
1798
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
1799 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
1800 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
1801
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
1802 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
1803 (when (looking-at "[ \n\t*]*\\(\\sw+\\)[ \t\n]*\\(((?\\)?")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1804 (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
1805 ;; 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
1806 ;; 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
1807 ;; word to try and match `myfun' rather than `P_'.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1808 (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
1809 (skip-chars-backward " \t\n")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1810 (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
1811 (unless (looking-at "\\(\\sw+\\)[ \t\n]*\\sw+[ \t\n]*\\(((?\\)?")
40394
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1812 ;; 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
1813 ;; were and reset the match data by rematching.
b2fcb3933879 Require `syntax'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40339
diff changeset
1814 (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
1815 (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
1816 (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
1817 (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
1818 (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
1819 ;; 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
1820 (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
1821 (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
1822 ;; 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
1823 (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
1824 (goto-char (or (scan-sexps (point) 1) (point-max))))
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
1825 (goto-char (match-end 2)))
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
1826 (error t)))))
18463
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1827
4f630b3e8f43 split up scheme and tex support; wrap inhibit-point-motion-hooks where nec.
Simon Marshall <simon@gnu.org>
parents: 18332
diff changeset
1828 ;; 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
1829
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830 (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
1831 (eval-when-compile
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
1832 (list
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1833 ;;
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1834 ;; Definitions.
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1835 (list (concat "(\\(def\\("
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1836 ;; Function declarations.
37829
26eb27929419 (lisp-font-lock-keywords-1): Add `defvaralias'.
Gerd Moellmann <gerd@gnu.org>
parents: 37693
diff changeset
1837 "\\(advice\\|varalias\\|alias\\|generic\\|macro\\*?\\|method\\|"
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1838 "setf\\|subst\\*?\\|un\\*?\\|"
28891
70c93cd90fc6 (lisp-font-lock-keywords-1): Add define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28874
diff changeset
1839 "ine-\\(condition\\|\\(?:derived\\|minor\\)-mode\\|"
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1840 "method-combination\\|setf-expander\\|skeleton\\|widget\\|"
28891
70c93cd90fc6 (lisp-font-lock-keywords-1): Add define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28874
diff changeset
1841 "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|"
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
1842 ;; Variable declarations.
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1843 "\\(const\\(ant\\)?\\|custom\\|face\\|parameter\\|var\\)\\|"
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
1844 ;; Structure declarations.
49522
4dd5da1ea3dc * font-lock.el (lisp-font-lock-keywords-1): Match `deftheme'.
John Paul Wallington <jpw@pobox.com>
parents: 48619
diff changeset
1845 "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)"
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
1846 "\\)\\)\\>"
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1847 ;; Any whitespace and defined object.
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
1848 "[ \t'\(]*"
28069
bd586b823051 (lisp-font-lock-keywords-1): Highlight
Gerd Moellmann <gerd@gnu.org>
parents: 27905
diff changeset
1849 "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
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
1850 '(1 font-lock-keyword-face)
22857
33b46ddf75b7 (lisp-font-lock-keywords-1): Fontify `defconstant' and `defparameter'.
Richard M. Stallman <rms@gnu.org>
parents: 22757
diff changeset
1851 '(9 (cond ((match-beginning 3) font-lock-function-name-face)
22757
c4e492a7cb07 (lisp-font-lock-keywords-2): support `handler-*',
Richard M. Stallman <rms@gnu.org>
parents: 22730
diff changeset
1852 ((match-beginning 6) font-lock-variable-name-face)
17495
83dabcc0a796 Customise. And a few code cleanups.
Simon Marshall <simon@gnu.org>
parents: 17468
diff changeset
1853 (t font-lock-type-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
1854 nil t))
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1855 ;;
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1856 ;; Emacs Lisp autoload cookies.
25720
56f5519d4750 (lisp-font-lock-keywords-1): Recognize an autoload
Richard M. Stallman <rms@gnu.org>
parents: 25596
diff changeset
1857 '("^;;;###\\(autoload\\)" 1 font-lock-warning-face prepend)
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
1858 ))
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
1859 "Subdued level highlighting for Lisp modes.")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 (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
1862 (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
1863 (eval-when-compile
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
1864 (list
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
1865 ;;
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1866 ;; Control structures. Emacs Lisp forms.
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1867 (cons (concat
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1868 "(" (regexp-opt
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1869 '("cond" "if" "while" "let" "let*"
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1870 "prog" "progn" "progv" "prog1" "prog2" "prog*"
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1871 "inline" "lambda" "save-restriction" "save-excursion"
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1872 "save-window-excursion" "save-selected-window"
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1873 "save-match-data" "save-current-buffer" "unwind-protect"
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
1874 "condition-case" "track-mouse"
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1875 "eval-after-load" "eval-and-compile" "eval-when-compile"
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1876 "eval-when"
20190
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
1877 "with-current-buffer" "with-electric-help"
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
1878 "with-output-to-string" "with-output-to-temp-buffer"
23751
3fdde7281f9b * font-lock.el (font-lock-defaults): Doc fix.
Simon Marshall <simon@gnu.org>
parents: 23163
diff changeset
1879 "with-temp-buffer" "with-temp-file" "with-temp-message"
20190
bc7fabb22520 Allow any number of ::foos in declarative items.
Simon Marshall <simon@gnu.org>
parents: 19935
diff changeset
1880 "with-timeout") t)
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1881 "\\>")
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
1882 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
1883 ;;
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1884 ;; Control structures. Common Lisp forms.
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1885 (cons (concat
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1886 "(" (regexp-opt
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1887 '("when" "unless" "case" "ecase" "typecase" "etypecase"
22757
c4e492a7cb07 (lisp-font-lock-keywords-2): support `handler-*',
Richard M. Stallman <rms@gnu.org>
parents: 22730
diff changeset
1888 "ccase" "ctypecase" "handler-case" "handler-bind"
22857
33b46ddf75b7 (lisp-font-lock-keywords-1): Fontify `defconstant' and `defparameter'.
Richard M. Stallman <rms@gnu.org>
parents: 22757
diff changeset
1889 "restart-bind" "restart-case" "in-package"
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1890 "cerror" "break" "ignore-errors"
22857
33b46ddf75b7 (lisp-font-lock-keywords-1): Fontify `defconstant' and `defparameter'.
Richard M. Stallman <rms@gnu.org>
parents: 22757
diff changeset
1891 "loop" "do" "do*" "dotimes" "dolist" "the" "locally"
22757
c4e492a7cb07 (lisp-font-lock-keywords-2): support `handler-*',
Richard M. Stallman <rms@gnu.org>
parents: 22730
diff changeset
1892 "proclaim" "declaim" "declare" "symbol-macrolet"
c4e492a7cb07 (lisp-font-lock-keywords-2): support `handler-*',
Richard M. Stallman <rms@gnu.org>
parents: 22730
diff changeset
1893 "lexical-let" "lexical-let*" "flet" "labels" "compiler-let"
c4e492a7cb07 (lisp-font-lock-keywords-2): support `handler-*',
Richard M. Stallman <rms@gnu.org>
parents: 22730
diff changeset
1894 "destructuring-bind" "macrolet" "tagbody" "block"
18025
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1895 "return" "return-from") t)
9f9f522cdc27 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17543
diff changeset
1896 "\\>")
17161
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1897 1)
a2d3b455c6f4 Allow arbitrary regexps in *-font-lock-extra-types.
Simon Marshall <simon@gnu.org>
parents: 17055
diff changeset
1898 ;;
23163
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1899 ;; Exit/Feature symbols as constants.
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1900 (list (concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>"
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1901 "[ \t']*\\(\\sw+\\)?")
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1902 '(1 font-lock-keyword-face)
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1903 '(2 font-lock-constant-face nil t))
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1904 ;;
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1905 ;; Erroneous structures.
e754d3dcb5e8 (tex-font-lock-keywords-2): Fontify \nocite like \cite.
Simon Marshall <simon@gnu.org>
parents: 22892
diff changeset
1906 '("(\\(abort\\|assert\\|error\\|signal\\)\\>" 1 font-lock-warning-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
1907 ;;
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
1908 ;; Words inside \\[] tend to be for `substitute-command-keys'.
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1909 '("\\\\\\\\\\[\\(\\sw+\\)]" 1 font-lock-constant-face prepend)
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
1910 ;;
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
1911 ;; Words inside `' tend to be symbol names.
20951
ae0c93b9ac1f Renamed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20923
diff changeset
1912 '("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)
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
1913 ;;
20923
c6e733c90ed8 Keyword doc fixes and keyword tweaks.
Simon Marshall <simon@gnu.org>
parents: 20851
diff changeset
1914 ;; Constant values.
43753
5132a4e458ec (lisp-font-lock-keywords-2): Highlight keywords of
Gerd Moellmann <gerd@gnu.org>
parents: 43736
diff changeset
1915 '("\\<:\\sw+\\>" 0 font-lock-builtin-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
1916 ;;
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
1917 ;; ELisp and CLisp `&' keywords as types.
25045
5312a58f3397 (lisp-font-lock-keywords-2): Fix regexp.
Karl Heuer <kwzh@gnu.org>
parents: 24976
diff changeset
1918 '("\\&\\sw+\\>" . font-lock-type-face)
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
1919 ;;
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
1920 ;; CL `with-' and `do-' constructs
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29919
diff changeset
1921 '("(\\(\\(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
1922 )))
12385
c80966dc0b60 Specify in font-lock-defaults/font-lock-defaults-alist which keywords we can
Simon Marshall <simon@gnu.org>
parents: 12268
diff changeset
1923 "Gaudy level highlighting for Lisp modes.")
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924
12385
c80966dc0b60 Specify in font-lock-defaults/font-lock-defaults-alist which keywords we can
Simon Marshall <simon@gnu.org>
parents: 12268
diff changeset
1925 (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
1926 "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
1927
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 (provide 'font-lock)
39146
d1a5ac2a48eb (toplevel): Require `jit-lock' only if
Gerd Moellmann <gerd@gnu.org>
parents: 38491
diff changeset
1929
d1a5ac2a48eb (toplevel): Require `jit-lock' only if
Gerd Moellmann <gerd@gnu.org>
parents: 38491
diff changeset
1930 (when (eq font-lock-support-mode 'jit-lock-mode)
d1a5ac2a48eb (toplevel): Require `jit-lock' only if
Gerd Moellmann <gerd@gnu.org>
parents: 38491
diff changeset
1931 (require 'jit-lock))
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51720
diff changeset
1933 ;;; arch-tag: 682327e4-64d8-4057-b20b-1fbb9f1fc54c
4053
c142db721726 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 ;;; font-lock.el ends here