J'ai fait un surligneur de syntaxe HTML en C# et cela fonctionne très bien, mais il y a un problème. Tout d'abord, il fonctionne assez vite parce que la syntaxe met en évidence ligne par ligne, mais quand je colle plus d'une ligne de code ou ouvre un fichier, je dois mettre en évidence le fichier entier qui peut prendre jusqu'à une minute code. J'ai essayé de mettre en évidence les lignes visibles dans la riche boîte de texte mais quand j'essaye de faire défiler, je ne peux pas mettre en surbrillance le nouveau texte visible. Voici mon code: (note: je dois utiliser regex pour que je puisse obtenir les choses dans entre < &> caractères)Comment puis-je optimiser ceci ou existe-t-il une meilleure façon de le faire? (HTML Syntax Highlighter)
Sélectionnez Fichier entier:
public void AllMarkup()
{
int selectionstart = richTextBox1.SelectionStart;
Regex rex = new Regex("<html>|</html>|<head.*?>|</head>|<body.*?>|</body>|<div.*?>|</div>|<span.*?>|</span>|<title.*?>|</title>|<style.*?>|</style>|<script.*?>|</script>|<link.*?/>|<meta.*?/>|<base.*?/>|<center.*?>|</center>|<a.*?>|</a>");
foreach (Match m in rex.Matches(richTextBox1.Text))
{
richTextBox1.Select(m.Index, m.Value.Length);
richTextBox1.SelectionColor = Color.Blue;
richTextBox1.Select(selectionstart, -1);
richTextBox1.SelectionColor = Color.Black;
}
richTextBox1.SelectionStart = selectionstart;
}
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
LockWindowUpdate(richTextBox1.Handle);//Stops text from flashing flashing
richTextBox1.Paste();
AllMarkup();
}finally { LockWindowUpdate(IntPtr.Zero); }
}
Je veux savoir s'il y a une meilleure façon mettre en évidence ceci et le rendre plus rapide ou si quelqu'un peut m'aider à le mettre en évidence seulement le texte visible.
Aidez-nous s'il vous plaît. :) Merci, Tanner.
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – RCIX
Je suis d'accord avec RCIX, mais d'autres conseils. Plusieurs petites regex sont généralement plus rapides qu'une grande. Utiliser IndexOf est aussi beaucoup plus rapide que regex. Et enfin, parser avec un analyseur html et construire le texte RTF d'abord, puis le mettre dans le contrôle. –