branch: elpa/rainbow-delimiters
commit 3d6de240fb921e1aaf422d642125f6a30fe5a2a6
Merge: 6345c1fa4b 73b15f1b77
Author: jlr <[email protected]>
Commit: jlr <[email protected]>
Merge pull request #12 from crlf0710/master
Language specific escape character recognization.
---
rainbow-delimiters.el | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/rainbow-delimiters.el b/rainbow-delimiters.el
index a2c74ad773..0e22431893 100644
--- a/rainbow-delimiters.el
+++ b/rainbow-delimiters.el
@@ -401,6 +401,27 @@ Sets text properties:
'(font-lock-face nil
rear-nonsticky nil))))
+(make-local-variable 'rainbow-delimiters-escaped-char-predicate)
+(setq rainbow-delimiters-escaped-char-predicate nil)
+
+(defvar rainbow-delimiters-escaped-char-predicate-list
+ '((emacs-lisp-mode . rainbow-delimiters-escaped-char-predicate-emacs-lisp)
+ (inferior-emacs-lisp-mode .
rainbow-delimiters-escaped-char-predicate-emacs-lisp)
+ (lisp-mode . rainbow-delimiters-escaped-char-predicate-lisp)
+ (scheme-mode . rainbow-delimiters-escaped-char-predicate-lisp)
+ (clojure-mode . rainbow-delimiters-escaped-char-predicate-lisp)
+ (inferior-scheme-mode . rainbow-delimiters-escaped-char-predicate-lisp)
+ ))
+
+(defun rainbow-delimiters-escaped-char-predicate-emacs-lisp (loc)
+ (and (eq (char-before loc) ?\\) ; escaped char, e.g. ?\) - not counted
+ (and (not (eq (char-before (1- loc)) ?\\)) ; special-case: ignore ?\\
+ (eq (char-before (1- loc)) ?\?))))
+;; NOTE: standard char read syntax '?)' is not tested for because emacs manual
+;; states punctuation such as delimiters should _always_ use escaped '?\)'
form.
+
+(defun rainbow-delimiters-escaped-char-predicate-lisp (loc)
+ (eq (char-before loc) ?\\))
(defsubst rainbow-delimiters-char-ineligible-p (loc)
"Return t if char at LOC should be skipped, e.g. if inside a comment.
@@ -413,11 +434,8 @@ Returns t if char at loc meets one of the following
conditions:
(or
(nth 3 parse-state) ; inside string?
(nth 4 parse-state) ; inside comment?
- (and (eq (char-before loc) ?\\) ; escaped char, e.g. ?\) - not counted
- (and (not (eq (char-before (1- loc)) ?\\)) ; special-case: ignore ?\\
- (eq (char-before (1- loc)) ?\?))))))
-;; NOTE: standard char read syntax '?)' is not tested for because emacs manual
-;; states punctuation such as delimiters should _always_ use escaped '?\)'
form.
+ (and rainbow-delimiters-escaped-char-predicate
+ (funcall rainbow-delimiters-escaped-char-predicate loc)))))
(defsubst rainbow-delimiters-apply-color (delim depth loc)
@@ -445,6 +463,8 @@ LOC is location of character (delimiter) to be colorized."
"Highlight delimiters in region between START and END.
Used by jit-lock for dynamic highlighting."
+ (setq rainbow-delimiters-escaped-char-predicate
+ (cdr (assoc major-mode
rainbow-delimiters-escaped-char-predicate-list)))
(save-excursion
(goto-char start)
;; START can be anywhere in buffer; determine the nesting depth at START
loc