括号突出显示无法正常工作 - VB.NET

Brackets highlighting doesn't work correctly - VB.NET

我正在为我自己的编程语言创建一个文本编辑器。它工作得很好,但我有一个问题;当我输入这样的内容时:

void Example() {
   for (int i = 0, 10; i++) {
    console.println(i);
   }
}

for 循环的右括号

for (int i = 0, 10; i++) {
    console.println(i);
} <== This one

未突出显示。谁能帮我? 提前致谢!

这是我的代码:

Imports System.Drawing.Color
Imports System.Drawing.Font

Public Class Form1

Private Sub Highlight(ByRef Text As String(), ByRef Name As String)
    Dim Color As Color = Nothing
    Dim Font As Font = Nothing
    Select Case Name
        Case "Keywords"
            Color = Blue
            Font = NewFont(FontStyle.Regular)
        Case "Functions"
            Color = Black
            Font = NewFont(FontStyle.Italic)
        Case "Classes"
            Color = Cyan
            Font = NewFont(FontStyle.Regular)
        Case "Types"
            Color = Purple
            Font = NewFont(FontStyle.Regular)
        Case "Operators"
            Color = GreenYellow
            Font = NewFont(FontStyle.Regular)
        Case "Brackets"
            Color = Red
            Font = NewFont(FontStyle.Regular)
    End Select
    Dim CursorPos As Integer = tb.SelectionStart
    For i As Integer = 0 To Text.Length - 1
        FindAll(tb, Text(i))
        tb.SelectionColor = Color
        tb.SelectionFont = Font
        tb.DeselectAll()
    Next
    tb.SelectionStart = CursorPos
    tb.SelectionColor = Nothing
    tb.SelectionFont = NewFont(FontStyle.Regular)
End Sub

Private Function NewFont(ByVal Style As FontStyle)
    Return New Font(tb.Font, Style)
End Function

Private Sub FindAll(ByRef tb As RichTextBox, ByRef Find As String)
    Dim StartIndex As Integer = 0
    Dim Text As String = tb.Text
    Do
        Dim Index As Integer = Text.IndexOf(Find, StartIndex)
        If Index < 0 Then
            Exit Do
        End If
        tb.Select(Index, Find.Length)
        StartIndex = Index + 1
    Loop
End Sub

Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb.TextChanged
    Dim Keywords As String() = {"new", "using", "void", "function", "public", "protected", "private", "if", "else", "for", "loop", "while", "until", "true", "false", "null", "default"}
    Dim Types As String() = {"string", "int", "long", "byte", "char"}
    Dim Brackets As String() = {"(", ")", "[", "]", "{", "}"}
    Dim Operators As String() = {"+", "-", "=", "/", "*"}
    Dim Classes As String() = {"console", "color", "font"}
    Dim Functions As String() = {"print", "println"}
    Highlight(Keywords, "Keywords")
    Highlight(Types, "Types")
    Highlight(Brackets, "Brackets")
    Highlight(Operators, "Operators")
    Highlight(Classes, "Classes")
    Highlight(Functions, "Functions")
End Sub
End Class

您的代码仅突出显示每个括号、运算符等的最后一次出现...

通过在每次成功找到后应用字体和颜色将正确影响文本。

顺便说一句,您的代码没有取消 hilite 关键字(例如 void 更改为 vo id 保持 hilited)

结果 tadaa

修改 FindAll() 过程

    Private Sub FindAll(ByRef tb As RichTextBox, ByRef Find As String, ByRef StartIndex As Integer)

    Dim Text As String = tb.Text

    Dim Index As Integer = Text.IndexOf(Find, StartIndex)
    StartIndex = Index + 1
    If Index < 0 Then
        Exit Sub
    End If
    tb.Select(Index, Find.Length)
End Sub

For 循环Highlight 过程

的末尾
        Dim CursorPos As Integer = tb.SelectionStart

    For i As Integer = 0 To Text.Length - 1
        Dim StartIndex As Integer = 0
        Do
            FindAll(tb, Text(i), StartIndex)

            If StartIndex = 0 Then
                Exit Do
            End If

            tb.SelectionColor = Color
            tb.SelectionFont = Font
            tb.DeselectAll()
        Loop
        tb.SelectionStart = CursorPos
        tb.SelectionColor = Nothing
        tb.SelectionFont = NewFont(FontStyle.Regular)
    Next