Существует два возможных способа получения информации от подсвечивающего механизма:
Подсветка сохраняет только «стек пролета» в начале каждой строки. Вы можете использовать метод 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");
Это вернет true, если конец строки 1 (= начало строки 2) находится внутри многострочного комментария.
Для получения более подробных результатов в строках, вам нужно запустить подсветку.
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.