突出显示中的Avalon编辑突出显示

时间:2020-04-24 08:25:38

标签: wpf syntax-highlighting avalonedit

借助Avalon Edit,我正在寻找一种在已格式化的内容中提供突出显示格式的方法。

也就是说,我想在引号中突出显示内容,但是在这些引号中,我可以添加另一种语法,该语法以${开始,以}结尾。

默认情况下,语法高亮显示一旦进入“开始”就停止,并且直到到达末尾才查找其他任何内容。

<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>
</Span>
<Span color="Variable" multiline="false">
  <Begin>\${</Begin>
  <End>}</End>
</Span>

因此,这里${语法只有在ParamName")内时才被着色。有没有一种方法可以使我的变量突出显示即使在ParamName中也可以工作(是的,ParamName来自JSON格式,我希望无论突出显示在JSON中的什么位置,我的突出显示都可以工作语法)?

完整的荧光笔代码:

<Keywords color="Digits" >
  <Word>true</Word>
  <Word>false</Word>
</Keywords>

<Span color="Value" multiline="true">
  <Begin>
    (?&lt;=:)\040?"[^"]*
  </Begin>
  <End>"</End>
</Span>
<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>
</Span>
<Span color="Variable" multiline="false">
  <Begin>\${</Begin>
  <End>}</End>
</Span>
<Rule color="Digits">\b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>

1 个答案:

答案 0 :(得分:1)

一个<Span>切换到该范围内处于活动状态的另一个<RuleSet>。默认情况下,这是一个空规则集,因此没有其他活动。

如果您要在范围内应用规则,请将其移至嵌套规则集:

<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>

  <RuleSet>
    <Span color="Variable" multiline="false">
     <Begin>\${</Begin>
     <End>}</End>
    </Span>
  </RuleSet>
</Span>