Как я могу оптимизировать это или есть лучший способ сделать это? (HTML Syntax Highlighter) - PullRequest
1 голос
/ 12 мая 2010

Я сделал подсветку синтаксиса HTML в C #, и она прекрасно работает, но есть одна проблема. Во-первых, он работает довольно быстро, потому что синтаксис подсвечивает построчно, но когда я вставляю более одной строки кода или открываю файл, мне нужно выделить весь файл, который может занять до минуты для файла, содержащего только 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 Ответ

1 голос
/ 12 мая 2010

Я согласен с RCIX - вам будет трудно в целом сочетать анализ Regex и HTML:)

Если вы ищете высококачественное решение, которое всегда правильно выделяет синтаксис, вам понадобится полноценный синтаксический анализатор. Вы можете использовать тот, который уже создан, или создать свой собственный, используя такой инструмент, как ANTLR .

Создатели ANTLR уже создали грамматику парсера HTML. Вы можете найти это здесь .

Если вы ищете предварительно построенный, вот несколько я нашел:

  1. HTML-пакет Agility
  2. Majestic 12 HTML Parser
  3. SGML Reader

Я уверен, что есть и другие - это довольно распространенное требование.

Короче говоря, если бы это был не простой, одноразовый проект, я бы получил полноценный парсер. В противном случае вы можете продолжить попытки взломать его с помощью регулярных выражений.

...