我有一个简单的“语言”(类似模板的语言和简单的标记语言,比如BB码 - 基本上是一些变量,标签和类似的功能,只是普通文本),我想强调它的语法。
这是我坚持的东西。
有变量,它们均封装$符号($ VAR1 $)。 我想强调他们与这条规则:
<RuleSet name="VariableSet">
<Rule color="Variable">
\$\S+?\$
</Rule>
</RuleSet>
周围的可变区的一些可以与{}字符包围。
换句话说:一些变量可以具有它的“区域”,其从第一开始{变量之前以及在所述第一端}可变后。 多变量不能在一个区域中,所以在情况下,像{ $var1$ $var2$ }
没有任何地区,{}被当作普通字符和忽略。 它不是像C风格的语言功能和本地作用域的一个范围。
下面是一个例子:
[b]lorem ipsum[/b] $var0$ dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
{ // <— not nighlighted
{ // <— highlighted
ut enim ad minim veniam, quis nostrud
$var1$
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
} // <— highlighted
} // <— not nighlighted
// all brackets below also should be not highlighted
duis aute { $50, 25$} irure { dolor } excepteur $var2$ sint occaecat cupidatat non
proident, sunt in culpa qui mollit anim id { est $var2$ laborum.
{ $var3$ $var4$ }
首先,我想解决这个使用两个Rule
的正则表达式(用于{和},当然这种方法的,不可能跳过与未闭合的括号样病例{ $var$
或者$var$ }
但是,这不是一个大问题)。 但是我发现, Rule
只适用于特定行。
然后我试图Span
是这样的:
<Span color="VariableAreaDelimiter" multiline="true">
<Begin>
\{(?!\{.*?\$\S+?\$)(?=.*?\$\S+?\$)
</Begin>
<End>
\}
</End>
<RuleSet>
<Import ruleSet="VariableSet"/>
<Rule foreground="Black" fontWeight="normal">
.
</Rule>
</RuleSet>
</Span>
一些问题:
虽然
multiline
是true
正则表达式的Begin
和End
并不多行工作。 所以它不匹配这样的:{ $var$
如果没有结束括号跨度需要的一切,直到文档结束。 这就是为什么我添加的
.
规则。