Function ColorVBScript(ByRef NewCode)
Dim lvReservedWords
Dim lvConstants
Dim lvFunctions
Dim lvMethods
Dim lvProperties
Dim lvStatements
Dim lvOperators
Dim lvSeperators
Dim lvLines
Const lsSTRING_CHAR = """"
Const lsLINE_COMMENT_CHAR = "'"
Const lsLINE_COMMENT_CONTINUE_CHAR = "_"
Dim lsLine
Dim lsChar
Dim lsString
Dim lnStart
Dim lsWord
Dim lbBuildString
Dim lbBuildWord
Dim lsNewLine
Dim lbBuildComment
Dim lsResult
lvSeperators = Array(" ", vbTab, ":", "(", ")", ",", "'")
lvReservedWords = Array( _
"And", "Array", "As", "Boolean", "ByRef", "Byte", "ByVal", "Call", _
"Case", "CBool", "CByte", "CCur", "CDate", "CDbl", "CDec", "Class", _
"Close", "CInt", "CLng", "Const", "CSng", "CStr", "Currency", "CVar", _
"Date", "Decimal", "Declare", "DefBool", "DefByte", "DefCur", _
"DefDate", "DefDbl", "DefInt", "DefLng", "DefSng", "DefStr", _
"DefVar", "Dim", "Do", "Double", "Each", "Else", "ElseIf", "Empty", _
"End", "Enum", "Eqv", "Erase", "Error", "Exit", "Explicit", "False", _
"Fix", "For", "Friend", "Function", "Get", "Global", "If", "Imp", _
"In", "Input", "InputB", "Int", "Integer", "Is", "LBound", "Len", _
"LenB", "Local", "Lock", "Long", "Loop", "Me", "Mod", "New", "Next", _
"Not", "Nothing", "Null", "Open", "Option", "Optional", "Or", "On", _
"Public", "Print", "Private", "Property", "ReDim", "Resume", _
"Select", "Set", "Sgn", "Single", "String", "Sub", "Then", "To", _
"True", "Type", "UBound", "UnLock", "Variant", "Wend", "While", _
"With", "Write", "Implements", "Compare", "Text", "Let" _
)
lvConstants = Array( _
"vbAbort", "vbAbortRetryIgnore", "vbApplicationModal", "vbArray", _
"vbBinaryCompare", "vbBlack", "vbBlue", "vbBoolean", "vbByte", _
"vbCancel", "vbCr", "vbCritical", "vbCrLf", "vbCurrency", _
"vbCyan", "vbDatabaseCompare", "vbDataObject", "vbDate", "vbDecimal", _
"vbDefaultButton1", "vbDefaultButton2", "vbDefaultButton3", _
"vbDefaultButton4", "vbDouble", "vbEmpty", "vbError", _
"vbExclamation", "vbFalse", "vbFirstFourDays", "vbFirstFullWeek", _
"vbFirstJan1", "vbFormFeed", "vbFriday", "vbGeneralDate", "vbGreen", _
"vbIgnore", "vbInformation", "vbInteger", "vbLf", "vbLong", _
"vbLongDate", "vbLongTime", "vbMagenta", "vbMonday", "vbNewLine", _
"vbNo", "vbNull", "vbNullChar", "vbNullString", "vbObject", _
"vbObjectError", "vbOK", "vbOKCancel", "vbOKOnly", "vbQuestion", _
"vbRed", "vbRetry", "vbRetryCancel", "vbSaturday", "vbShortDate", _
"vbShortTime", "vbSingle", "vbString", "vbSunday", "vbSystemModal", _
"vbTab", "vbTextCompare", "vbThursday", "vbTrue", "vbTuesday", _
"vbUseDefault", "vbUseSystem", "vbUseSystemDayOfWeek", "vbVariant", _
"vbVerticalTab", "vbWednesday", "vbWhite", "vbYellow", "vbYes", _
"vbYesNo", "vbYesNoCancel" _
)
lvFunctions = Array( _
"Abs", "Array", "Asc", "Atn", "CBool", "CByte", "CCur", "CDate", _
"CDbl", "Chr", "CInt", "CLng", "Cos", "CreateObject", "CSng", "CStr", _
"Date", "DateAdd", "DateDiff", "DatePart", "DateSerial", "DateValue", _
"Day", "Exp", "Filter", "Fix", "FormatCurrency", "FormatDateTime", _
"FormatNumber", "FormatPercent", "GetObject", "Hex", "Hour", _
"InputBox", "InStr", "InStrRev", "Int", "IsArray", "IsDate", _
"IsEmpty", "IsNull", "IsNumeric", "IsObject", "Join", "LBound", _
"LCase", "Left", "Len", "LoadPicture", "Log", "LTrim", "Mid", _
"Minute", "Month", "MonthName", "MsgBox", "Now", "Oct", "Replace", _
"RGB", "Right", "Rnd", "Round", "RTrim", "ScriptEngine", _
"ScriptEngineBuildVersion", "ScriptEngineMajorVersion", _
"ScriptEngineMinorVersion", "Second", "Sgn", "Sin", "Space", "Split", _
"Sqr", "StrComp", "StrReverse", "String", "Tan", "TimeSerial", _
"TimeValue", "Trim", "TypeName", "UBound", "UCase", "VarType", _
"Weekday", "WeekdayName", "Year" _
)
lvMethods = Array( _
"Application.Lock", "Application.UnLock", "Err.Clear", "Err.Raise", _
"Request.BinaryRead", "Response.AddHeader", "Response.AppendToLog", _
"Response.BinaryWrite", "Response.Clear", "Response.End", _
"Response.Flush", "Response.IsClientConnected", "Response.Pics", _
"Response.Redirect", "Response.Write", "ScriptEngine", _
"ScriptEngineBuildVersion", "ScriptEngineMajorVersion", _
"ScriptEngineMinorVersion", "Server.CreateObject", _
"Server.HTMLEncode", "Server.MapPath", "Server.URLEncode", _
"Server.URLPathEncode", "Session.Abandon" _
)
lvProperties = Array( _
"Application.Contents", "Application.Contents.Count", _
"Application.Contents.Item", "Application.Contents.Key", _
"Application.StaticObjects", "Application.StaticObjects.Count", _
"Application.StaticObjects.Item", "Application.StaticObjects.Key", _
"Application.Value", "Err.description", "Err.helpcontext", _
"Err.helpfile", "Err.number", "Err.source", _
"Request.ClientCertificate", "Request.ClientCertificate.Count", _
"Request.ClientCertificate.Item", "Request.ClientCertificate.Key", _
"Request.Cookies", "Request.Cookies.Count", "Request.Cookies.Item", _
"Request.Cookies.Key", "Request.Form", "Request.Form.Count", _
"Request.Form.Item", "Request.Form.Key", "Request.Item", _
"Request.QueryString", "Request.QueryString.Count", _
"Request.QueryString.Item", "Request.QueryString.Key", _
"Request.ServerVariables", "Request.ServerVariables.Count", _
"Request.ServerVariables.Item", "Request.ServerVariables.Key", _
"Request.TotalBytes", "Response.Buffer", "Response.CacheControl", _
"Response.CharSet", "Response.ContentType", "Response.Cookies", _
"Response.Cookies.Count", "Response.Cookies.Item", _
"Response.Cookies.Key", "Response.Expires", _
"Response.ExpiresAbsolute", "Response.Status", _
"Server.ScriptTimeout", "Session.CodePage", _
"Session.Contents", "Session.Contents.Count", _
"Session.Contents.Item", "Session.Contents.Key", "Session.LCID", _
"Session.SessionID", "Session.StaticObjects", _
"Session.StaticObjects.Count", "Session.StaticObjects.Item", _
"Session.StaticObjects.Key", "Session.Timeout", "Session.Value" _
)
lvOperators = Array("+", "=", "&", "/", "^", "Imp", "\", "Is", "Mod", _
"*", "-", "Not", "Or", "-", "Xor", ">", "<")
lvStatements = Array( _
"Call", "Case", "Const", "Dim", "Do", "Loop", "Erase", "Exit", "For", _
"Next", "Each", "Function", "If", "Then", "Else", "On", "Error", _
"Option", "Explicit", "Private", "Public", "Randomize", "ReDim", _
"Select", "Set", "Sub", "While", "Wend" _
)
lvLines = Split(NewCode, vbCrLf)
For Each lsLine In lvLines
lbBuildString = False
lbBuildWord = False
lsNewLine = ""
lsWord = ""
lsString = ""
If Len(lsLine) > 0 Then
For lnStart = 1 To Len(lsLine)
lsChar = Mid(lsLine, lnStart, 1)
If lbBuildString Then
lsString = lsString & lsChar
If lsChar = lsSTRING_CHAR Then
lsNewLine = lsNewLine & _
"<SPAN class=""vbScript-String"">" & _
Server.HTMLEncode(lsString) & _
"</SPAN>"
lsString = ""
lbBuildString = False
End If
ElseIf lbBuildComment Then
lsNewLine = lsNewLine & Server.HTMLEncode(lsChar)
Else
If lbBuildWord Then
If IsInArray(lsChar, lvSeperators, False) Or IsInArray(lsChar, lvOperators, False) Then
If IsInArray(lsWord, lvReservedWords, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Reserved", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvConstants, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Constant", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvFunctions, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Function", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvMethods, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Method", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvProperties, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Property", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvStatements, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Statement", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvOperators, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Operator", "vbScript", lsWord, "")
Else
lsNewLine = lsNewLine & lsWord
End If
If lsChar = lsLINE_COMMENT_CHAR Then
lbBuildComment = True
lsNewLine = lsNewLine & "<SPAN class=""Comment"">" & lsLINE_COMMENT_CHAR
Else
If IsInArray(lsChar, lvOperators, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Operator", "vbScript", lsChar, "")
Else
lsNewLine = lsNewLine & Server.HTMLEncode(lsChar)
End If
End If
lbBuildWord = False
lsWord = ""
Else
lsWord = lsWord & lsChar
End If
Else
If lsChar = lsSTRING_CHAR Then
lbBuildString = True
lsString = lsSTRING_CHAR
ElseIf lsChar = lsLINE_COMMENT_CHAR Then
lbBuildComment = True
lsNewLine = lsNewLine & "<SPAN class=""vbScript-Comment"">" & lsLINE_COMMENT_CHAR
ElseIf IsInArray(lsChar, lvOperators, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Operator", "vbScript", lsChar, "")
Else
If IsInArray(lsChar, lvSeperators, False) Then
lsNewLine = lsNewLine & Server.HTMLEncode(lsChar)
Else
lsWord = lsChar
lbBuildWord = True
End If
End If
End If
End If
Next
End If
If lbBuildComment Then
lsLine = Replace(lsLine, " ", "")
lsLine = Replace(lsLine, vbTab, "")
If Not Right(lsLine, 1) = lsLINE_COMMENT_CONTINUE_CHAR Then
lsNewLine = lsNewLine & "</SPAN>"
lbBuildComment = False
End If
ElseIf lbBuildWord Then
If IsInArray(lsWord, lvReservedWords, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Reserved", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvConstants, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Constant", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvFunctions, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Function", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvMethods, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Method", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvProperties, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Property", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvStatements, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Statement", "vbScript", lsWord, "")
ElseIf IsInArray(lsWord, lvOperators, False) Then
lsNewLine = lsNewLine & LookupLink("vbScript-Operator", "vbScript", lsWord, "")
Else
lsNewLine = lsNewLine & lsWord
End If
ElseIf lbBuildString Then
lsNewLine = lsNewLine & _
"<SPAN class=""vbScript-String"">" & _
Server.HTMLEncode(lsString) & _
"</SPAN>"
lsString = ""
lbBuildString = False
End If
lsResult = lsResult & lsNewLIne & "<BR>" & vbCrLf
Next
lsResult = "<SPAN class=""vbScript"">" & lsResult & "</SPAN>"
lsResult = Replace(lsResult, vbTab, " ")
ColorVBScript = lsResult
End Function
Function LookupLink(ByRef ClassName, ByRef ScriptLanguage, ByRef ReservedWord, ByRef Argument)
Const lsURL_LOOKUP = "find.asp"
Dim lsResult
lsResult = _
"<A" & _
" class=""" & ClassName & """" & _
" href=""javascript://"" onclick=""lookUp('" & Server.URLEncode(ReservedWord) & "')"">"
If Not Argument = "" Then
lsResult = lsResult & Argument & "</A>"
Else
lsResult = lsResult & ReservedWord & "</A>"
End If
LookupLink = lsResult
End Function
Function IsInArray(ByRef LookupWord, ByRef ArrayList, ByRef MatchCase)
Dim lsWord
For Each lsWord In ArrayList
If MatchCase And LookupWord = lsWord Then
IsInArray = True
Exit For
ElseIf Not(MatchCase) And(LCase(LookupWord) = LCase(lsWord))Then
IsInArray = True
LookupWord = lsWord
Exit For
End If
Next
End Function