(MATCHER . SUBEXP)
(MATCHER . FACENAME)
(MATCHER . HIGHLIGHT)
- (MATCHER HIGHLIGHT ...)
+ (MATCHER . HIGHLIGHTS)
(eval . FORM)
where MATCHER can be either the regexp to search for, or the function name to
Useful for things like RMAIL and Info where the whole buffer is not
a very meaningful entity to highlight.")
+(defvar font-lock-syntax-props-depend-on-themselves nil
+ "If non-nil, syntax-table changes may influence syntactic keywords.
+If the syntax-table properties set by syntactic-keywords themselves depend
+on syntax-table properties set on the text before it by syntactic-keywords,
+this variable should be set to non-nil, so that whenever syntaxtic-keywords
+is applied, the subsequent text is marked for syntactic re-fontification.")
+
(defvar font-lock-beg) (defvar font-lock-end)
(defvar font-lock-extend-region-functions
"Move fontification boundaries to beginning of lines."
(let ((changed nil))
(goto-char font-lock-beg)
- (unless (or (bolp) (eobp))
+ (unless (bolp)
(setq changed t font-lock-beg (line-beginning-position)))
(goto-char font-lock-end)
(unless (bolp)
(setq beg font-lock-beg end font-lock-end))
;; Now do the fontification.
(font-lock-unfontify-region beg end)
- (when font-lock-syntactic-keywords
- (font-lock-fontify-syntactic-keywords-region beg end))
- (unless font-lock-keywords-only
- (font-lock-fontify-syntactically-region beg end loudly))
- (font-lock-fontify-keywords-region beg end loudly))
+ (let ((sbeg beg))
+ (cond
+ ((< font-lock-syntactically-fontified sbeg)
+ ;; Ensure the syntax-table prop is properly set on the text
+ ;; before beg.
+ (setq sbeg (max font-lock-syntactically-fontified (point-min)))
+ (setq font-lock-syntactically-fontified end))
+ ((and font-lock-syntax-props-depend-on-themselves
+ (> font-lock-syntactically-fontified end))
+ ;; If the syntax-table properties set by
+ ;; font-lock-syntactic-keywords themselves depend on
+ ;; syntax-table props set in the text above it, then we'll
+ ;; need to update all the syntax-table props below end.
+ (setq font-lock-syntactically-fontified end)))
+ (when font-lock-syntactic-keywords
+ (font-lock-fontify-syntactic-keywords-region sbeg end)))
+ (unless font-lock-keywords-only
+ (font-lock-fontify-syntactically-region beg end loudly))
+ (font-lock-fontify-keywords-region beg end loudly))
;; Clean up.
(set-syntax-table old-syntax-table))))
(defun font-lock-fontify-syntactic-keywords-region (start end)
"Fontify according to `font-lock-syntactic-keywords' between START and END.
START should be at the beginning of a line."
- ;; Ensure the beginning of the file is properly syntactic-fontified.
- (when (and font-lock-syntactically-fontified
- (< font-lock-syntactically-fontified start))
- (setq start (max font-lock-syntactically-fontified (point-min)))
- (setq font-lock-syntactically-fontified end))
;; If `font-lock-syntactic-keywords' is a symbol, get the real keywords.
(when (symbolp font-lock-syntactic-keywords)
(setq font-lock-syntactic-keywords (font-lock-eval-keywords