[VB.Net] Comment implémenter une coloration syntaxique ?
bonjour, je suis en train de developper une application qui genere du pdf a partir de modele en XML. pour faciliter la creation de ces modeles ( qui sont facilement tres long : jusqu'a 850 lignes pour une seule page en PDF ... ), je suis en train de creer un petit assistant en VB.NET. pour y voir un peu plus clair, je voudrais realiser une coloration syntaxique basique, genre avec trois couleurs pour : mot cle, attribut, valeur de l'attribut.
je suis parti sur une fonction utilisant des expressions reguliere, dans une rich textbox, ca donne ca : (ou area est ma richtextbox )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
Private Sub coloration()
Dim save As Integer = area.SelectionStart
Dim r, r2 As Regex
Dim m, m2 As Match
r = New Regex("< *([a-zA-z]*).*>")
m = r.Match(area.Text)
While m.Success
area.Select(m.Groups(1).Index, m.Groups(1).Length)
area.SelectionColor = Color.Aquamarine
r2 = New Regex("([a-zA-Z]*) *=""([a-zA-Z]*)""")
m2 = r2.Match(m.Value)
While m2.Success
area.Select(m.Index + m2.Groups(1).Index, m2.Groups(1).Length)
area.SelectionColor = Color.Red
area.Select(m.Index + m2.Groups(2).Index, m2.Groups(2).Length)
area.SelectionColor = Color.Blue
m2 = m2.NextMatch
End While
m = m.NextMatch
End While
area.SelectionStart = save
End Sub |
rien de bien complique, et ca fonctionne. les expressions regex on l'air correcte, dans la mesure ou il ne parcourt le fichier qu'une seule fois. le seul hic, c'est que c'est tres lent. Sur mon exemple de 850 lignes, il mets pratiquement 10 secondes !! alors qu'avec notepad++ c'est instantané... je n'en demande pas temps, mais j'aimerais savoir si vous connaissiez un algo vraiment rapide pour faire ca. voila, merci beaucoup !!