emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/rainbow-delimiters 6a68bdb9e3 024/188: Inherit from curren


From: ELPA Syncer
Subject: [nongnu] elpa/rainbow-delimiters 6a68bdb9e3 024/188: Inherit from current major-mode syntax table upon activation of mode.
Date: Sat, 1 Jan 2022 00:58:49 -0500 (EST)

branch: elpa/rainbow-delimiters
commit 6a68bdb9e371cfd253519fc94b2436a86ed6523b
Author: Jeremy L. Rayman <jeremy.rayman@gmail.com>
Commit: Jeremy L. Rayman <jeremy.rayman@gmail.com>

    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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]