AvalonEdit - 规则集跨度

时间:2010-10-23 18:06:51

标签: c# sharpdevelop avalonedit

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

谢谢!

1 个答案:

答案 0 :(得分:3)

有两种方法可以从突出显示引擎获取信息:

突出显示引擎仅在每行的开头存储“跨度堆栈”。您可以使用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文件。