我正在编写一个新的GtkSourceView语言规范;遵循the tutorial和其他互联网资源中的信息。我定义的语言可以采用数字:
- 一个或多个
digit
个字符- 可选择添加(例如在结尾处)字母
醇>L
,l
,N
或n
。
示例:
1000
1234L
987654321n
请注意,这只是一些可能的定义之一。
到目前为止,我已经写过(大约(已省略定义的其他部分)):
<context id="number" style-ref="decimal" end-at-line-end="true">
<start>(\d+)([NnlL]?)</start>
<end>\D</end>
</context>
我将其解释为:_A number
以一个或多个数字字符开头,可选后跟任意一个字符:N
n
l
L
,并在遇到非数字编号时结束(例如空格,字母。)
不幸的是,这并不是很有效,因为附加任何指定的字符(或任何字符)会导致它失败(在这种情况下,这意味着不突出显示。)
有关如何匹配此模式的任何想法?提前致谢! :)
答案 0 :(得分:1)
您不需要容器上下文;这就是字符串文字和注释之类的东西,你可以通过开始和结束模式识别它,它可能包含其他上下文。 (例如,字符串文字可能包含\n
之类的转义序列,您可能希望以不同方式突出显示,如this screenshot中所示。)您的“数字”标记可以完全匹配单个简单的正则表达式,这意味着你想要一个简单的上下文:
<context id="number" style-ref="decimal">
<match>\b\d+[NnlL]?\b</match>
</context>
免责声明:我从未使用过GtkSourceView,但我使用过其他基于正则表达式的语法高亮显示器,包括EditPad Pro和我自己用Java编写的一个。