Set objDict = server.CreateObject("Scripting.Dictionary") objDict.CompareMode = 1
CreateKeywords
Set objFSO = server.CreateObject("Scripting.FileSystemObject") End Sub
Private Sub Class_Terminate() Set objDict = Nothing Set objFSO = Nothing End Sub
Public Property Let CodeColor(inColor) m_CodeColor = "<font color=" & inColor & "><Strong>" End Property Private Property Get CodeColor() CodeColor = m_CodeColor End Property
Public Property Let CommentColor(inColor) m_CommentColor = "<font color=" & inColor & ">" End Property Private Property Get CommentColor() CommentColor = m_CommentColor End Property
Public Property Let StringColor(inColor) m_StringColor = "<font color=" & inColor & ">" End Property Private Property Get StringColor() StringColor = m_StringColor End Property
Public Property Let TabSpaces(inSpaces) m_TabSpaces = inSpaces End Property Private Property Get TabSpaces() TabSpaces = m_TabSpaces End Property
Public Property Let TableBGColor(inColor) m_TableBGColor = inColor End Property
Private Property Get TableBGColor() TableBGColor = m_TableBGColor End Property
Public Property Get ProcessingTime() ProcessingTime = Second(m_EndTime - m_StartTime) End Property
Public Property Get LineCount() LineCount = m_LineCount End Property
Public Property Get PathToFile() PathToFile = m_strPathToFile End Property Public Property Let PathToFile(inPath) m_strPathToFile = inPath End Property
Private Property Let KeyMin(inMin) m_intKeyMin = inMin End Property Private Property Get KeyMin() KeyMin = m_intKeyMin End Property Private Property Let KeyMax(inMax) m_intKeyMax = inMax End Property Private Property Get KeyMax() KeyMax = m_intKeyMax End Property
' Check for the top script line that set's the default script language ' for the page. If left( tempString, 3 ) = Chr(60) & "%@" And right(tempString, 2) = "%" & Chr(62) Then Response.Write "<table><tr bgcolor=yellow><td>" Response.Write server.HTMLEncode(m_strReadLine) Response.Write "</td></tr></table>" blnInScriptBlock = False ' Check for an opening script tag ElseIf Left( tempString, 2) = Chr(60) & "%" Then ' Check for a closing script tag on the same line If right( RTrim(tempString), 2 ) = "%" & Chr(62) Then Response.Write "<table><tr><td bgcolor=yellow><%</td>" Response.Write "<td>" Response.Write CharacterParse(mid(m_strReadLine, 3, Len(m_strReadLine) - 4)) Response.Write "</td>" Response.Write "<td bgcolor=yellow>%gt;</td></tr></table>" blnInScriptBlock = False Else Response.Write "<table><tr bgcolor=yellow><td><%</td></tr></table>" ' We've got an opening script tag so set the flag to true so ' that we know to start parsing the lines for keywords/comments blnInScriptBlock = True End If Else If blnInScriptBlock Then If blnEmptyLine Then Response.Write vbCrLf Else If right(tempString, 2) = "%" & Chr(62) Then Response.Write "<table><tr bgcolor=yellow><td>%></td></tr></table>" blnInScriptBlock = False Else Response.Write CharacterParse(m_strReadLine) & vbCrLf End If End If Else If blnOutputHTML Then If blnEmptyLine Then Response.Write vbCrLf Else Response.Write server.HTMLEncode(m_strReadLine) & vbCrLf End If End If End If End If Loop
' Grab the time at the completion of processing m_EndTime = Time()
' Close the outside table Response.Write "</PRE></td></tr></table>"
' Close the file and destroy the file object objFile.close Set objFile = Nothing End Sub
' This function parses a line character by character Private Function CharacterParse(inLine) Dim charBuffer, tempChar, i, outputString Dim insideString, workString, holdChar
insideString = False outputString = ""
For i = 1 to Len(inLine) tempChar = mid(inLine, i, 1) Select Case tempChar Case " " If Not insideString Then charBuffer = charBuffer & " " If charBuffer <>" " Then If left(charBuffer, 1) = " " Then outputString = outputString & " "
' Check for a 'rem' style comment marker If LCase(Trim(charBuffer)) = "rem" Then outputString = outputString & CommentColor outputString = outputString & "REM" workString = mid( inLine, i, Len(inLine)) workString = replace(workString, "<", "&lt;") workString = replace(workString, ">", "&gt;") outputString = outputString & workString & "</font>" charBuffer = "" Exit For End If
outputString = outputString & FindReplace(Trim(charBuffer)) If right(charBuffer, 1) = " " Then outputString = outputString & " " charBuffer = "" End If Else outputString = outputString & " " End If Case "(" If left(charBuffer, 1) = " " Then outputString = outputString & " " End If outputString = outputString & FindReplace(Trim(charBuffer)) & "(" charBuffer = "" Case Chr(60) outputString = outputString & "<" Case Chr(62) outputString = outputString & ">" Case Chr(34) ' catch quote chars and flip a boolean variable to denote that ' whether or not we're "inside" a quoted string insideString = Not insideString If insideString Then outputString = outputString & StringColor outputString = outputString & "&quot;" Else outputString = outputString & """" outputString = outputString & "</font>" End If Case "'" ' Catch comments and output the rest of the line ' as a comment IF we're not inside a string. If Not insideString Then outputString = outputString & CommentColor workString = mid( inLine, i, Len(inLine)) workString = replace(workString, "<", "&lt;") workString = replace(workString, ">", "&gt;") outputString = outputString & workString outputString = outputString & "</font>" Exit For Else outputString = outputString & "'" End If Case Else ' We've dealt with special case characters so now ' we'll begin adding characters to our outputString ' or charBuffer depending on the state of the insideString ' boolean variable If insideString Then outputString = outputString & tempChar Else charBuffer = charBuffer & tempChar End If End Select Next
' Deal with the last part of the string in the character buffer If Left(charBuffer, 1) = " " Then outputString = outputString & " " End If ' Check for closing parentheses at the end of a string If right(charBuffer, 1) = ")" Then charBuffer = Left(charBuffer, Len(charBuffer) - 1) CharacterParse = outputString & FindReplace(Trim(charBuffer)) & ")" Exit Function End If
CharacterParse = outputString & FindReplace(Trim(charBuffer)) End Function
' return true or false if a passed in number is between KeyMin and KeyMax Private Function InRange(inLen) If inLen >= KeyMin And inLen <= KeyMax Then InRange = True Exit Function End If InRange = False End Function
' Evaluate the passed in string and see if it's a keyword in the ' dictionary. If it is we will add html formatting to the string ' and return it to the caller. Otherwise just return the same ' string as was passed in. Private Function FindReplace(inToken) ' Check the length to make sure it's within the range of KeyMin and KeyMax If InRange(Len(inToken)) Then If objDict.Exists(inToken) Then FindReplace = CodeColor & objDict.Item(inToken) & "</Strong></Font>" Exit Function End If End If ' Keyword is either too short or too long or doesn't exist in the ' dictionary so we'll just return what was passed in to the function FindReplace = inToken End Function