【问题标题】:Sublime Text 3 custom syntax for cottle: hard to startcottle 的 Sublime Text 3 自定义语法:难以开始
【发布时间】:2021-04-09 19:47:31
【问题描述】:

我正在尝试为“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 文件如何处理这种修改?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)应包括所需的行为、特定问题或错误格式化文本(不是图像)在问题本身中重现它所需的最短代码。没有明确的问题陈述的问题对其他读者没有用处。请参阅:minimal reproducible example。特别是,请连同您的伪代码一起发布一些实际代码和您的.sublime-syntax 文件的内容。
  • 评论区有多个吗?另外,在第 4 行,为什么 \"and a string\" 被转义了?它位于{ }-delimited 代码块的中间。
  • MaddDMo:评论:你想要多少。但没有“块 cmets”。转义引号:'因为它在第一个双引号内(在 "This_is_still_code" 调用之后)。
  • @MattDMo:关于我的语法文件:只有 10 行......垃圾?我从 wiki 中的示例中复制了一些代码(关于 C 语法),试图整理出一些东西。我会尽快发布真正的 Cottle 代码。

标签: sublimetext3 syntax-highlighting sublime-syntax


【解决方案1】:

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

所以,我冒昧地创建了一个入门语法定义(周六晚上一个半小时无聊的结果),您可以接受并继续工作。请注意,我没有使用该语言,因此只需阅读文档并查看代码 sn-ps 即可。

你可以在这里找到它的要点 (https://gist.github.com/Ultra-Instinct-05/96fa99e1aaeb32b12d1e62109d61fcc2)

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

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

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

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

【讨论】:

  • 非常感谢!我花了整个星期六( :D )得出类似的东西(虽然不太准确)。您的示例语法解决了我遇到的很多问题,但主要困难仍然存在:-“杂散文本”(如屏幕截图中的 X 是负数)不被视为字符串(其中如果您有类似 it's a string) 之类的内容,则会导致整个突出显示 - 语法的“递归”(嵌套?正确的词是什么?):如果在字符串中间打开一个{ 你正在开始一个全新的 cottle_code_block,其中的引号字符串被转义。
  • 就像我说的,我以前从未使用过 cottle(并且可能也不打算在不久的将来使用它),所以我不知道这种模板语言的怪癖。语法本身就是一个快速的“组合”之类的东西,我并没有过多地讨论它。如果您可以发布示例代码 sn-ps 关于语法在哪里失败在 github gist cmets 中,我可能会给出一些指示。
  • 完成。当您发布您的评论时,我正试图编辑我的评论。
猜你喜欢
  • 2018-09-21
  • 2014-04-03
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
相关资源
最近更新 更多