cottle 的 Sublime Text 3 自定义语法:很难开始

Sublime Text 3 custom syntax for cottle: hard to start

我正在尝试为“cottle”(这是一种专用于 Elite:Dangerous 的文本转语音应用程序中使用的脚本语言)制作一个“非常简单”的语法高亮显示。 我想要的(至少在开始时)是三种不同的颜色:注释、“非字符串”和字符串。

我开始尝试使用 ST3 wiki、youtube 教程、此处的问题....但我不知道该怎么做,因为语言的工作方式。 我将尝试向您展示一个示例

{ everything_between_a_pair_of_brackets_is_code }
everything outside all pairs of bracket is a string {_ and this is a comment. It begins with "_" and ends at the closing bracket }
{ This_is_code("but this is a string")
  This_is_still_code("this is also a string {but_this_is_code(\"and a string\")} and this the end of the string")
}

我的问题是如何在我的 cottle.sublime-syntax 文件中定义这种“nidification”。我设法得到评论,但只有第一个。


- 编辑 -


这是一个真实的脚本:

{event.item} 
{if event.repairedfully:
    fully repaired
|else:
    partially repaired 
    {Occasionally(2,
        cat(
            OneOf("to ", "at "),
            Humanise(event.health * 100),
            " percent functionality"
        )
    )}
}

{Occasionally(2, 
    cat(OneOf(", ", "and is"), " ready for re-activation")
)}.

此脚本的输出可能是“引擎模块已完全修复。”或“引擎模块已部分修复,可以重新激活。"

请注意短语的最后一个点,在代码中是在最后一个括号之后。

这是另一个示例,将字符串传递给其他字符串中的函数:

{OneOf("{ShipName()} has", "")} 
{OneOf("left supercruise", "{OneOf(\"entered\", \"returned to\", \"dropped to\")} normal space")}

我的问题是: sublime-syntax 文件如何处理这种 nidification?

查看 https://cottle.readthedocs.io/en/stable/page/01-overview.html 上的模板语言概述,编写 .sublime-syntax 的语法似乎很简单,但鉴于完全缺乏了解如何实现的资源语法文件在 ST 中有效,我可以理解它有时难以开始甚至难以理解。

因此,我冒昧地创建了一个入门语法定义(周六晚上无聊一个半小时的结果),您可以使用它并继续研究。请注意,我没有使用过该语言,因此仅通过阅读文档和查看代码片段就可以做到。

您可以在此处找到要点 (https://gist.github.com/Ultra-Instinct-05/96fa99e1aaeb32b12d1e62109d61fcc2)

这是我使用的配色方案的屏幕截图(遵循官方范围命名指南)。

它仍然缺乏对用户定义函数的支持(正如我从文档中了解到的)(可能还有一些其他的东西),但也许这是你可以添加的东西!

请注意,要使用它,请将文件另存为 Cottle.sublime-syntax 在您的 User 包中。现在具有 .cottle 扩展名的文件被突出显示(因为我不知道你如何创建 cottle 文件)。

语法定义未使用 ST4 中添加的任何新功能,因此它在 ST3 和 ST4 中的工作方式应该相同。