【问题标题】:Problems with matches containing space for gtksourceview?包含 gtksourceview 空间的匹配问题?
【发布时间】:2015-02-17 05:40:30
【问题描述】:

我正在努力改进 gtksourceview 中 Ada 的语法突出显示(目前,它非常过时且非常不完整)。我遇到的一个问题是,Ada 是非常定位的,因此匹配许多构造需要匹配这些位置。我可以很容易地在 nano 中做到这一点。

所以,让我们考虑一个类型声明,例如:

type Trit is range 0..2;

诸如“类型”、“是”和“范围”之类的关键字被识别(并且最初是)。但是,类型名称被视为关键字(这是一个糟糕的设计决策,因为 Ada 经常定义新类型,即使对于像整数这样的简单类型也是如此)。用途是标准中的类型被着色,所有其他类型看起来像普通文本,违背了突出显示的目的。在某些语言中,这可能是一个值得注意的问题。但是,大多数类型名称出现在两个正则表达式模式之后:

type\s+(\w|\.|_)+
:\s+(\w|\.|_)+

这可能只是实现的问题(nano 和 gtksourceview 似乎使用不同的正则表达式实现)。我认为问题在于识别空间。事实证明,将类型上下文放在关键字上下文之上会导致类型现在被突出显示,但是“type”关键字或“:”运算符没有正确突出显示(它们被突出显示为“type”)。我能够在 nano 中覆盖它,从而正确突出显示,但似乎无法找出 gtksourceview 是如何做到这一点的。

在这里您可以看到旧的 gtksourceview 定义在起作用,它不适用于具有许多自定义类型的文件。我的纳米定义在旁边进行比较;按位置匹配绝对是可能的并且有效。

当我将类型上下文置于关键字上下文之下时,会发生以下情况。

当我将类型上下文置于关键字上下文之上时会发生以下情况。

在这两种情况下,上下文是相同的,只是一个简单的开始模式。

<context id="type" style-ref="type">
  <match>(type)\s+\w+</match>
</context>

【问题讨论】:

  • 您能给我们一些关于输入+当前输出的示例吗?使用此代码+预期输出?
  • @vianna77 图片上传

标签: regex ada gtksourceview


【解决方案1】:

您可能需要考虑从Language Reference Manual 的附件 P 中对 Ada 语法的正式描述中生成解析器。

不幸的是,这并没有回答您关于如何为 GtkSourceView 制定语法的问题。

【讨论】:

  • 我知道附件 P,这也是我的 nano 模式的基础。这不是不知道语法/模式的问题,而是不知道 gtksourceview 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多