簡體   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