From a41f81da329bf9f753a901c02d05db14bcd0b651 Mon Sep 17 00:00:00 2001 From: niceume Date: Sun, 17 Mar 2024 09:12:32 +0900 Subject: [PATCH 1/3] Enable dealing with regular expression literal --- lisp/progmodes/scheme.el | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index 67abab6913d..fa272dd5c5c 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -410,10 +410,21 @@ scheme-sexp-comment-syntax-table (defun scheme-syntax-propertize (beg end) (goto-char beg) (scheme-syntax-propertize-sexp-comment (point) end) + (scheme-syntax-propertize-regexp end) (funcall (syntax-propertize-rules ("\\(#\\);" (1 (prog1 "< cn" - (scheme-syntax-propertize-sexp-comment (point) end))))) + (scheme-syntax-propertize-sexp-comment (point) end)))) + ("\\(#\\)/" (1 (when (null (nth 8 (save-excursion + (syntax-ppss + (match-beginning 0))))) + (put-text-property + (match-beginning 1) + (match-end 1) + 'syntax-table (string-to-syntax "|")) + (scheme-syntax-propertize-regexp end) + nil) + ))) (point) end)) (defun scheme-syntax-propertize-sexp-comment (_ end) @@ -430,6 +441,28 @@ scheme-syntax-propertize-sexp-comment 'syntax-table (string-to-syntax "> cn"))) (scan-error (goto-char end)))))) +(defun scheme-syntax-propertize-regexp (end) + (let* ((state (syntax-ppss)) + (within-str (nth 3 state)) + (start-delim-pos (nth 8 state))) + (when (and within-str + (char-equal ?# (char-after start-delim-pos))) + (while + (and + (re-search-forward "/" end 'move) + (eq -1 + (% (save-excursion + (backward-char) + (skip-chars-backward "\\\\")) 2)))) + (when (< (point) end) + (progn + (put-text-property + (match-beginning 0) + (match-end 0) + 'syntax-table (string-to-syntax "|")) + ))) + )) + ;;;###autoload (define-derived-mode dsssl-mode scheme-mode "DSSSL" "Major mode for editing DSSSL code. -- 2.44.0