Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Using t As New uCalc.Transformer()
'// 1. Define integer constants for our syntax categories
Dim TAG_KEYWORD = 1
Dim TAG_STRING = 2
Dim TAG_COMMENT = 3
'// 2. Define the transformation rules and tag them
t.Pattern("{ if | else | for | while }").SetTag(TAG_KEYWORD)
t.Pattern("{@String}").SetTag(TAG_STRING)
t.Pattern("// {text}").SetTag(TAG_COMMENT)
'// 3. Set the source code and run the find operation
Dim sourceCode As String = "for (i=0; i<10; i++) {
s = ""hello"";
// comment
}"
t.Text = sourceCode
t.Find()
'// 4. Build the highlighted output string
Dim highlightedOutput As String = ""
Dim lastPos = 0
For Each match In t.Matches
'// Append the plain text between the last match and this one
highlightedOutput = highlightedOutput + sourceCode.Substring(lastPos, match.StartPosition - lastPos)
'// Get the tag and wrap the matched text accordingly
Dim tag = match.Rule.Tag
If tag = TAG_KEYWORD Then
highlightedOutput = highlightedOutput + "" + match.Text + ""
ElseIf tag = TAG_STRING Then
highlightedOutput = highlightedOutput + "" + match.Text + ""
ElseIf tag = TAG_COMMENT Then
highlightedOutput = highlightedOutput + "" + match.Text + ""
Else
highlightedOutput = highlightedOutput + match.Text '// No tag, append as-is
End If
'// Update the position for the next iteration
lastPos = match.EndPosition
Next
'// Append any remaining text after the last match
highlightedOutput = highlightedOutput + sourceCode.Substring(lastPos)
Console.WriteLine(highlightedOutput)
End Using
End Sub
End Module