2010-10-23 60 views

回答

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文件。

+0

谢谢,它的工作正常。 – zee 2010-11-09 14:05:30

+0

我觉得它有点慢。是否有一些代码使其更快? – zee 2010-11-17 12:52:07