'Setup for pattern matching
Sub InitializePatterns
KEYWORD_PATTERN = $"\b(${Utils.StringJoin("|", Utils.GetKeywords)})\b"$
TYPES_PATTERN = $"\b(${Utils.StringJoin("|", Utils.GetTypes)})\b"$
STRING_PATTERN = "("".*""|\$"".*""\$)"
COMMENT_PATTERN = $"'.*"$
Pattern1.Initialize
Pattern1 = Pattern1.Compile($"(?<KEYWORD>${KEYWORD_PATTERN})|(?<TYPES>${TYPES_PATTERN})|(?<STRING>${STRING_PATTERN})|(?<COMMENT>${COMMENT_PATTERN})"$)
End Sub
'Create the style types for matching words
Sub ComputeHighlighting(Text As String) As JavaObject
Dim PMatcher As PatternMatcher = Pattern1.Matcher(Text)
Dim SpansBuilder As JavaObject
SpansBuilder.InitializeNewInstance("org.fxmisc.richtext.StyleSpansBuilder",Null)
Dim Collections As JavaObject
Collections.InitializeStatic("java.util.Collections")
Dim LastKwEnd As Int = 0
Dim StyleClass As String
Do While PMatcher.Find
StyleClass = ""
If PMatcher.Group3("COMMENT") <> "null" Then
StyleClass = "comment"
Else
If PMatcher.Group3("STRING") <> "null" Then
StyleClass = "string"
Else
If PMatcher.Group3("KEYWORD") <> "null" Then
StyleClass = "keyword"
Else
If PMatcher.Group3("TYPES") <> "null" Then
StyleClass = "types"
End If
End If
End If
End If
SpansBuilder.RunMethod("add",Array(Collections.RunMethod("emptyList",Null),PMatcher.Start - LastKwEnd))
SpansBuilder.RunMethod("add",Array(Collections.RunMethod("singleton",Array(StyleClass)),PMatcher.End_ - PMatcher.Start))
LastKwEnd = PMatcher.End_
Loop
SpansBuilder.RunMethod("add",Array(Collections.RunMethod("emptyList",Null),Text.Length - LastKwEnd))
Return SpansBuilder.RunMethod("create",Null)
End Sub