AvalonEdit XSHD 语法高亮 - 结束跨度

AvalonEdit XSHD Syntax Highlighting - Ending a Span

我正在使用 AvalonEdit 并致力于为文件添加语法突出显示(语法有点像剃刀)。这是我第一次使用XSHD文件,所以如果这真的很简单,请原谅我。

可以通过以下示例代码查看我遇到的问题:

Not C#

@{
    public void DoStuff() {
        // C# highlighting here
    }

    public void DoMoreStuff() {
        // C# highlighting here
    }
}

@{} 中,我需要应用 C# 语法突出显示。所以我在 xshd 中这样做:(简化)

<Span ruleSet="RazorCode" multiline="true">
    <Begin color="CodeBlockStartEndTags">\@\{</Begin>
    <End color="CodeBlockStartEndTags">\}</End>
</Span>
<RuleSet name="RazorCode">
    <Import ruleSet="C#/" />
</RuleSet>

这就是我观察到的:

很明显,<End color="CodeBlockStartEndTags">\}</End> 标签一找到下一个右大括号 } 就结束了跨度。实际上它应该跳过这个大括号,因为它前面有一个左大括号。

所以我需要它来计算左大括号并将它们与右大括号配对,以实际结束正确的右大括号上的跨度。

这在 XSHD 中可行吗?

谢谢

XML 语法突出显示跟踪规则集激活的堆栈。您可以通过递归激活 RuleSet 来计算大括号:

<Span ruleSet="RazorCode" multiline="true">
    <Begin color="CodeBlockStartEndTags">\@\{</Begin>
    <End color="CodeBlockStartEndTags">\}</End>
</Span>
<RuleSet name="RazorCode">
    <Import ruleSet="C#/" />
    <Span ruleSet="RazorCode" multiline="true">
        <Begin>\{</Begin>
        <End>\}</End>
    </Span>
</RuleSet>