سورس کلاس Highlight Syntax برای T-SQL در HTML بصورت خط به خط:
Screenshot 2025-01-15 202147.jpg
Public Class TSQL
Protected Friend Shared Sub Highlight(ByRef Line As String)
Dim CompleteLine As Boolean = False
If Line.EndsWith(";") Then
CompleteLine = True
Line = Line.Remove(Line.Length - 1, 1)
End If
Dim Words As String() = Line.Split(" ")
Dim List As New List(Of String)
Dim BeginString, BeginComment, BeginCommentLine As Boolean
For Each Word As String In Words
If (Word.StartsWith(Chr(34)) Or Word.StartsWith(Chr(39))) AndAlso (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
BeginString = True
If (Word.EndsWith(Chr(34)) Or Word.EndsWith(Chr(39))) Then
BeginString = False
List.Add(String.Format("<str>{0}</str>", Word))
Else
List.Add(String.Format("<str>{0}", Word))
End If
ElseIf (Word.EndsWith(Chr(34)) Or Word.EndsWith(Chr(39))) And BeginString = True Then
BeginString = False
List.Add(String.Format("{0}</str>", Word))
ElseIf Word.StartsWith("/*") AndAlso (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
BeginComment = True
List.Add(String.Format("<cm>{0}", Word))
ElseIf Word.EndsWith("*/") AndAlso BeginComment = True Then
BeginComment = False
List.Add(String.Format("{0}</cm>", Word))
ElseIf Word.StartsWith("//") AndAlso (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
BeginCommentLine = True
List.Add(String.Format("<cm>{0}", Word))
ElseIf Word.EndsWith("(") And (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
If TSQLKeywords.Contains(Word.Trim.Replace("(", "")) Then
List.Add(String.Format("<kw>{0}</kw>(", Word.Replace("(", "")))
Else
List.Add(Word)
End If
ElseIf Word.StartsWith("(") And (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
If TSQLKeywords.Contains(Word.Trim.Replace("(", "")) Then
List.Add(String.Format("(<kw>{0}</kw>", Word.Replace("(", "")))
ElseIf Word.Substring(1, 1) = "@" Then
List.Add(String.Format("(<prm>{0}</prm>", Word.Replace("(", "")))
Else
List.Add(Word)
End If
ElseIf Word.EndsWith(")") And (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
If TSQLKeywords.Contains(Word.Trim.Replace(")", "")) Then
List.Add(String.Format("<kw>{0}</kw>)", Word.Replace(")", "")))
ElseIf Word.StartsWith("@") Then
List.Add(String.Format("<prm>{0}</prm>)", Word.Replace(")", "")))
Else
List.Add(Word)
End If
ElseIf TSQLKeywords.Contains(Word.Trim) AndAlso (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
List.Add(String.Format("<kw>{0}</kw>", Word))
ElseIf Word.StartsWith("@") AndAlso (BeginString = False And BeginComment = False And BeginCommentLine = False) Then
List.Add(String.Format("<prm>{0}</prm>", Word))
Else
List.Add(Word)
End If
Next
If BeginCommentLine = True Then List.Add("</cm>")
Dim Expr As String = Join(List.ToArray, " ")
List.Clear()
Line = Expr + If(CompleteLine, ";", "")
End Sub
End Class
Public TSQLKeywords() As String = {"ADD", "EXTERNAL",
"PROCEDURE", "ALL", "FETCH", "PUBLIC", "ALTER", "FILE",
"RAISERROR", "AND", "FILLFACTOR", "READ", "ANY", "FOR",
"READTEXT", "AS", "FOREIGN", "RECONFIGURE", "ASC",
"FREETEXT", "REFERENCES", "AUTHORIZATION",
"FREETEXTTABLE", "REPLICATION", "BACKUP", "FROM",
"RESTORE", "BEGIN", "FULL", "RESTRICT", "BETWEEN",
"FUNCTION", "RETURN", "BREAK", "GOTO", "REVERT",
"BROWSE", "GRANT", "REVOKE", "BULK", "GROUP", "RIGHT",
"BY", "HAVING", "ROLLBACK", "CASCADE", "HOLDLOCK",
"ROWCOUNT", "CASE", "IDENTITY", "ROWGUIDCOL", "CHECK",
"IDENTITY_INSERT", "RULE", "CHECKPOINT", "IDENTITYCOL",
"SAVE", "CLOSE", "IF", "SCHEMA", "CLUSTERED", "IN",
"SECURITYAUDIT", "COALESCE", "INDEX", "SELECT",
"COLLATE", "INNER", "SEMANTICKEYPHRASETABLE", "COLUMN",
"INSERT", "SEMANTICSIMILARITYDETAILSTABLE", "COMMIT",
"INTERSECT", "SEMANTICSIMILARITYTABLE", "COMPUTE",
"INTO", "SESSION_USER", "CONSTRAINT", "IS", "SET",
"CONTAINS", "JOIN", "SETUSER", "CONTAINSTABLE", "KEY",
"SHUTDOWN", "CONTINUE", "KILL", "SOME", "CONVERT",
"LEFT", "STATISTICS", "CREATE", "LIKE", "SYSTEM_USER",
"CROSS", "LINENO", "TABLE", "CURRENT", "LOAD",
"TABLESAMPLE", "CURRENT_DATE", "MERGE", "TEXTSIZE",
"CURRENT_TIME", "NATIONAL", "THEN", "CURRENT_TIMESTAMP",
"NOCHECK", "TO", "CURRENT_USER", "NONCLUSTERED", "TOP",
"CURSOR", "NOT", "TRAN", "DATABASE", "NULL",
"TRANSACTION", "DBCC", "NULLIF", "TRIGGER", "DEALLOCATE",
"OF", "TRUNCATE", "DECLARE", "OFF", "TRY_CONVERT",
"DEFAULT", "OFFSETS", "TSEQUAL", "DELETE", "ON", "UNION",
"DENY", "OPEN", "UNIQUE", "DESC", "OPENDATASOURCE",
"UNPIVOT", "DISK", "OPENQUERY", "UPDATE", "DISTINCT",
"OPENROWSET", "UPDATETEXT", "DISTRIBUTED", "OPENXML",
"USE", "DOUBLE", "OPTION", "USER", "DROP", "OR",
"VALUES", "DUMP", "ORDER", "VARYING", "ELSE", "OUTER",
"VIEW", "END", "OVER", "WAITFOR", "ERRLVL", "PERCENT",
"WHEN", "ESCAPE", "PIVOT", "WHERE", "EXCEPT", "PLAN",
"WHILE", "EXEC", "PRECISION", "WITH", "EXECUTE",
"PRIMARY", "WITHIN", "GROUP", "EXISTS", "PRINT",
"WRITETEXT", "EXIT", "PROC"}