An alternative to UBB.threads
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

148 lines
5.4 KiB

'**************************************************
' FILE : BBCodeConfiguration.vb
' AUTHOR : Paulo Santos
' CREATION : 4/30/2009 10:57:20 PM
' COPYRIGHT : Copyright © 2009
' PJ on Development
' All Rights Reserved.
'
' Description:
' TODO: Add file description
'
' Change log:
' 0.1 4/30/2009 10:57:20 PM
' Paulo Santos
' Created.
'***************************************************
Imports System.Xml.Serialization
''' <summary>
''' Represents the configuration of the <see cref="BBCodeParser"/>.
''' </summary>
<Serializable()> _
<XmlRoot(ElementName:=STR_BBCodeConfigurationXmlElement, [Namespace]:=STR_BBCodeSchemaNamespace)> _
Public NotInheritable Class BBCodeConfiguration(Of TContext As Class)
Implements IXmlSerializable
Private Shared ReadOnly __CurrentVersion As New System.Version(1, 0)
Private __Version As System.Version
Private __Dictionary As BBCodeElementDictionary
Private __ElementTypes As BBCodeElementTypeDictionary(Of TContext)
''' <summary>Initializes an instance of the <see cref="BBCodeConfiguration" /> class.
''' This is the default constructor for this class.</summary>
Friend Sub New()
__Version = New Version(1, 0)
End Sub
''' <summary>
''' Gets the version of the configuration file.
''' </summary>
Public Property Version() As System.Version
Get
Return __Version
End Get
Private Set(ByVal value As System.Version)
If (value > __CurrentVersion) Then
Throw New ArgumentException("Unrecognized version.")
End If
__Version = value
End Set
End Property
''' <summary>
''' Gets the dictionary configuration.
''' </summary>
<XmlArrayItem()> _
Public ReadOnly Property Dictionary() As BBCodeElementDictionary
Get
If (__Dictionary Is Nothing) Then
__Dictionary = New BBCodeElementDictionary()
End If
Return __Dictionary
End Get
End Property
''' <summary>
''' Gets the factory configuration.
''' </summary>
<XmlArrayItem()> _
Public ReadOnly Property ElementTypes() As BBCodeElementTypeDictionary(Of TContext)
Get
If (__ElementTypes Is Nothing) Then
__ElementTypes = New BBCodeElementTypeDictionary(Of TContext)()
End If
Return __ElementTypes
End Get
End Property
''' <summary>This method is reserved and should not be used. When implementing the IXmlSerializable interface, you should return null (Nothing in Visual Basic) from this method, and instead, if specifying a custom schema is required, apply the <see cref="T:System.Xml.Serialization.XmlSchemaProviderAttribute" /> to the class.</summary>
''' <returns>An <see cref="T:System.Xml.Schema.XmlSchema" /> that describes the XML representation of the object that is produced by the <see cref="M:System.Xml.Serialization.IXmlSerializable.WriteXml(System.Xml.XmlWriter)" /> method and consumed by the <see cref="M:System.Xml.Serialization.IXmlSerializable.ReadXml(System.Xml.XmlReader)" /> method.</returns>
Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema
Return Nothing
End Function
''' <summary>Generates an object from its XML representation.</summary>
''' <param name="reader">The <see cref="T:System.Xml.XmlReader" /> stream from which the object is deserialized.</param>
Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml
'*
'* Check the name of the element
'*
If (reader.NamespaceURI <> STR_BBCodeSchemaNamespace) OrElse (reader.LocalName <> STR_BBCodeConfigurationXmlElement) Then
Exit Sub
End If
'*
'* Gets the version of the configuration
'*
Dim versionString = reader.GetAttribute("version")
If (Not String.IsNullOrEmpty(versionString)) Then
Me.Version = New System.Version(versionString)
End If
'*
'* Move to the first item
'*
reader.Read()
Dim dictionarySerializer = New XmlSerializer(GetType(BBCodeElementDictionary))
Dim typesSerializer = New XmlSerializer(GetType(BBCodeElementTypeDictionary(Of TContext)))
__ElementTypes = Nothing
__Dictionary = Nothing
If (reader.LocalName = STR_BBCodeElementTypesXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then
__ElementTypes = typesSerializer.Deserialize(reader)
End If
If (reader.LocalName = STR_BBCodeDictionaryXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then
__Dictionary = dictionarySerializer.Deserialize(reader)
End If
If (__ElementTypes Is Nothing AndAlso reader.LocalName = STR_BBCodeElementTypesXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then
__ElementTypes = typesSerializer.Deserialize(reader)
End If
End Sub
''' <summary>Converts an object into its XML representation.</summary>
''' <param name="writer">The <see cref="T:System.Xml.XmlWriter" /> stream to which the object is serialized.</param>
Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml
Dim dictionarySerializer = New XmlSerializer(GetType(BBCodeElementDictionary))
Dim typesSerializer = New XmlSerializer(GetType(BBCodeElementTypeDictionary(Of TContext)))
If (ElementTypes.Count > 0) Then
typesSerializer.Serialize(writer, ElementTypes)
End If
If (Dictionary.Count > 0) Then
dictionarySerializer.Serialize(writer, Dictionary)
End If
End Sub
End Class