X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0ec2c3509c923b8bdcb92f6c31d96b6c7950fa80..1a9203d09eb108a7c9d3b79c20783c36e938a634:/lisp/progmodes/scheme.el diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index eb002b1905..13dd790b6a 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -53,59 +53,58 @@ (require 'lisp-mode) -(defvar scheme-mode-syntax-table nil) -(if (not scheme-mode-syntax-table) - (let ((i 0)) - (setq scheme-mode-syntax-table (make-syntax-table)) - (set-syntax-table scheme-mode-syntax-table) - - ;; Default is atom-constituent. - (while (< i 256) - (modify-syntax-entry i "_ ") - (setq i (1+ i))) - - ;; Word components. - (setq i ?0) - (while (<= i ?9) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - (setq i ?A) - (while (<= i ?Z) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - (setq i ?a) - (while (<= i ?z) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - - ;; Whitespace - (modify-syntax-entry ?\t " ") - (modify-syntax-entry ?\n "> ") - (modify-syntax-entry ?\f " ") - (modify-syntax-entry ?\r " ") - (modify-syntax-entry ? " ") - - ;; These characters are delimiters but otherwise undefined. - ;; Brackets and braces balance for editing convenience. - (modify-syntax-entry ?\[ "(] ") - (modify-syntax-entry ?\] ")[ ") - (modify-syntax-entry ?{ "(} ") - (modify-syntax-entry ?} "){ ") - (modify-syntax-entry ?\| " 23") - - ;; Other atom delimiters - (modify-syntax-entry ?\( "() ") - (modify-syntax-entry ?\) ")( ") - (modify-syntax-entry ?\; "< ") - (modify-syntax-entry ?\" "\" ") - (modify-syntax-entry ?' " p") - (modify-syntax-entry ?` " p") - - ;; Special characters - (modify-syntax-entry ?, "_ p") - (modify-syntax-entry ?@ "_ p") - (modify-syntax-entry ?# "_ p14") - (modify-syntax-entry ?\\ "\\ "))) +(defvar scheme-mode-syntax-table + (let ((st (make-syntax-table)) + (i 0)) + + ;; Default is atom-constituent. + (while (< i 256) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + + ;; Word components. + (setq i ?0) + (while (<= i ?9) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + (setq i ?A) + (while (<= i ?Z) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + (setq i ?a) + (while (<= i ?z) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + + ;; Whitespace + (modify-syntax-entry ?\t " " st) + (modify-syntax-entry ?\n "> " st) + (modify-syntax-entry ?\f " " st) + (modify-syntax-entry ?\r " " st) + (modify-syntax-entry ? " " st) + + ;; These characters are delimiters but otherwise undefined. + ;; Brackets and braces balance for editing convenience. + (modify-syntax-entry ?\[ "(] " st) + (modify-syntax-entry ?\] ")[ " st) + (modify-syntax-entry ?{ "(} " st) + (modify-syntax-entry ?} "){ " st) + (modify-syntax-entry ?\| " 23" st) + + ;; Other atom delimiters + (modify-syntax-entry ?\( "() " st) + (modify-syntax-entry ?\) ")( " st) + (modify-syntax-entry ?\; "< " st) + (modify-syntax-entry ?\" "\" " st) + (modify-syntax-entry ?' "' " st) + (modify-syntax-entry ?` "' " st) + + ;; Special characters + (modify-syntax-entry ?, "' " st) + (modify-syntax-entry ?@ "' " st) + (modify-syntax-entry ?# "' 14" st) + (modify-syntax-entry ?\\ "\\ " st) + st)) (defvar scheme-mode-abbrev-table nil) (define-abbrev-table 'scheme-mode-abbrev-table ()) @@ -166,8 +165,9 @@ (setq font-lock-defaults '((scheme-font-lock-keywords scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) - nil t (("+-*/.<>=!?$%_&~^:" . "w")) beginning-of-defun - (font-lock-mark-block-function . mark-defun)))) + nil t (("+-*/.<>=!?$%_&~^:#" . "w")) beginning-of-defun + (font-lock-mark-block-function . mark-defun) + (font-lock-syntactic-face-function . lisp-font-lock-syntactic-face-function)))) (defvar scheme-mode-line-process "") @@ -328,7 +328,7 @@ See `run-hooks'." "do" "else" "for-each" "if" "lambda" "let" "let*" "let-syntax" "letrec" "letrec-syntax" ;; Hannes Haug wants: - "and" "or" "delay" + "and" "or" "delay" "force" ;; Stefan Monnier says don't bother: ;;"quasiquote" "quote" "unquote" "unquote-splicing" "map" "syntax" "syntax-rules") t) @@ -337,8 +337,8 @@ See `run-hooks'." ;; David Fox for SOS/STklos class specifiers. '("\\<<\\sw+>\\>" . font-lock-type-face) ;; - ;; Scheme `:' keywords as builtins. - '("\\<:\\sw+\\>" . font-lock-builtin-face) + ;; Scheme `:' and `#:' keywords as builtins. + '("\\<#?:\\sw+\\>" . font-lock-builtin-face) ))) "Gaudy expressions to highlight in Scheme modes.") @@ -558,4 +558,5 @@ that variable's value is a string." (provide 'scheme) +;;; arch-tag: a8f06bc1-ad11-42d2-9e36-ce651df37a90 ;;; scheme.el ends here