(scheme-mode-syntax-table): Move the nesting bit from # to |.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 5 Oct 2005 14:23:13 +0000 (14:23 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 5 Oct 2005 14:23:13 +0000 (14:23 +0000)
(scheme-font-lock-syntactic-face-function): New function, to
distinguish strings from |...| symbols.
(scheme-mode-variables): Use it.  Also fix up the font-lock-time
syntax-table so that #|...|# is properly highlighted.

lisp/progmodes/scheme.el

index aa50a01..cae3ac5 100644 (file)
     (modify-syntax-entry ?\] ")[  " st)
     (modify-syntax-entry ?{ "(}  " st)
     (modify-syntax-entry ?} "){  " st)
-    (modify-syntax-entry ?\| "\" 23b" st)
+    (modify-syntax-entry ?\| "\" 23bn" st)
+    ;; Guile allows #! ... !# comments.
+    ;; But SRFI-22 defines the comment as #!...\n instead.
+    ;; Also Guile says that the !# should be on a line of its own.
+    ;; It's too difficult to get it right, for too little benefit.
+    ;; (modify-syntax-entry ?! "_ 2" st)
 
     ;; Other atom delimiters
     (modify-syntax-entry ?\( "()  " st)
     ;; Special characters
     (modify-syntax-entry ?, "'   " st)
     (modify-syntax-entry ?@ "'   " st)
-    (modify-syntax-entry ?# "' 14bn" st)
+    (modify-syntax-entry ?# "' 14b" st)
     (modify-syntax-entry ?\\ "\\   " st)
     st))
 \f
   (setq font-lock-defaults
         '((scheme-font-lock-keywords
            scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
-          nil t (("+-*/.<>=!?$%_&~^:#" . "w")) beginning-of-defun
+          nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
+          beginning-of-defun
           (font-lock-mark-block-function . mark-defun)
-          (font-lock-syntactic-face-function . lisp-font-lock-syntactic-face-function))))
+          (font-lock-syntactic-face-function
+           . scheme-font-lock-syntactic-face-function))))
 
 (defvar scheme-mode-line-process "")
 
@@ -345,6 +352,16 @@ See `run-hooks'."
 (defvar scheme-font-lock-keywords scheme-font-lock-keywords-1
   "Default expressions to highlight in Scheme modes.")
 
+(defun scheme-font-lock-syntactic-face-function (state)
+  (if (nth 3 state)
+      ;; In a string.
+      (if (eq (char-after (nth 8 state)) ?|)
+          ;; This is not a string, but a |...| symbol.
+          nil
+        font-lock-string-face)
+    ;; In a comment.
+    font-lock-comment-face))
+
 ;;;###autoload
 (define-derived-mode dsssl-mode scheme-mode "DSSSL"
   "Major mode for editing DSSSL code.