我在C#中创建了一个HTML语法高亮显示器并且效果很好,但是有一个问题。首先它运行得非常快,因为它的语法逐行突出显示,但是当我粘贴多行代码或打开文件时,我必须突出显示整个文件,对于只有150行的文件,这可能需要一分钟码。我尝试在richtextbox中突出显示可见的行,但是当我尝试滚动时,我无法突出显示新的可见文本。这是我的代码:(注意:我需要使用正则表达式,所以我可以在<&>字符之间)获取内容。
突出显示整个文件:
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); }
}
我想知道是否有更好的方法可以突出显示并加快速度,或者有人可以帮助我突出显示可见文字。
请帮忙。 :) 谢谢,坦纳。
答案 0 :(得分:1)
我同意RCIX - 结合正则表达式和HTML解析你会遇到困难:)
如果您想要一个始终突出强调语法的高质量解决方案,那么您将需要一个完整的解析器。您可以使用已创建的工具,也可以使用ANTLR等工具创建自己的工具。
ANTLR的创建者已经创建了HTML解析器语法。你可以找到它here。
如果你正在寻找一个预制的,我发现了一些:
我确定还有其他人 - 这是一个非常常见的要求。
长话短说,如果这不是一个简单的一次性项目,我会得到一个完整的解析器。否则,你可以继续尝试用正则表达式破解它。