尝试在语法表中为SPSS定义注释

时间:2014-03-20 17:55:35

标签: emacs spss

我试图修改spss.el,为SPSS评论提供准确的说明。以下是SPSS的语法如何突出显示和处理注释的摘要:

* =星号在行首

开始提交

\n\n =两个新行结束评论

.\n =句号+换行符也会结束评论

/* =斜线和星标开始评论,并以一个新行结束 */仅在与/ *

位于同一行时结束评论

到目前为止,我的语法表为:

(let ((spss-mode-syntax-table (make-syntax-table)))
  (modify-syntax-entry ?* "<" spss-mode-syntax-table)
  (modify-syntax-entry ?. ". 3" spss-mode-syntax-table)
  (modify-syntax-entry ?\n "- 34" spss-mode-syntax-table)
  (modify-syntax-entry ?' "\"" spss-mode-syntax-table)
  (modify-syntax-entry ?\\ "@ " spss-mode-syntax-table)
  spss-mode-syntax-table)

这大部分都有效,除了星号仅在行的开头处作为通知分隔符。有没有办法表示星号是一行开头的的评论分隔符?

感谢您阅读!

1 个答案:

答案 0 :(得分:2)

对于/ * ... * / part,您可以使用

(modify-syntax-entry ?/ ". 14" st)
(modify-syntax-entry ?* ". 23" st)
(modify-syntax-entry ?\n ">" st)

但是对于* ... \ n \ n,你需要一个不同的评论风格,因为它重用了与其他评论风格相同的字符*和\ n,你不能使用简单的语法表设置向Emacs解释。相反,您需要使用syntax-propertize-function"< b"语法会在*位于行首,"> b"语法位于\n } \n\n。 E.g。

(set (make-local-variable 'syntax-propertize-function)
     (syntax-propertize-rules
       ("^\\(\\*\\)" (1 "< b"))
       ("\n\\(\n\\)" (1 "> b"))
       ("\\(\\.\\)\n" (1 "> b"))))