Я пытаюсь выделить некоторый синтаксис в 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, которая содержит переводы строки?