AvalonEdit - наборы правил - PullRequest
       24

AvalonEdit - наборы правил

2 голосов
/ 23 октября 2010

Как проверить, находится ли слово в позиции в диапазоне [i] набора правил xshd?

Спасибо!

1 Ответ

3 голосов
/ 06 ноября 2010

Существует два возможных способа получения информации от подсвечивающего механизма:

Подсветка сохраняет только «стек пролета» в начале каждой строки. Вы можете использовать метод 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.

...