branch: elpa/rainbow-delimiters
commit 6a68bdb9e371cfd253519fc94b2436a86ed6523b
Author: Jeremy L. Rayman <[email protected]>
Commit: Jeremy L. Rayman <[email protected]>
Inherit from current major-mode syntax table upon activation of mode.
This corrects problems seen in various modes (perl, c++, lua) caused by
basing the syntax table(s) used in rainbow-delimiters on
emacs-lisp-mode-syntax-table. Delimiters should now colorize correctly taking
into account the specifics of the syntax of whatever language or major-mode the
buffer is in.
---
rainbow-delimiters.el | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/rainbow-delimiters.el b/rainbow-delimiters.el
index e6366fa2b8..071d88bcc5 100644
--- a/rainbow-delimiters.el
+++ b/rainbow-delimiters.el
@@ -308,24 +308,32 @@ e.g. 'rainbow-delimiters-depth-1-face'."
;;; Nesting level
+(defvar rainbow-delimiters-all-delimiters-syntax-table nil
+ "Syntax table (inherited from buffer major-mode) which uses all delimiters.
+
+When rainbow-delimiters-minor-mode is activated, it sets this variable and
+the other rainbow-delmiters specific syntax tables based on the current
+major-mode. This syntax table is constructed by function
+rainbow-delimiters-make-syntax-table-all-delimiters.")
+
;; syntax-table: used with parse-partial-sexp for determining current depth.
-(defvar rainbow-delimiters-delim-syntax-table
- (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
+(defun rainbow-delimiters-make-syntax-table-all-delimiters (syntax-table)
+ "Syntax table for recognizing all supported delimiter types."
+ (let ((table (copy-syntax-table syntax-table)))
(modify-syntax-entry ?\( "() " table)
(modify-syntax-entry ?\) ")( " table)
(modify-syntax-entry ?\[ "(]" table)
(modify-syntax-entry ?\] ")[" table)
(modify-syntax-entry ?\{ "(}" table)
(modify-syntax-entry ?\} "){" table)
- table)
- "Syntax table for recognizing all supported delimiter types.")
+ table))
(defun rainbow-delimiters-depth (point)
"Return # of nested levels of parens, brackets, braces POINT is inside of."
(save-excursion
(beginning-of-defun)
(let ((depth
- (with-syntax-table rainbow-delimiters-delim-syntax-table
+ (with-syntax-table rainbow-delimiters-all-delimiters-syntax-table
(car (parse-partial-sexp (point) point)))))
(if (>= depth 0)
depth
@@ -463,7 +471,10 @@ Used by jit-lock for dynamic highlighting."
(progn
(jit-lock-unregister 'rainbow-delimiters-propertize-region)
(rainbow-delimiters-unpropertize-region (point-min) (point-max)))
- (jit-lock-register 'rainbow-delimiters-propertize-region t)))
+ (jit-lock-register 'rainbow-delimiters-propertize-region t)
+ ;; Create necessary syntax tables inheriting from current major-mode.
+ (set (make-local-variable 'rainbow-delimiters-all-delimiters-syntax-table)
+ (rainbow-delimiters-make-syntax-table-all-delimiters
(syntax-table)))))
;;;###autoload
(define-globalized-minor-mode global-rainbow-delimiters-mode