我试图修改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)
这大部分都有效,除了星号仅在行的开头处作为通知分隔符。有没有办法表示星号是一行开头的仅的评论分隔符?
感谢您阅读!
答案 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"))))