繁体   English   中英

我该如何优化它或有更好的方法呢?(HTML语法标注工具)

[英]How can I optimize this or is there a better way to do it?(HTML Syntax Highlighter)

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

我想知道是否有更好的方法来突出显示此内容并使之更快,或者是否有人可以帮助我使其突出显示可见的文本。

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

我同意RCIX-将Regex和HTML解析结合起来会给整体带来麻烦:)

如果要使用始终正确突出显示语法的高质量解决方案,则将需要成熟的解析器。 您可以使用已经创建的工具,也可以使用ANTLR之类的工具创建自己的工具。

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

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

  1. HTML敏捷包
  2. 雄伟的12 HTML解析器
  3. SGML阅读器

我敢肯定还有其他人-这是很常见的要求。

长话短说,如果这只是一个简单的一次性项目,我会得到一个成熟的解析器。 否则,您可以继续尝试使用Regex对其进行破解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM