包含gtksourceview空间的匹配问题?

时间:2015-02-17 05:40:30

标签: regex ada gtksourceview

我正在为gtksourceview中的Ada改进语法突出显示(目前,它已经过时且非常不完整)。我遇到的一个问题是,Ada非常有位置,所以匹配许多结构需要匹配这些位置。我很容易在nano中做到这一点。

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

type Trit is range 0..2;

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

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

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

在这里,您可以看到旧的gtksourceview定义在运行中,这对于具有许多自定义类型的文件不起作用。我的纳米定义在行动方面用于比较;按位置匹配肯定是可能的并且有效。 old-gtksourceview definition sidebyside with my nano definition

当我将类型上下文放在关键字上下文下面时会发生什么。 enter image description here

当我将类型上下文放在关键字上下文之上时会发生什么。 enter image description here

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

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

1 个答案:

答案 0 :(得分:0)

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

不幸的是,这并没有回答你如何来制定GtkSourceView语法的问题。