• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/

Lines Matching +defs:font +defs:lock +defs:variable +defs:name +defs:face

0 ;;; font-lock.el --- Electric font lock mode
30 ;; one face, strings in another, reserved words in another, and so on.
32 ;; Comments will be displayed in `font-lock-comment-face'.
33 ;; Strings will be displayed in `font-lock-string-face'.
36 ;; To make the text you type be fontified, use M-x font-lock-mode RET.
42 ;; (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
46 ;; (global-font-lock-mode t)
50 ;; it takes to fontify. See the variable `font-lock-maximum-decoration', and
51 ;; also the variable `font-lock-maximum-size'. Support modes for Font Lock
52 ;; mode can be used to speed up Font Lock mode. See `font-lock-support-mode'.
60 ;; insertion or deletion). Fontification means the replacement of `face' text
61 ;; properties in a given region; Emacs displays text with these `face' text
70 ;; buffer according to the variable `font-lock-syntactic-keywords'. It is
77 ;; The syntactic pass places `face' text properties in the buffer according to
88 ;; The keyword pass places `face' text properties in the buffer according to
89 ;; the variable `font-lock-keywords'. It involves searching for given regexps
97 ;; some syntactic parsers for common languages and a son-of-font-lock.el could
104 ;; variable names from (a) the buffer local variable `font-lock-defaults', if
105 ;; non-nil, or (b) the global variable `font-lock-defaults-alist', if the major
108 ;; mode's patterns are distributed with font-lock.el itself. An example of (a)
111 ;; the pattern definitions.) Font Lock mode chooses which variable to use for
112 ;; fontification based on `font-lock-maximum-decoration'.
119 ;; See the documentation for the variable `font-lock-keywords'.
121 ;; Efficient regexps for use as MATCHERs for `font-lock-keywords' and
122 ;; `font-lock-syntactic-keywords' can be generated via the function
130 ;; `font-lock-add-keywords'. For example, say in some C
134 ;; (font-lock-add-keywords 'c-mode '("\\<\\(and\\|or\\|not\\)\\>"))
138 ;; variable `c-font-lock-extra-types'.
143 ;; patterns for a new mode, you must define in your ~/.emacs a variable or
145 ;; Font Lock mode, via the mode hook setting `font-lock-defaults', exactly what
150 ;; (defvar foo-font-lock-keywords
151 ;; '(("\\<\\(one\\|two\\|three\\)\\>" . font-lock-keyword-face)
152 ;; ("\\<\\(four\\|five\\|six\\)\\>" . font-lock-type-face))
157 ;; (set (make-local-variable 'font-lock-defaults)
158 ;; '(foo-font-lock-keywords t))))
164 ;; define at the top-level a variable or variables that specify regexp
166 ;; via `font-lock-defaults', exactly what support is required. For example,
171 ;; (defvar bar-font-lock-keywords
172 ;; '(("\\<\\(uno\\|due\\|tre\\)\\>" . font-lock-keyword-face)
173 ;; ("\\<\\(quattro\\|cinque\\|sei\\)\\>" . font-lock-type-face))
178 ;; (set (make-local-variable 'font-lock-defaults)
179 ;; '(bar-font-lock-keywords nil t))
192 ;; - Highlight conceptual objects, such as function and variable names, and
194 ;; function names differently to variable names.
197 ;; - Use the same face for the same conceptual object, across all modes.
199 ;; keywords, should be highlighted with the same face, etc.
200 ;; - Make the face attributes fit the concept as far as possible.
215 ;; Define core `font-lock' group.
216 (defgroup font-lock '((jit-lock custom-group))
222 (defgroup font-lock-faces nil
224 :prefix "font-lock-"
225 :group 'font-lock)
227 (defgroup font-lock-extra-types nil
229 :group 'font-lock)
234 (defcustom font-lock-maximum-size 256000
250 (symbol :tag "name"))
254 :group 'font-lock)
256 (defcustom font-lock-maximum-decoration t
274 (symbol :tag "name"))
279 :group 'font-lock)
281 (defcustom font-lock-verbose 0
287 :group 'font-lock)
291 ;; Originally these variable values were face names such as `bold' etc.
293 ;; and they give users another mechanism for changing face appearance.
294 ;; We now allow a FACENAME in `font-lock-keywords' to be any expression that
295 ;; returns a face. So the easiest thing is to continue using these variables,
297 (defvar font-lock-comment-face 'font-lock-comment-face
298 "Face name to use for comments.")
300 (defvar font-lock-comment-delimiter-face 'font-lock-comment-delimiter-face
301 "Face name to use for comment delimiters.")
303 (defvar font-lock-string-face 'font-lock-string-face
304 "Face name to use for strings.")
306 (defvar font-lock-doc-face 'font-lock-doc-face
307 "Face name to use for documentation.")
309 (defvar font-lock-keyword-face 'font-lock-keyword-face
310 "Face name to use for keywords.")
312 (defvar font-lock-builtin-face 'font-lock-builtin-face
313 "Face name to use for builtins.")
315 (defvar font-lock-function-name-face 'font-lock-function-name-face
316 "Face name to use for function names.")
318 (defvar font-lock-variable-name-face 'font-lock-variable-name-face
319 "Face name to use for variable names.")
321 (defvar font-lock-type-face 'font-lock-type-face
322 "Face name to use for type and class names.")
324 (defvar font-lock-constant-face 'font-lock-constant-face
325 "Face name to use for constant and label names.")
327 (defvar font-lock-warning-face 'font-lock-warning-face
328 "Face name to use for things that should stand out.")
330 (defvar font-lock-negation-char-face 'font-lock-negation-char-face
331 "Face name to use for easy to overlook negation.
334 (defvar font-lock-preprocessor-face 'font-lock-preprocessor-face
335 "Face name to use for preprocessor directives.")
337 (defvar font-lock-reference-face 'font-lock-constant-face)
338 (make-obsolete-variable 'font-lock-reference-face 'font-lock-constant-face)
342 (defvar font-lock-keywords nil
347 set up. Normally the list would come from `font-lock-defaults'.
350 `font-lock-add-keywords' or `font-lock-remove-keywords' with MODE = nil.
361 where MATCHER can be either the regexp to search for, or the function name to
385 FACENAME is an expression whose value is the face name to use.
386 Instead of a face, FACENAME can evaluate to a property list
387 of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)
390 properties in `font-lock-extra-managed-props' or to override
391 `font-lock-unfontify-region-function'.
403 variable `font-lock-keyword-face'.
405 the value of `font-lock-keyword-face'.
406 (\"fubar\" . fubar-face) Occurrences of \"fubar\" in the value of `fubar-face'.
407 (\"foo\\\\|bar\" 0 foo-bar-face t)
409 of `foo-bar-face', even if already highlighted.
410 (fubar-match 1 fubar-face)
413 in the value of `fubar-face'.
419 where MATCHER is a regexp to search for or the function name to call to make
430 (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
432 discrete occurrences of \"anchor\" in the value of `anchor-face', and subsequent
433 discrete occurrences of \"item\" (on the same line) in the value of `item-face'.
449 support modes like jit-lock or lazy-lock.
451 This variable is set by major modes via the variable `font-lock-defaults'.
456 by `font-lock-compile-keywords' from a user-level keywords list.
462 (defvar font-lock-keywords-alist nil
463 "Alist of additional `font-lock-keywords' elements for major modes.
466 `font-lock-set-defaults' adds the elements in the list KEYWORDS to
467 `font-lock-keywords' when Font Lock is turned on in major mode MODE.
470 `font-lock-keywords'. If it is `set', they are used to replace the
471 value of `font-lock-keywords'. If HOW is any other non-nil value,
474 This is normally set via `font-lock-add-keywords' and
475 `font-lock-remove-keywords'.")
476 (put 'font-lock-keywords-alist 'risky-local-variable t)
478 (defvar font-lock-removed-keywords-alist nil
479 "Alist of `font-lock-keywords' elements to be removed for major modes.
481 Each element has the form (MODE . KEYWORDS). `font-lock-set-defaults'
482 removes the elements in the list KEYWORDS from `font-lock-keywords'
485 This is normally set via `font-lock-add-keywords' and
486 `font-lock-remove-keywords'.")
488 (defvar font-lock-keywords-only nil
490 This is normally set via `font-lock-defaults'.")
492 (defvar font-lock-keywords-case-fold-search nil
493 "*Non-nil means the patterns in `font-lock-keywords' are case-insensitive.
494 This is normally set via `font-lock-defaults'.")
495 (make-variable-buffer-local 'font-lock-keywords-case-fold-search)
497 (defvar font-lock-syntactically-fontified 0
498 "Point up to which `font-lock-syntactic-keywords' has been applied.
501 (make-variable-buffer-local 'font-lock-syntactically-fontified)
503 (defvar font-lock-syntactic-face-function
505 (if (nth 3 state) font-lock-string-face font-lock-comment-face))
506 "Function to determine which face to use when fontifying syntactically.
509 should return a face. This is normally set via `font-lock-defaults'.")
511 (defvar font-lock-syntactic-keywords nil
513 The value can be the list itself, or the name of a function or variable
516 See `font-lock-keywords' for a description of the form of this list;
525 Here are two examples of elements of `font-lock-syntactic-keywords'
542 This is normally set via `font-lock-defaults'.")
544 (defvar font-lock-syntax-table nil
547 This is normally set via `font-lock-defaults'.")
549 (defvar font-lock-beginning-of-syntax-function nil
557 outside of any comment, string, or sexp. This variable is semi-obsolete;
560 This is normally set via `font-lock-defaults'.")
562 (defvar font-lock-mark-block-function nil
566 This is normally set via `font-lock-defaults'.")
568 (defvar font-lock-fontify-buffer-function 'font-lock-default-fontify-buffer
570 This is normally set via `font-lock-defaults'.")
572 (defvar font-lock-unfontify-buffer-function 'font-lock-default-unfontify-buffer
575 This is normally set via `font-lock-defaults'.")
577 (defvar font-lock-fontify-region-function 'font-lock-default-fontify-region
581 messages. This is normally set via `font-lock-defaults'.")
583 (defvar font-lock-unfontify-region-function 'font-lock-default-unfontify-region
586 This is normally set via `font-lock-defaults'.")
588 (defvar font-lock-inhibit-thing-lock nil
590 Currently, valid mode names are `fast-lock-mode', `jit-lock-mode' and
591 `lazy-lock-mode'. This is normally set via `font-lock-defaults'.")
593 (defvar font-lock-multiline nil
594 "Whether font-lock should cater to multiline keywords.
598 Major/minor modes can set this variable if they know which option applies.")
600 (defvar font-lock-fontified nil) ; Whether we have fontified the buffer.
610 ;; Borrowed from lazy-lock.el.
623 buffer-file-name
631 (defvar font-lock-face-attributes)) ; Obsolete but respected if set.
633 (defun font-lock-mode-internal (arg)
636 (add-hook 'after-change-functions 'font-lock-after-change-function t t)
637 (font-lock-set-defaults)
638 (font-lock-turn-on-thing-lock)
640 (let ((max-size (font-lock-value-in-major-mode font-lock-maximum-size)))
641 (cond (font-lock-fontified
644 (font-lock-fontify-buffer))
645 (font-lock-verbose
646 (message "Fontifying %s...buffer size greater than font-lock-maximum-size"
647 (buffer-name))))))
649 (unless font-lock-mode
650 (remove-hook 'after-change-functions 'font-lock-after-change-function t)
651 (font-lock-unfontify-buffer)
652 (font-lock-turn-off-thing-lock)))
654 (defun font-lock-add-keywords (mode keywords &optional how)
657 MODE should be a symbol, the major mode command name, such as `c-mode'
659 KEYWORDS should be a list; see the variable `font-lock-keywords'.
667 (font-lock-add-keywords 'c-mode
668 '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend)
669 (\"\\\\\\=<\\\\(and\\\\|or\\\\|not\\\\)\\\\\\=>\" . font-lock-keyword-face)))
682 (font-lock-add-keywords nil
683 '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend)
685 font-lock-keyword-face)))))
692 see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types',
693 `objc-font-lock-extra-types' and `java-font-lock-extra-types'."
696 ;; `font-lock-keywords-alist' so `font-lock-set-defaults' uses them.
698 (if (setq cell (assq mode font-lock-keywords-alist))
702 (push (list mode spec) font-lock-keywords-alist)))
703 ;; Make sure that `font-lock-removed-keywords-alist' does not
705 (font-lock-update-removed-keyword-alist mode keywords how))
710 (font-lock-set-defaults)
711 (let ((was-compiled (eq (car font-lock-keywords) t)))
714 (setq font-lock-keywords (cadr font-lock-keywords)))
717 (setq font-lock-keywords keywords)
718 (font-lock-remove-keywords nil keywords) ;to avoid duplicates
719 (let ((old (if (eq (car-safe font-lock-keywords) t)
720 (cdr font-lock-keywords)
721 font-lock-keywords)))
722 (setq font-lock-keywords (if how
727 (setq font-lock-keywords
728 (font-lock-compile-keywords font-lock-keywords)))))))
730 (defun font-lock-update-removed-keyword-alist (mode keywords how)
731 "Update `font-lock-removed-keywords-alist' when adding new KEYWORDS to MODE."
732 ;; When font-lock is enabled first all keywords in the list
733 ;; `font-lock-keywords-alist' are added, then all keywords in the
734 ;; list `font-lock-removed-keywords-alist' are removed. If a
738 (let ((cell (assq mode font-lock-removed-keywords-alist)))
743 (setq font-lock-removed-keywords-alist
744 (delq cell font-lock-removed-keywords-alist))
750 (setq font-lock-removed-keywords-alist
751 (delq cell font-lock-removed-keywords-alist)))))))
758 ;; `font-lock-add-keywords'), global, or both.
760 ;; (a) In the local case we remove the keywords from the variable
761 ;; `font-lock-keywords-alist'.
764 ;; All keywords are added to `font-lock-removed-keywords-alist',
765 ;; when font-lock is enabled those keywords are removed.
772 (defun font-lock-remove-keywords (mode keywords)
775 MODE should be a symbol, the major mode command name, such as `c-mode'
786 (let ((top-cell (assq mode font-lock-keywords-alist)))
788 ;; `font-lock-keywords-alist'.
809 (setq font-lock-keywords-alist
810 (delq top-cell font-lock-keywords-alist))))
812 (let ((cell (assq mode font-lock-removed-keywords-alist)))
817 font-lock-removed-keywords-alist))))))
820 (font-lock-set-defaults)
821 (let ((was-compiled (eq (car font-lock-keywords) t)))
824 (setq font-lock-keywords (cadr font-lock-keywords)))
827 (setq font-lock-keywords (copy-sequence font-lock-keywords))
829 (setq font-lock-keywords
830 (delete keyword font-lock-keywords)))
834 (setq font-lock-keywords
835 (font-lock-compile-keywords font-lock-keywords)))))))
840 ;; This is the code used to interface font-lock.el with any of its add-on
843 ;; `font-lock-after-fontify-buffer' and/or `font-lock-after-unfontify-buffer'
846 (defcustom font-lock-support-mode 'jit-lock-mode
850 `jit-lock-mode'), is recommended.
852 Other, older support modes are Fast Lock mode (symbol `fast-lock-mode') and
853 Lazy Lock mode (symbol `lazy-lock-mode'). See those modes for more info.
860 ((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode))
864 The value of this variable is used when Font Lock mode is turned on."
866 (const :tag "fast lock" fast-lock-mode)
867 (const :tag "lazy lock" lazy-lock-mode)
868 (const :tag "jit lock" jit-lock-mode)
870 :value ((t . jit-lock-mode))
874 (symbol :tag "name"))
877 (const :tag "fast lock" fast-lock-mode)
878 (const :tag "lazy lock" lazy-lock-mode)
879 (const :tag "JIT lock" jit-lock-mode)))
882 :group 'font-lock)
884 (defvar fast-lock-mode)
885 (defvar lazy-lock-mode)
886 (defvar jit-lock-mode)
888 (defun font-lock-turn-on-thing-lock ()
889 (let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode)))
890 (cond ((eq thing-mode 'fast-lock-mode)
891 (fast-lock-mode t))
892 ((eq thing-mode 'lazy-lock-mode)
893 (lazy-lock-mode t))
894 ((eq thing-mode 'jit-lock-mode)
895 ;; Prepare for jit-lock
897 'font-lock-after-change-function t)
898 (set (make-local-variable 'font-lock-fontify-buffer-function)
899 'jit-lock-refontify)
901 (set (make-local-variable 'font-lock-fontified) t)
902 ;; Use jit-lock.
903 (jit-lock-register 'font-lock-fontify-region
904 (not font-lock-keywords-only))
905 ;; Tell jit-lock how we extend the region to refontify.
906 (add-hook 'jit-lock-after-change-extend-region-functions
907 'font-lock-extend-jit-lock-region-after-change
910 (defun font-lock-turn-off-thing-lock ()
911 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
912 (fast-lock-mode -1))
913 ((and (boundp 'jit-lock-mode) jit-lock-mode)
914 (jit-lock-unregister 'font-lock-fontify-region)
915 ;; Reset local vars to the non-jit-lock case.
916 (kill-local-variable 'font-lock-fontify-buffer-function))
917 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
918 (lazy-lock-mode -1))))
920 (defun font-lock-after-fontify-buffer ()
921 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
922 (fast-lock-after-fontify-buffer))
923 ;; Useless now that jit-lock intercepts font-lock-fontify-buffer. -sm
924 ;; (jit-lock-mode
925 ;; (jit-lock-after-fontify-buffer))
926 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
927 (lazy-lock-after-fontify-buffer))))
929 (defun font-lock-after-unfontify-buffer ()
930 (cond ((and (boundp 'fast-lock-mode) fast-lock-mode)
931 (fast-lock-after-unfontify-buffer))
933 ;; - turning off font-lock: it does not matter if we leave spurious
934 ;; `fontified' text props around since jit-lock-mode is also off.
935 ;; - font-lock-default-fontify-buffer fails: this is not run
938 ;; (jit-lock-mode
939 ;; (jit-lock-after-unfontify-buffer))
940 ((and (boundp 'lazy-lock-mode) lazy-lock-mode)
941 (lazy-lock-after-unfontify-buffer))))
948 ;; Rather than the function, e.g., `font-lock-fontify-region' containing the
949 ;; code to fontify a region, the function runs the function whose name is the
950 ;; value of the variable, e.g., `font-lock-fontify-region-function'. Normally,
951 ;; the value of this variable is, e.g., `font-lock-default-fontify-region'
953 ;; variable could be anything and thus, e.g., `font-lock-fontify-region' could
955 ;; modes the capability of modifying the way font-lock.el fontifies. Major
956 ;; modes can modify the values of, e.g., `font-lock-fontify-region-function',
957 ;; via the variable `font-lock-defaults'.
959 ;; For example, Rmail mode sets the variable `font-lock-defaults' so that
960 ;; font-lock.el uses its own function for buffer fontification. This function
976 ;; comments are just too hairy for `font-lock-fontify-syntactically-region' to
980 ;; `font-lock-fontify-keywords-region' for the normal regexp fontification
981 ;; pass. And Hairy mode would set `font-lock-defaults' so that font-lock.el
987 (defvar font-lock-extend-after-change-region-function nil
990 This variable is either nil, or is a function that determines the
992 It is usually set by the major mode via `font-lock-defaults'.
993 Font-lock calls this function after each buffer change.
1002 (defun font-lock-fontify-buffer ()
1003 "Fontify the current buffer the way the function `font-lock-mode' would."
1005 (font-lock-set-defaults)
1006 (let ((font-lock-verbose (or font-lock-verbose (interactive-p))))
1007 (funcall font-lock-fontify-buffer-function)))
1009 (defun font-lock-unfontify-buffer ()
1010 (funcall font-lock-unfontify-buffer-function))
1012 (defun font-lock-fontify-region (beg end &optional loudly)
1013 (font-lock-set-defaults)
1014 (funcall font-lock-fontify-region-function beg end loudly))
1016 (defun font-lock-unfontify-region (beg end)
1018 (funcall font-lock-unfontify-region-function beg end)))
1020 (defun font-lock-default-fontify-buffer ()
1021 (let ((verbose (if (numberp font-lock-verbose)
1022 (> (buffer-size) font-lock-verbose)
1023 font-lock-verbose)))
1026 (format "Fontifying %s..." (buffer-name)))
1033 (font-lock-fontify-region (point-min) (point-max) verbose)
1034 (font-lock-after-fontify-buffer)
1035 (setq font-lock-fontified t)))
1037 (quit (font-lock-unfontify-buffer)))))))
1039 (defun font-lock-default-unfontify-buffer ()
1043 (font-lock-unfontify-region (point-min) (point-max))
1044 (font-lock-after-unfontify-buffer)
1045 (setq font-lock-fontified nil)))
1047 (defvar font-lock-dont-widen nil
1048 "If non-nil, font-lock will work on the non-widened buffer.
1053 (defvar font-lock-beg) (defvar font-lock-end)
1054 (defvar font-lock-extend-region-functions
1055 '(font-lock-extend-region-wholelines
1056 ;; This use of font-lock-multiline property is unreliable but is just
1060 ;; cases), in which case the font-lock-multiline property can help make
1062 font-lock-extend-region-multiline)
1064 This is used to allow major modes to help font-lock find safe buffer positions
1070 dynamically bound variables `font-lock-beg' and `font-lock-end'; and return
1076 (make-variable-buffer-local 'font-lock-extend-region-functions)
1078 (defun font-lock-extend-region-multiline ()
1079 "Move fontification boundaries away from any `font-lock-multiline' property."
1081 (when (and (> font-lock-beg (point-min))
1082 (get-text-property (1- font-lock-beg) 'font-lock-multiline))
1084 (setq font-lock-beg (or (previous-single-property-change
1085 font-lock-beg 'font-lock-multiline)
1088 (when (get-text-property font-lock-end 'font-lock-multiline)
1090 (setq font-lock-end (or (text-property-any font-lock-end (point-max)
1091 'font-lock-multiline nil)
1095 (defun font-lock-extend-region-wholelines ()
1098 (goto-char font-lock-beg)
1100 (setq changed t font-lock-beg (line-beginning-position)))
1101 (goto-char font-lock-end)
1103 (unless (eq font-lock-end
1104 (setq font-lock-end (line-beginning-position 2)))
1108 (defun font-lock-default-fontify-region (beg end loudly)
1111 (or parse-sexp-lookup-properties font-lock-syntactic-keywords))
1115 (unless font-lock-dont-widen (widen))
1117 (when font-lock-syntax-table
1118 (set-syntax-table font-lock-syntax-table))
1121 (let ((funs font-lock-extend-region-functions)
1122 (font-lock-beg beg)
1123 (font-lock-end end))
1126 (eq funs font-lock-extend-region-functions))
1132 font-lock-extend-region-functions)))
1133 (setq beg font-lock-beg end font-lock-end))
1135 (font-lock-unfontify-region beg end)
1136 (when font-lock-syntactic-keywords
1137 (font-lock-fontify-syntactic-keywords-region beg end))
1138 (unless font-lock-keywords-only
1139 (font-lock-fontify-syntactically-region beg end loudly))
1140 (font-lock-fontify-keywords-region beg end loudly))
1146 ;; (or (and (not font-lock-keywords-only)
1148 ;; font-lock-cache-state)))
1150 ;; (font-lock-fontify-keywords-region beg end))
1152 (defvar font-lock-extra-managed-props nil
1153 "Additional text properties managed by font-lock.
1154 This is used by `font-lock-default-unfontify-region' to decide
1157 (defun font-lock-default-unfontify-region (beg end)
1160 font-lock-extra-managed-props
1161 (if font-lock-syntactic-keywords
1162 '(syntax-table face font-lock-multiline)
1163 '(face font-lock-multiline)))))
1166 (defun font-lock-after-change-function (beg end old-len)
1170 (region (if font-lock-extend-after-change-region-function
1171 (funcall font-lock-extend-after-change-region-function
1179 ;; font-lock-default-fontify-region already rounds up to a whole
1189 (font-lock-fontify-region beg end)))))
1191 (defvar jit-lock-start) (defvar jit-lock-end)
1192 (defun font-lock-extend-jit-lock-region-after-change (beg end old-len)
1193 "Function meant for `jit-lock-after-change-extend-region-functions'.
1198 `font-lock-default-fontify-region', in order to avoid the need for
1199 double-redisplay in `jit-lock-fontify-now'."
1201 ;; First extend the region as font-lock-after-change-function would.
1202 (let ((region (if font-lock-extend-after-change-region-function
1203 (funcall font-lock-extend-after-change-region-function
1206 (setq beg (min jit-lock-start (car region))
1207 end (max jit-lock-end (cdr region))))
1208 ;; Then extend the region obeying font-lock-multiline properties,
1210 ;; !!! This is the *main* user of font-lock-multiline property !!!
1211 ;; font-lock-after-change-function could/should also do that, but it
1212 ;; doesn't need to because font-lock-default-fontify-region does
1214 ;; font-lock-default-fontify-region will be executed on this region
1216 ;; Note: contrary to font-lock-default-fontify-region, we do not do
1221 (get-text-property (1- beg) 'font-lock-multiline))
1223 beg 'font-lock-multiline)
1227 (if (get-text-property end 'font-lock-multiline)
1229 'font-lock-multiline nil)
1237 ;; and anticipate what font-lock-default-fontify-region will do, so as to
1239 ;; We could just run `font-lock-extend-region-functions', but since
1242 (when (memq 'font-lock-extend-region-wholelines
1243 font-lock-extend-region-functions)
1245 (setq jit-lock-start (min jit-lock-start (line-beginning-position)))
1247 (setq jit-lock-end
1248 (max jit-lock-end
1251 (defun font-lock-fontify-block (&optional arg)
1252 "Fontify some lines the way `font-lock-fontify-buffer' would.
1255 no ARG is given and `font-lock-mark-block-function' is nil.
1256 If `font-lock-mark-block-function' non-nil and no ARG is given, it is used to
1259 (let ((inhibit-point-motion-hooks t) font-lock-beginning-of-syntax-function
1261 ;; Make sure we have the right `font-lock-keywords' etc.
1262 (if (not font-lock-mode) (font-lock-set-defaults))
1266 (if (or arg (not font-lock-mark-block-function))
1268 (font-lock-fontify-region
1271 (funcall font-lock-mark-block-function)
1272 (font-lock-fontify-region (point) (mark)))
1276 (error "facemenu must be loaded before font-lock"))
1277 (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)
1286 ;; In the meantime, those that are used by font-lock.el are defined in Lisp
1287 ;; below and given a `font-lock-' prefix. Those that are not used are defined
1290 (defun font-lock-prepend-text-property (start end prop value &optional object)
1304 (defun font-lock-append-text-property (start end prop value &optional object)
1318 (defun font-lock-fillin-text-property (start end prop value &optional object)
1368 ;; `font-lock-syntactic-keywords' of course, (b) they are all `defun' as speed
1374 (defun font-lock-apply-syntactic-highlight (highlight)
1377 see `font-lock-syntactic-keywords'."
1390 ;; font-lock's use of syntax-ppss, but I'm not 100% sure and it can
1403 (font-lock-fillin-text-property start end 'syntax-table value))))))
1405 (defun font-lock-fontify-syntactic-anchored-keywords (keywords limit)
1407 KEYWORDS should be of the form MATCH-ANCHORED, see `font-lock-keywords',
1424 (font-lock-apply-syntactic-highlight (car highlights))
1429 (defun font-lock-fontify-syntactic-keywords-region (start end)
1430 "Fontify according to `font-lock-syntactic-keywords' between START and END.
1433 (when (and font-lock-syntactically-fontified
1434 (< font-lock-syntactically-fontified start))
1435 (setq start (max font-lock-syntactically-fontified (point-min)))
1436 (setq font-lock-syntactically-fontified end))
1437 ;; If `font-lock-syntactic-keywords' is a symbol, get the real keywords.
1438 (when (symbolp font-lock-syntactic-keywords)
1439 (setq font-lock-syntactic-keywords (font-lock-eval-keywords
1440 font-lock-syntactic-keywords)))
1441 ;; If `font-lock-syntactic-keywords' is not compiled, compile it.
1442 (unless (eq (car font-lock-syntactic-keywords) t)
1443 (setq font-lock-syntactic-keywords (font-lock-compile-keywords
1444 font-lock-syntactic-keywords
1447 (let ((case-fold-search font-lock-keywords-case-fold-search)
1448 (keywords (cddr font-lock-syntactic-keywords))
1462 (font-lock-apply-syntactic-highlight (car highlights))
1463 (font-lock-fontify-syntactic-anchored-keywords (car highlights)
1473 (defvar font-lock-comment-start-skip nil
1476 (defvar font-lock-comment-end-skip nil
1479 (defun font-lock-fontify-syntactically-region (start end &optional loudly ppss)
1480 "Put proper face on each string and comment between START and END.
1483 (or font-lock-comment-end-skip
1486 state face beg)
1487 (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name)))
1497 (setq face (funcall font-lock-syntactic-face-function state))
1501 (when face (put-text-property beg (point) 'face face))
1502 (when (and (eq face 'font-lock-comment-face)
1503 (or font-lock-comment-start-skip
1506 ;; and use font-lock-comment-delimiter-face for them.
1509 (if (looking-at (or font-lock-comment-start-skip
1511 (put-text-property beg (match-end 0) 'face
1512 font-lock-comment-delimiter-face)))
1514 (put-text-property (match-beginning 0) (point) 'face
1515 font-lock-comment-delimiter-face))))
1525 (defsubst font-lock-apply-highlight (highlight)
1527 HIGHLIGHT should be of the form MATCH-HIGHLIGHT, see `font-lock-keywords'."
1536 (when (eq (car-safe val) 'face)
1543 ;; font-lock-append-text-property, the property is actually
1544 ;; changed from <face> to (<face>) which is undesirable. --Stef
1548 (or (text-property-not-all start end 'face nil)
1549 (put-text-property start end 'face val)))
1552 (put-text-property start end 'face val))
1555 (font-lock-prepend-text-property start end 'face val))
1558 (font-lock-append-text-property start end 'face val))
1561 (font-lock-fillin-text-property start end 'face val)))))))
1563 (defsubst font-lock-fontify-anchored-keywords (keywords limit)
1565 KEYWORDS should be of the form MATCH-ANCHORED, see `font-lock-keywords',
1575 (when (and font-lock-multiline (>= limit (line-beginning-position 2)))
1577 ;; (setq font-lock-multiline t)
1582 'font-lock-multiline t)))
1592 (font-lock-apply-highlight (car highlights))
1597 (defun font-lock-fontify-keywords-region (start end &optional loudly)
1598 "Fontify according to `font-lock-keywords' between START and END.
1601 (unless (eq (car font-lock-keywords) t)
1602 (setq font-lock-keywords
1603 (font-lock-compile-keywords font-lock-keywords)))
1604 (let ((case-fold-search font-lock-keywords-case-fold-search)
1605 (keywords (cddr font-lock-keywords))
1606 (bufname (buffer-name)) (count 0)
1610 ;; Fontify each item in `font-lock-keywords' from `start' to `end'.
1626 (when (and font-lock-multiline
1631 ;; (setq font-lock-multiline t)
1639 'font-lock-multiline t))
1645 (font-lock-apply-highlight (car highlights))
1647 (font-lock-fontify-anchored-keywords (car highlights) end)
1660 (defun font-lock-compile-keywords (keywords &optional syntactic-keywords)
1663 `font-lock-keywords' doc string.
1665 `font-lock-syntactic-keywords' rather than for `font-lock-keywords'."
1666 (if (not font-lock-set-defaults)
1668 ;; call font-lock in unexpected and incorrect ways. It's important to
1670 ;; global value of font-lock-keywords and break highlighting in many
1672 (error "Font-lock trying to use keywords before setting them up"))
1677 (mapcar 'font-lock-compile-keyword keywords))))
1680 (or font-lock-beginning-of-syntax-function
1683 (get beg-function 'font-lock-syntax-paren-check)))
1686 ;; looks like a defun and would thus confuse font-lock.
1692 (if (memq (get-text-property (match-beginning 0) 'face)
1693 '(font-lock-string-face font-lock-doc-face
1694 font-lock-comment-face))
1695 (list 'face font-lock-warning-face
1700 (defun font-lock-compile-keyword (keyword)
1702 (list keyword '(0 font-lock-keyword-face)))
1704 (font-lock-compile-keyword (eval (cdr keyword))))
1709 (font-lock-compile-keyword (cons (car keyword) (nth 2 keyword)))))
1711 (list (car keyword) (list (cdr keyword) 'font-lock-keyword-face)))
1719 (defun font-lock-eval-keywords (keywords)
1720 "Evalulate KEYWORDS if a function (funcall) or variable (eval) name."
1723 (font-lock-eval-keywords (if (fboundp keywords)
1727 (defun font-lock-value-in-major-mode (alist)
1734 (defun font-lock-choose-keywords (keywords level)
1747 (defvar font-lock-set-defaults nil) ; Whether we have set up defaults.
1749 (defvar font-lock-mode-major-mode)
1750 (defun font-lock-set-defaults ()
1752 Sets various variables using `font-lock-defaults' (or, if nil, using
1753 `font-lock-defaults-alist') and `font-lock-maximum-decoration'."
1755 (unless (and font-lock-set-defaults
1756 (eq font-lock-mode-major-mode major-mode))
1757 (setq font-lock-mode-major-mode major-mode)
1758 (set (make-local-variable 'font-lock-set-defaults) t)
1759 (make-local-variable 'font-lock-fontified)
1760 (make-local-variable 'font-lock-multiline)
1761 (let* ((defaults (or font-lock-defaults
1764 font-lock-defaults-alist)))))
1766 (font-lock-choose-keywords (nth 0 defaults)
1767 (font-lock-value-in-major-mode font-lock-maximum-decoration)))
1768 (local (cdr (assq major-mode font-lock-keywords-alist)))
1770 (cdr-safe (assq major-mode font-lock-removed-keywords-alist))))
1771 (set (make-local-variable 'font-lock-defaults) defaults)
1774 (set (make-local-variable 'font-lock-keywords-only) t))
1777 (set (make-local-variable 'font-lock-keywords-case-fold-search) t))
1780 (set (make-local-variable 'font-lock-syntax-table)
1788 (modify-syntax-entry char syntax font-lock-syntax-table)))))
1791 (set (make-local-variable 'font-lock-beginning-of-syntax-function)
1795 (set (make-local-variable (car x)) (cdr x)))
1796 ;; Set up `font-lock-keywords' last because its value might depend
1797 ;; on other settings (e.g. font-lock-compile-keywords uses
1798 ;; font-lock-beginning-of-syntax-function).
1799 (set (make-local-variable 'font-lock-keywords)
1800 (font-lock-eval-keywords keywords))
1803 (font-lock-add-keywords nil (car (car local)) (cdr (car local)))
1806 (font-lock-remove-keywords nil removed-keywords))
1808 (unless (eq (car font-lock-keywords) t)
1809 (setq font-lock-keywords
1810 (font-lock-compile-keywords font-lock-keywords))))))
1816 ;; `custom-declare-face'.
1817 (defface font-lock-comment-face
1835 "Font Lock mode face used to highlight comments."
1836 :group 'font-lock-faces)
1838 (defface font-lock-comment-delimiter-face
1839 '((default :inherit font-lock-comment-face)
1846 "Font Lock mode face used to highlight comment delimiters."
1847 :group 'font-lock-faces)
1849 (defface font-lock-string-face
1858 "Font Lock mode face used to highlight strings."
1859 :group 'font-lock-faces)
1861 (defface font-lock-doc-face
1862 '((t :inherit font-lock-string-face))
1863 "Font Lock mode face used to highlight documentation."
1864 :group 'font-lock-faces)
1866 (defface font-lock-keyword-face
1875 "Font Lock mode face used to highlight keywords."
1876 :group 'font-lock-faces)
1878 (defface font-lock-builtin-face
1887 "Font Lock mode face used to highlight builtins."
1888 :group 'font-lock-faces)
1890 (defface font-lock-function-name-face
1897 "Font Lock mode face used to highlight function names."
1898 :group 'font-lock-faces)
1900 (defface font-lock-variable-name-face
1911 "Font Lock mode face used to highlight variable names."
1912 :group 'font-lock-faces)
1914 (defface font-lock-type-face
1923 "Font Lock mode face used to highlight type and classes."
1924 :group 'font-lock-faces)
1926 (defface font-lock-constant-face
1937 "Font Lock mode face used to highlight constants and labels."
1938 :group 'font-lock-faces)
1940 (defface font-lock-warning-face
1947 "Font Lock mode face used to highlight warnings."
1948 :group 'font-lock-faces)
1950 (defface font-lock-negation-char-face
1952 "Font Lock mode face used to highlight easy to overlook negation."
1953 :group 'font-lock-faces)
1955 (defface font-lock-preprocessor-face
1956 '((t :inherit font-lock-builtin-face))
1957 "Font Lock mode face used to highlight preprocessor directives."
1958 :group 'font-lock-faces)
1960 (defface font-lock-regexp-grouping-backslash
1962 "Font Lock mode face for backslashes in Lisp regexp grouping constructs."
1963 :group 'font-lock-faces)
1965 (defface font-lock-regexp-grouping-construct
1967 "Font Lock mode face used to highlight grouping constructs in Lisp regexps."
1968 :group 'font-lock-faces)
1981 ;; (define-key menu-bar-edit-menu [font-lock]
1982 ;; (cons "Syntax Highlighting" font-lock-menu))
1992 ;; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting"))
1994 ;; (define-key font-lock-menu [fontify-less]
1995 ;; '("Less In Current Buffer" . font-lock-fontify-less))
1996 ;; (define-key font-lock-menu [fontify-more]
1997 ;; '("More In Current Buffer" . font-lock-fontify-more))
1998 ;; (define-key font-lock-menu [font-lock-sep]
2000 ;; (define-key font-lock-menu [font-lock-mode]
2001 ;; '("In Current Buffer" . font-lock-mode))
2002 ;; (define-key font-lock-menu [global-font-lock-mode]
2003 ;; '("In All Buffers" . global-font-lock-mode)))
2008 ;; ;; font-lock.el is loaded, so we don't need to autoload the three variables.
2009 ;; (put 'global-font-lock-mode 'menu-toggle t)
2010 ;; (put 'font-lock-mode 'menu-toggle t)
2011 ;; (put 'font-lock-fontify-more 'menu-enable '(identity))
2012 ;; (put 'font-lock-fontify-less 'menu-enable '(identity)))
2015 ;;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode)
2016 ;;(put 'font-lock-mode 'menu-selected 'font-lock-mode)
2017 ;;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level))
2018 ;;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level))
2020 ;;(defvar font-lock-fontify-level nil) ; For less/more fontification.
2022 ;;(defun font-lock-fontify-level (level)
2023 ;; (let ((font-lock-maximum-decoration level))
2024 ;; (when font-lock-mode
2025 ;; (font-lock-mode))
2026 ;; (font-lock-mode)
2027 ;; (when font-lock-verbose
2028 ;; (message "Fontifying %s... level %d" (buffer-name) level))))
2030 ;;(defun font-lock-fontify-less ()
2032 ;;See `font-lock-maximum-decoration'."
2035 ;; (if (nth 1 font-lock-fontify-level)
2036 ;; (font-lock-fontify-level (1- (car font-lock-fontify-level)))
2039 ;;(defun font-lock-fontify-more ()
2041 ;;See `font-lock-maximum-decoration'."
2044 ;; (if (nth 2 font-lock-fontify-level)
2045 ;; (font-lock-fontify-level (1+ (car font-lock-fontify-level)))
2048 ;; ;; This should be called by `font-lock-set-defaults'.
2049 ;;(defun font-lock-set-menu ()
2051 ;; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form
2053 ;; (let ((keywords (or (nth 0 font-lock-defaults)
2054 ;; (nth 1 (assq major-mode font-lock-defaults-alist))))
2055 ;; (level (font-lock-value-in-major-mode font-lock-maximum-decoration)))
2056 ;; (make-local-variable 'font-lock-fontify-level)
2058 ;; (font-lock-unset-menu)
2066 ;; (setq font-lock-fontify-level (list level (> level 1)
2069 ;; ;; This should be called by `font-lock-unset-defaults'.
2070 ;;(defun font-lock-unset-menu ()
2072 ;; (setq font-lock-fontify-level nil))
2082 ;; should stay in font-lock.el, since it is used by other libraries. sm.
2084 (defun font-lock-match-c-style-declaration-item-and-skip-to-next (limit)
2102 This function could be MATCHER in a MATCH-ANCHORED `font-lock-keywords' item."
2130 ;; `cpp-font-lock-keywords' is handy for modes for the files.
2133 ;; while font-lock.el is preloaded to emacs. So values pre-calculated with
2136 ;; `cpp-font-lock-keywords-source-directives' is calculated from:
2142 (defconst cpp-font-lock-keywords-source-directives
2144 "Regular expressoin used in `cpp-font-lock-keywords'.")
2146 ;; `cpp-font-lock-keywords-source-depth' is calculated from:
2152 (defconst cpp-font-lock-keywords-source-depth 0
2153 "An integer representing regular expression depth of `cpp-font-lock-keywords-source-directives'.
2154 Used in `cpp-font-lock-keywords'.")
2156 (defconst cpp-font-lock-keywords
2157 (let* ((directives cpp-font-lock-keywords-source-directives)
2158 (directives-depth cpp-font-lock-keywords-source-depth))
2162 '("^#[ \t]*\\(?:error\\|warning\\)[ \t]+\\(.+\\)" 1 font-lock-warning-face prepend)
2166 1 font-lock-string-face prepend)
2170 (1 font-lock-function-name-face prepend)
2179 nil nil (1 font-lock-variable-name-face prepend)))
2184 (1 font-lock-builtin-face prepend) (2 font-lock-variable-name-face prepend t)))
2190 '(1 font-lock-preprocessor-face prepend)
2192 'font-lock-variable-name-face nil t))))
2193 "Font lock keyords for C preprocessor directives.
2195 font lock keyords for C preprocessor directives. This definition is for the
2203 (defconst lisp-font-lock-keywords-1
2215 "\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|"
2222 (1 font-lock-keyword-face)
2223 (9 (cond ((match-beginning 3) font-lock-function-name-face)
2224 ((match-beginning 6) font-lock-variable-name-face)
2225 (t font-lock-type-face))
2228 ("^;;;###\\(autoload\\)" 1 font-lock-warning-face prepend)
2230 ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)))
2233 (defconst lisp-font-lock-keywords-2
2234 (append lisp-font-lock-keywords-1
2280 (1 font-lock-keyword-face)
2281 (2 font-lock-constant-face nil t))
2283 ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>" 1 font-lock-warning-face)
2285 ("\\\\\\\\\\[\\(\\sw+\\)\\]" 1 font-lock-constant-face prepend)
2287 ("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)
2289 ("\\<:\\sw+\\>" 0 font-lock-builtin-face)
2291 ("\\<\\&\\sw+\\>" . font-lock-type-face)
2301 (let ((face (get-text-property (1- (point)) 'face)))
2302 (when (or (and (listp face)
2303 (memq 'font-lock-string-face face))
2304 (eq 'font-lock-string-face face))
2306 (1 'font-lock-regexp-grouping-backslash prepend)
2307 (3 'font-lock-regexp-grouping-construct prepend))
2312 ;;; ("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
2316 (defvar lisp-font-lock-keywords lisp-font-lock-keywords-1
2320 (provide 'font-lock)
2323 ;;; font-lock.el ends here