AVALONONONEDIT - Vãos de conjunto de regras
-
25-09-2019 - |
Pergunta
Como verificar se uma palavra em uma posição está em um período [i] do xshd-ruleset?
Obrigado!
Solução
Existem duas maneiras possíveis de obter informações do mecanismo de destaque:
O mecanismo de destaque armazena apenas a "pilha de span" no início de cada linha. Você pode usar o DocumentHighlighter.GetSpanStack
Método para recuperá -lo.
var documentHighlighter = textEditor.TextArea.GetService(typeof(IHighlighter)) as DocumentHighlighter;
bool isInComment = documentHighlighter.GetSpanStack(1)
.Any(s => s.SpanColor != null && s.SpanColor.Name == "Comment");
Isso retornará verdadeiro se o final da linha 1 (= início da linha 2) estiver dentro de um comentário multilina.
Para resultados mais detalhados, você terá que executar o marcador.
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");
Obviamente, a identificação de vãos/seções por cor funciona apenas de maneira confiável se essas cores forem nomeadas. Nem todos os destaques internos foram atualizados para usar as cores nomeadas; portanto, verifique os arquivos .xshd primeiro.