Подсветка синтаксиса в .net richtextbox, как мне работать с переводами строки? - PullRequest
0 голосов
/ 07 октября 2010

Я пытаюсь выделить некоторый синтаксис в richtextcontrol (цитируемый текст, теги XML, комментарии XML). Помимо очевидной проблемы, созданной моей собственной глупостью (например, бег по тексту для выделения синтаксиса занимает более секунды, и я, конечно, не могу проверить синтаксис всякий раз, когда вводится символ), я также столкнулся с проблемой, вызванной символами новой строки в текст.

Это моя слабая попытка подсветки синтаксиса:

    While i < l

        ssRelevantText = t.Text.Substring(i)

        ssSelectedText = Regex.Match(ssRelevantText, pattern, RegexOptions.Singleline).Value
        idxSelectionStart = t.Find(ssSelectedText, i, RichTextBoxFinds.None)
        idxSelectionLength = ssSelectedText.Length
        t.SelectionStart = idxSelectionStart
        t.SelectionLength = idxSelectionLength
        t.SelectionColor = color

        i = idxSelectionStart + idxSelectionLength
        t.SelectionStart = idxCursorBeforeSelection
        t.SelectionLength = 0
        t.SelectionColor = color.Black

    End While

(я удалил комментарии, потому что, как ни странно, комментарии VB нарушают синтаксическую подсветку SO.)

Я также пробовал другие RegexOptions, но проблема остается в то время как, например,

"привет"

найден и точно окрашен,

"

привет

"

не найден. (Раскраска также терпит неудачу ниже такого инцидента, но не всегда.)

Если я заменю все символы новой строки каким-либо другим символом, вышеприведенное сработает, и все будет выделено правильно. Почему мешают переводы строк?

Кроме того, как можно подсветить синтаксис в richtextbox? Все примеры, которые я могу найти, относятся к подсветке синтаксиса зарезервированных слов, а не терминов, основанных на шаблонах.

Edit: я до сих пор выяснил, что метод RichTextBox Find () не находит строки, содержащие переводы строк. Поскольку это вызывает исключение (его легко избежать), дальнейшее выделение после этого не производится. Как я могу найти строку в RichTextBox, которая содержит переводы строки?

1 Ответ

0 голосов
/ 07 октября 2010

Возможно, вы захотите посмотреть здесь: http://blogs.microsoft.co.il/blogs/tamir/archive/2006/12/14/RichTextBox-syntax-highlighting.aspx

Это хороший пример того, как подсветить синтаксис в C # с помощью RichTextBox.

...