Синтаксическое кодирование VB.NET - PullRequest
0 голосов
/ 25 апреля 2010

Я знаю, что многие спрашивают, как это делается, но я не понимаю, в каком контексте использовать ответы, поэтому ...

Я создаю редактор кода для подрывной деятельности языка Python и нашел очень приличный способ выделения ключевых слов в RichTextBox с помощью этого:

  bluwords.Add(KEYWORDS GO HERE)
  If scriptt.Text.Length > 0 Then
       Dim selectStart2 As Integer = scriptt.SelectionStart
       scriptt.Select(0, scriptt.Text.Length)
       scriptt.SelectionColor = Color.Black
       scriptt.DeselectAll()
       For Each oneWord As String In bluwords
            Dim pos As Integer = 0
            Do While scriptt.Text.ToUpper.IndexOf(oneWord.ToUpper, pos) >= 0
                 pos = scriptt.Text.ToUpper.IndexOf(oneWord.ToUpper, pos)
                 scriptt.Select(pos, oneWord.Length)
                 scriptt.SelectionColor = Color.Blue
                 pos += 1
            Loop
       Next
       scriptt.SelectionStart = selectStart2
  End If

(scriptt - это richtextbox) Но когда набирается какой-либо приличный объем кода (или загружается через OpenFileDialog), фрагменты кода пропадают, выбор синтаксиса распадается, и он просто разрушает его. Я ищу более эффективный способ сделать это, может быть, что-то более похожее на саму Visual Studio ... потому что НЕ НУЖНО выделять весь текст, ставить его черным, а затем повторять весь синтаксис, и текст начинает перегружаться -правильно, если вы вернетесь, чтобы вставить символы между текстом. Кроме того, в этой версии Python хеш (#) используется для комментариев только к строкам комментариев, а двойной хеш (##) используется для комментариев в той же строке. Теперь я увидел, что кто-то спросил об этой точной вещи, и рабочий ответ для выбора до конца строки был что-то вроде: ^ \ '[^ \ r \ n] + $ |' '[^ \ r \ n] + $ который я, кажется, не могу получить на практике. Я также хотел выделить текст между кавычками и сделать его бирюзовым, например между первой кавычкой и вторым, текст бирюзовым и таким же между 3-м и 4-м и так далее ...

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 25 апреля 2010

Visual Studio использует полноценный синтаксический анализатор на основе грамматики языка; использование нескольких простых регулярных выражений никогда не даст вам одинаковых результатов.

Вы смотрели на SyntaxHighlighter ?

(см. Также: Подсветка синтаксиса )

...