;;
;; Efficient regexps for use as MATCHERs for `font-lock-keywords' and
;; `font-lock-syntactic-keywords' can be generated via the function
-;; `regexp-opt', and their depth counted via the function `regexp-opt-depth'.
+;; `regexp-opt'.
;;; Adding patterns for modes that already support Font Lock:
where MATCHER can be either the regexp to search for, or the function name to
call to make the search (called with one argument, the limit of the search) and
return non-nil if it succeeds (and set `match-data' appropriately).
-MATCHER regexps can be generated via the function `regexp-opt'. MATCH is the
-subexpression of MATCHER to be highlighted. MATCH can be calculated via the
-function `regexp-opt-depth'. FACENAME is an expression whose value is the face
-name to use. Face default attributes can be modified via \\[customize].
+MATCHER regexps can be generated via the function `regexp-opt'. MATCH is
+the subexpression of MATCHER to be highlighted. FACENAME is an expression
+whose value is the face name to use. Face default attributes can be
+modified via \\[customize].
OVERRIDE and LAXMATCH are flags. If OVERRIDE is t, existing fontification can
be overwritten. If `keep', only parts not already fontified are highlighted.
(MATCH SYNTAX OVERRIDE LAXMATCH)
-where SYNTAX can be of the form (SYNTAX-CODE . MATCHING-CHAR), the name of a
-syntax table, or an expression whose value is such a form or a syntax table.
-OVERRIDE cannot be `prepend' or `append'.
+where SYNTAX can be of the form (SYNTAX-CODE . MATCHING-CHAR) (see
+also `string-to-syntax'), the name of a syntax table, or an expression
+whose value is such a form or a syntax table. OVERRIDE cannot be
+`prepend' or `append'.
For example, an element of the form highlights syntactically:
(when (and (not modified) (buffer-modified-p))
(set-buffer-modified-p nil)))))
(put 'save-buffer-state 'lisp-indent-function 1)
+ (def-edebug-spec save-buffer-state let)
;;
;; Shut up the byte compiler.
(defvar global-font-lock-mode) ; Now a defcustom.
(start (match-beginning match)) (end (match-end match))
(value (nth 1 highlight))
(override (nth 2 highlight)))
- (unless (numberp (car-safe value))
- (setq value (eval value)))
+ (cond ((stringp value)
+ (setq value (string-to-syntax value)))
+ ((not (numberp (car-safe value)))
+ (setq value (eval value))))
(cond ((not start)
;; No match but we might not signal an error.
(or (nth 3 highlight)
(put-text-property (point) limit 'font-lock-multiline t)))
(save-match-data
;; Find an occurrence of `matcher' before `limit'.
- (while (if (stringp matcher)
- (re-search-forward matcher limit t)
- (funcall matcher limit))
+ (while (and (< (point) limit)
+ (if (stringp matcher)
+ (re-search-forward matcher limit t)
+ (funcall matcher limit)))
;; Apply each highlight to this instance of `matcher'.
(setq highlights lowdarks)
(while highlights
"\\)\\)\\>"
;; Any whitespace and defined object.
"[ \t'\(]*"
- "\\(\\sw+\\)?")
+ "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
'(1 font-lock-keyword-face)
'(9 (cond ((match-beginning 3) font-lock-function-name-face)
((match-beginning 6) font-lock-variable-name-face)
'("\\<\\(false\\|null\\|true\\)\\>" . font-lock-constant-face)
;;
;; Javadoc tags within comments.
- '("@\\(author\\|deprecated\\|link\\|return\\|see\\|version\\)\\>"
- (1 font-lock-constant-face prepend))
+ (list
+ (concat "@\\("
+ "author\\|deprecated\\|exception"
+ "\\|link\\|return\\|see\\|serial\\|serialData\\|serialField"
+ "\\|since\\|throws"
+ "\\|version"
+ "\\)\\>"))
'("@\\(param\\)\\>[ \t]*\\(\\sw+\\)?"
(1 font-lock-constant-face prepend)
(2 font-lock-variable-name-face prepend t))