【问题标题】:AvalonEdit XSHD Syntax Highlighting - Ending a SpanAvalonEdit XSHD 语法高亮 - 结束 Span
【发布时间】:2020-08-02 12:19:50
【问题描述】:

我正在使用 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>

这就是我观察到的:

很明显,&lt;End color="CodeBlockStartEndTags"&gt;\}&lt;/End&gt; 标记在找到下一个右大括号 } 后立即结束跨度。实际上它应该跳过这个大括号,因为它前面有一个左大括号。

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

这在 XSHD 中可行吗?

谢谢

【问题讨论】:

    标签: .net regex wpf razor avalonedit


    【解决方案1】:

    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>
    

    【讨论】:

    • 非常感谢!它工作得很好,正是我所需要的。我花了将近 2 天的时间试图弄清楚这一点,但一无所获。这个世界需要更多像你这样的人:)
    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 2011-05-07
    • 2012-09-19
    • 2011-09-11
    • 2012-08-02
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多