0

长话短说:

我是一名学生,在我的一门课程中,我们必须使用/学习翡翠编程语言。在快速谷歌搜索后,我发现有人已经为它写了一个主要模式。链接到脚本

问题:在第一个注释行“%...”之后,语法高亮停止。因此所有后续行都没有任何语法突出显示。这是非常令人讨厌的。

Emerald 没有多行注释。只有一行注释是语言语法的一部分。单行注释以“%”开始,以行尾结束。

我是整个主要模式的新手,为 emacs 编写 lisp 脚本……等等。

问题:谁能帮我弄清楚语法突出显示出了什么问题?为什么它在第一行注释后停止?以及如何解决?

其他快速问题: 如何使 emacs 突出显示其他语言关键字?例如对象、导出、操作、功能...等?

提前致谢 :)

编辑:这是一个简单的 hello world 测试程序来演示语法高亮:

%this object pronts a hello message on screen
const hello <- object hello
  var n : integer <-  0

  operation gs[] -> [ret: integer]
    n <- n + 1
    ret <- n
    return
  end gs

  % a comment
  % second comment
  % third comment
  initially
    stdout.putstring["Hello World!\n"]
  end initially
end hello
4

1 回答 1

0

第一个问题:您可以使用https://github.com/Lindydancer/font-lock-studio包单步设置 font-lock 关键字。问题可能出在字体锁定关键字之一中,也可能出在语法表中(用于突出显示注释和字符串)。如果在您开始之后font-lock-studio(即在应用任何字体锁定关键字之前),突出显示不正确,那么问题出在语法表上。

第二个问题:您可以调用font-lock-add-keywords一个主要模式挂钩来添加新的字体锁定关键字。有关格式的说明,请参见变量font-lock-keywords。但是,描述有点神秘,所以我也建议你在网上搜索好的例子。

更新:安装后emerald-mode我可以复制您看到的问题。根本原因是该模式以一种不兼容的方式实现了核心 Emacs 功能(Emacs 提供的方式最多需要三个参数)。如果您删除以下函数并重新启动 Emacs,则字体锁定似乎正在工作。

(defun looking-back (regexp)
  "Simulates a looking-at, but works backwards"
  (and (save-excursion
     (re-search-backward regexp (min (point-min) (- (point) 100)) t))
       (= (point) (match-end 0))))

请注意,如果没有 ,我无法找到它,因为正常的字体锁定会在进入 lisp 调试器时font-lock-studio默默地忽略错误(如果不是 nil)。font-lock-studiodebug-on-error

更新 2:似乎emerald-mode定义了一组字体锁定关键字,但从未添加它们。如果您将以下行添加到您的 init 文件中,它似乎可以工作:

(defun my-emeral-mode-hook ()
  (setq font-lock-defaults '(emerald-font-lock-keywords nil t))
  (font-lock-mode 1))
(add-hook 'emerald-mode-hook 'my-emeral-mode-hook)

我注意到它emerald-mode迫切需要移除。例如,主模式不调用kill-all-local-variables,这意味着它保留了之前主模式的所有局部变量。(更好的解决方案是使用define-derived-mode而不是使用普通定义模式defun。)它设置font-lock-keywords-case-fold-search为全局变量而不是 viafont-lock-defaults等。

于 2015-02-15T15:42:05.573 回答