読者です 読者をやめる 読者になる 読者になる

scheme-mode の Gauche 対応

Gauche のライブラリを読もうとしたら、正規表現リテラル内の | が悪さをしてるらしくハイライトがめちゃくちゃになっていた。gauche-mode というのがあるようだけど、Emacs が構文をどう扱うかを知りたかったので、自前でなんとかしてみることに。

modify-syntax-entry だけではうまくいかなさそうなので、syntax-propertize-function インタフェースを実装してみた。

(add-hook 'scheme-mode-hook 'gauche-syntax)

(defun gauche-syntax ()
  (setq-local syntax-propertize-function 'gauche-syntax-propertize-function))

(defun gauche-syntax-propertize-function (start end)
  (goto-char start)
  (funcall
   (syntax-propertize-rules
    ;; for regexp literal
    ("#/.*?/" (0 "."))
    ;; original by scheme-mode.el
    ("\\(#\\);" (1 (prog1 "< cn"
                     (scheme-syntax-propertize-sexp-comment (point) end)))))
   (point) end))

(font-lock-add-keywords 'scheme-mode
  '(("#/.*?/"  (0 font-lock-builtin-face t))))