【问题标题】:Trying to define comments for SPSS in syntax table试图在语法表中为 SPSS 定义注释
【发布时间】:2014-03-20 17:55:34
【问题描述】:

我正在尝试修改 spss.el 以为 SPSS cmets 提供准确的字体化。下面是SPSS的语法高亮和处理cmets的总结:

* = 星号在行首开始注释

\n\n = 两个新行结束 cmets

.\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)

这在大多数情况下都有效,除了星号仅在行首时用作注释分隔符。有没有办法表示星号是行首的注释分隔符only

感谢您的阅读!

【问题讨论】:

    标签: emacs spss


    【解决方案1】:

    对于 /* ... */ 部分,您可以使用

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

    但是对于 * ... \n\n,您需要不同的注释样式,并且由于它重用了与其他注释样式相同的字符 * 和 \n,因此您不能使用简单的语法表设置来解释它到 Emacs。相反,您需要使用syntax-propertize-function,它将"&lt; b" 语法放在行首的* 上,并将"&gt; b" 语法放在\n\n\n 上。例如

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

    【讨论】:

    • 您好,我正在阅读this thread 并且响应者(另一个 Stefan?)提到如果使用 font-lock 可能无法正常工作。我尝试复制粘贴您的代码 sn-p 无效,然后看到该模式使用字体锁定。感谢您的帮助!
    • 不,font-lock 与 syntax-properize 配合得很好。但也许您的 Emacs 太旧而无法进行语法属性化。此外,复制和粘贴是不够的,因为您使用不同的 var 名称,并且需要在正确的上下文中应用 set 操作。
    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多