我该如何优化它或者有更好的方法吗?(HTML语法荧光笔)

时间:2010-05-12 01:53:37

标签: c# regex richtextbox syntax-highlighting

我在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); }
    }

我想知道是否有更好的方法可以突出显示并加快速度,或者有人可以帮助我突出显示可见文字。

请帮忙。 :) 谢谢,坦纳。

1 个答案:

答案 0 :(得分:1)

我同意RCIX - 结合正则表达式和HTML解析你会遇到困难:)

如果您想要一个始终突出强调语法的高质量解决方案,那么您将需要一个完整的解析器。您可以使用已创建的工具,也可以使用ANTLR等工具创建自己的工具。

ANTLR的创建者已经创建了HTML解析器语法。你可以找到它here

如果你正在寻找一个预制的,我发现了一些:

  1. HTML Agility Pack
  2. Majestic 12 HTML Parser
  3. SGML Reader
  4. 我确定还有其他人 - 这是一个非常常见的要求。

    长话短说,如果这不是一个简单的一次性项目,我会得到一个完整的解析器。否则,你可以继续尝试用正则表达式破解它。