如何从定制的ACE编辑器模式强制软包装?

时间:2016-04-20 23:50:36

标签: javascript ace-editor

我正在为ACE editor编写自定义模式以支持我的玩具模板语言。

在语言中有一个嵌入换行符的构造:

foo{\n}bar

它将使用换行符呈现,如下所示:

foo
bar

我想在编辑器中模仿这个并在{\n}之后强制换行:

1 | foo{\n}
  | bar

有没有办法在我的模式下执行此操作?

更新:FWIW,这是我模式文件的link

1 个答案:

答案 0 :(得分:0)

没有代码,重现 [编辑:见下文] 有点困难,但根据the class diagram,您需要与VirtualRenderer进行互动以改变事物的方式显示。

代码样式需要theme。 (您可以在Theme - 菜单中的the editor中选择这些内容。主题为css(+ js)个文件,可以使用this trick{\n}元素类之后插入换行符。

编辑:已添加代码

根据\n的位置(正则表达式的几个部分可能匹配),您可能可以使用

{
    token: function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
      return [
        "constant",
        "keyword.operator",
        (arg3 === '\n') ? "newline" : "variable.parameter",
        "keyword.operator",
        "string",
        "keyword.operator",
        "variable"
      ],
    regex: /([%]?)([=]?)([^|>}]*)([|]?)([^>}]*)([>]?)([^}]*)/
}

然后有

.ace_newline:after {
  content:"\a";
  white-space: pre;
}

在自定义主题中。