【问题标题】:Syntax highlighting for first word in line (grammar package for Atom)行中第一个单词的语法突出显示(Atom 的语法包)
【发布时间】:2016-04-08 16:26:24
【问题描述】:

我正在努力改进现有的 Stata 语法以在 Atom 上使用,language-stata 包。 Stata 代码遵循一种模式:一行中的第一个单词是命令,逗号将选项与命令的对象分开。例如,要在没有常数的情况下对 x 进行 y 的线性回归,请运行:

regress y x, noconstant

三斜杠表示命令在下一行继续。因此前面的代码等价于:

regress x /// COMMENTS
y, /// MORE COMMENTS
noconstant

我认为语法应该突出显示一行的每个第一个单词除非前一行包含三个斜杠。在上面的两个示例中,它应该突出显示命令regress,但它不应该突出显示第二个示例中的单词ynoconstant。我想像:

  1. 从行首开始捕获;
  2. 突出显示第一个单词;
  3. 只要行包含三个斜线,就继续捕获;
  4. 当我发现没有三斜杠的行尾时停止。

我已经尝试了一些方法。例如:

{
    name: 'comment.line.stata'
    match: '///.*'
}
{
    begin: '^\\s*(\\w+)'
    end: '(?<!///)$'
    beginCaptures:
        "1":
            name: 'support.function.stata'
}

此代码突出显示每行的第一个单词,无论它之前是否有三个斜杠。另一方面,

{
    name: 'comment.line.stata'
    match: '///.*'
}
{
    begin: '^\\s*(\\w+)'
    while: '///'
    beginCaptures:
        "1":
            name: 'support.function.stata'
}

突出显示文档的第一个单词而不是其他任何内容。

有没有人想办法解决这个问题?谢谢!

【问题讨论】:

  • 我试图更具体!听起来怎么样?
  • 但是如果我使用regress y x, noconstant,它不会识别任何模式。
  • 我试图澄清和简单的问题。我删除了关于逗号的部分。是不是更清楚了?
  • 你想在第一个例子中强调什么:regress y x, noconstant?请尝试this pattern,但它不是那么聪明:(
  • 您的代码启发了我寻找解决方案!我把它贴在下面。我只需要概括一下您的代码。

标签: regex stata atom-editor


【解决方案1】:

ccfthis discussion 的 cmets 的基础上,我想出了一些似乎可行的方法:

{
    name: 'comment.line.stata'
    match: '///.*'
}
{
    begin: '^\\s*([a-zA-Z_]+)(.*)(///.*)$'
    beginCaptures:
        "1":
            name: 'support.function.stata'
    end: '^([^/]+|/($|[^/]|/($|[^/])))*$'
}
{
    captures:
        "1":
            name: 'support.function.stata'
    match: '^\\s*([a-zA-Z_]+)'
}

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多