AvalonEdit - Portées d'ensembles de règles
-
25-09-2019 - |
Question
Comment vérifier si un mot à une position est dans une Span [i] du xshd-ruleset?
Merci!
La solution
Il y a deux façons d'obtenir des informations du moteur soulignant:
Le moteur de surlignage ne stocke que la « pile span » au début de chaque ligne. Vous pouvez utiliser la méthode DocumentHighlighter.GetSpanStack
pour le récupérer.
var documentHighlighter = textEditor.TextArea.GetService(typeof(IHighlighter)) as DocumentHighlighter;
bool isInComment = documentHighlighter.GetSpanStack(1)
.Any(s => s.SpanColor != null && s.SpanColor.Name == "Comment");
Ceci renvoie vrai si la fin de la ligne 1 (= début de la ligne 2) est à l'intérieur d'un commentaire multiligne.
Pour des résultats plus détaillés à l'intérieur des lignes, vous devrez exécuter le surligneur.
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");
Bien sûr, l'identification des portées / sections de couleur ne fonctionne que de manière fiable si ces couleurs sont nommées. Tous les highlightings intégrés ont été mis à jour pour utiliser des couleurs nommées, donc s'il vous plaît vérifier les fichiers .xshd premier.