【问题标题】:AvalonEdit - Ruleset SpansAvalonEdit - 规则集跨度
【发布时间】:2010-10-23 18:06:51
【问题描述】:

如何检查某个位置的单词是否在 xshd-ruleset 的 Span[i] 中?

谢谢!

【问题讨论】:

    标签: c# sharpdevelop avalonedit


    【解决方案1】:

    有两种方法可以从高亮引擎中获取信息:

    突出显示引擎仅在每行的开头存储“跨度堆栈”。您可以使用DocumentHighlighter.GetSpanStack 方法来检索它。

    var documentHighlighter = textEditor.TextArea.GetService(typeof(IHighlighter)) as DocumentHighlighter;
    bool isInComment = documentHighlighter.GetSpanStack(1)
                 .Any(s => s.SpanColor != null && s.SpanColor.Name == "Comment");
    

    如果第 1 行的结尾(= 第 2 行的开头)在多行注释内,这将返回 true。

    要在行内获得更详细的结果,您必须运行荧光笔。

    int off = document.GetOffset(7, 22);
    HighlightedLine result = documentHighlighter.HighlightLine(7);
    bool isInComment = result.Sections.Any(s => s.Offset <= off
                                             && s.Offset+s.Length >= off
                                             && s.Color.Name == "Comment");
    

    当然,通过颜色识别跨度/部分只有在命名这些颜色时才能可靠地工作。并非所有内置突出显示都已更新为使用命名颜色,因此请先检查 .xshd 文件。

    【讨论】:

    • 我觉得有点慢。有没有一些代码可以让它更快?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多