Class Template
 
 Private m_FileName, m_Root, m_Unknowns, m_LastError, m_HaltOnErr
 Private m_ValueList, m_BlockList
 Private m_RegExp 
 Private Sub Class_Initialize
 Set m_ValueList = CreateObject("Scripting.Dictionary")
 Set m_BlockList = CreateObject("Scripting.Dictionary")
 set m_RegExp = New RegExp
 m_RegExp.IgnoreCase = True
 m_RegExp.Global = True
 m_FileName = ""
 m_Root = "."
 m_Unknowns = "remove"
 m_LastError = ""
 m_HaltOnErr = true
 End Sub
 
 Private Sub Class_Terminate
 Set m_RegExp = Nothing
 Set m_BlockMatches = Nothing
 Set m_ValueMatches = nothing
 End Sub
 
 Public Property Get ClassName()
 ClassName = "Template"
 End Property
 
 Public Property Get Version()
 Version = "1.0"
 End Property
 Private Function LoadFile(ByVal chartype)
 Dim Filename, fso, hndFile
 Filename = m_Root
 If Right(Filename, 1)<>"/" And Right(Filename, 1)<>"" Then Filename = Filename & "/"
 Filename = Server.MapPath(Filename & m_FileName)
 Set StreamObject = Server.CreateObject("Adodb.Stream")
 StreamObject.Type = 1
 StreamObject.Mode = 3
 StreamObject.Open
 StreamObject.Position = 0
 StreamObject.LoadFromFile Filename
 StreamObject.Position = 0
 StreamObject.Type = 2
 StreamObject.CharSet = chartype
 LoadFile = StreamObject.readtext()
 If LoadFile = "" Then ShowError("0x11<br>Could Not Load The File " & m_FileName & "!")
 End Function
 
 Private Sub ShowError(ByVal msg)
 m_LastError = msg
 Response.Write "<span style=""font-size:12px;color:red"">Error ID : " & msg & "</span>"
 If m_HaltOnErr Then Response.End
 End Sub
 
 Public Sub set_root(ByVal Value)
 m_Root = Value
 End Sub
 Public Function get_root()
 get_root = m_Root
 End Function 
 Public Property Let Root(ByVal Value)
 set_root(Value)
 End Property
 Public Property Get Root()
 Root = m_Root
 End Property
 
 Public Sub set_file(ByVal handle,ByVal filename,ByVal chartype)
 m_FileName = filename
 m_BlockList.Add Handle, LoadFile(chartype)
 End Sub
 Public Function get_file()
 get_file = m_FileName
 End Function
 Public Sub set_unknowns(ByVal unknowns)
 m_Unknowns = unknowns
 End Sub
 Public Function get_unknowns()
 get_unknowns = m_Unknowns
 End Function
 Public Property Let Unknowns(ByVal unknown)
 m_Unknowns = unknown
 End Property
 Public Property Get Unknowns()
 Unknowns = m_Unknowns
 End Property
 
 Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)
 Dim Matches
 m_RegExp.Pattern = "<!--s+BEGIN " & BlockTag & "s+-->([sS.]*)<!--s+END " & BlockTag & "s+-->"
 If Not m_BlockList.Exists(Parent) Then ShowError("0x12<br>Undefined Block Tag " & Parent & "!")
 set Matches = m_RegExp.Execute(m_BlockList.Item(Parent))
 For Each Match In Matches
 m_BlockList.Add BlockTag, Match.SubMatches(0)
 m_BlockList.Item(Parent) = Replace(m_BlockList.Item(Parent), Match.Value, "{" & Name & "}")
 Next
 set Matches = nothing
 End Sub
 
 Public Sub set_var(ByVal Name, ByVal Value, ByVal AppEnd)
 Dim Val
 If IsNull(Value) Then Val = "" Else Val = Value
 If m_ValueList.Exists(Name) Then
 If AppEnd Then m_ValueList.Item(Name) = m_ValueList.Item(Name) & Val _
 Else m_ValueList.Item(Name) = Val
 Else
 m_ValueList.Add Name, Value
 End If
 End Sub
 
 Public Sub unset_var(ByVal Name)
 If m_ValueList.Exists(Name) Then m_ValueList.Remove(Name)
 End Sub
 
 Private Function InstanceValue(ByVal BlockTag)
 Dim keys, i
 InstanceValue = m_BlockList.Item(BlockTag)
 keys = m_ValueList.Keys
 For i=0 To m_ValueList.Count-1
 InstanceValue = Replace(InstanceValue, "{" & keys(i) & "}", m_ValueList.Item(keys(i)))
 Next
 End Function
 
 Public Sub parse(ByVal Name, ByVal BlockTag, ByVal AppEnd)
 If Not m_BlockList.Exists(BlockTag) Then ShowError("0x12<br>Undefined Block Tag " & Parent & "!")
 If m_ValueList.Exists(Name) Then
 If AppEnd Then m_ValueList.Item(Name) = m_ValueList.Item(Name) & InstanceValue(BlockTag) _
 Else m_ValueList.Item(Name) = InstanceValue(BlockTag)
 Else
 m_ValueList.Add Name, InstanceValue(BlockTag)
 End If
 End Sub
 
 Private Function finish(ByVal content)
 Select Case m_Unknowns
 Case "keep" finish = content
 Case "remove"
 m_RegExp.Pattern = "{[^ trn}]+}"
 finish = m_RegExp.Replace(content, "")
 Case "comment"
 m_RegExp.Pattern = "{([^ trn}]+)}"
 finish = m_RegExp.Replace(content, "<!-- Template Variable $1 Undefined -->")
 Case Else finish = content
 End Select
 End Function
 
 Public Sub output(ByVal Name)
 If Not m_ValueList.Exists(Name) Then ShowError("0x13<br>Could Not Find Tag " & Name & "!")
 Response.Write(finish(m_ValueList.Item(Name)))
 End Sub
 End Class
【ASP模板类代码】相关文章:
