"' Copyright (c) 2008 Silken Web - Free BSD License\n" Comment

"' All rights reserved.\n" Comment

"'\n"         Comment

"' Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n" Comment

"' * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer\n" Comment

"' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n" Comment

"' * Neither the name of Silken Web nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n" Comment

"'\n"         Comment

'\' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n' Comment

"' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS\n" Comment

"' BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n" Comment

"' GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n" Comment

"' LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\n" Comment

"' DAMAGE.\n" Comment

'\n'          Text

'Imports'     Keyword
' '           Text
'System'      Name.Namespace
'.'           Name.Namespace
'Net'         Name.Namespace
'.'           Name.Namespace
'Mail'        Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'SilkenWeb'   Name.Namespace
'.'           Name.Namespace
'Entities'    Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'System'      Name.Namespace
'.'           Name.Namespace
'Text'        Name.Namespace
'.'           Name.Namespace
'RegularExpressions' Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'System'      Name.Namespace
'.'           Name.Namespace
'Reflection'  Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'SilkenWeb'   Name.Namespace
'.'           Name.Namespace
'Validation'  Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'System'      Name.Namespace
'.'           Name.Namespace
'Globalization' Name.Namespace
'\n'          Text

'Imports'     Keyword
' '           Text
'SilkenWeb'   Name.Namespace
'.'           Name.Namespace
'Reflection'  Name.Namespace
'\n\n'        Text

'Namespace'   Keyword
' '           Text
'SilkenWeb'   Name.Namespace
'\n\n    '    Text
"''' <summary>\n" Comment

'    '        Text
"''' Represents an Email and what you can do with it.\n" Comment

'    '        Text
"''' </summary>\n" Comment

'    '        Text
"''' <remarks>\n" Comment

'    '        Text
"''' Keith Jackson\n" Comment

'    '        Text
"''' 11/04/2008\n" Comment

'    '        Text
"'''\n"       Comment

'    '        Text
"''' This class is intended to be inherrited for providing all manner of system generated emails, each represented by it's own class.\n" Comment

'    '        Text
"''' </remarks>\n" Comment

'    '        Text
'Public'      Keyword
' '           Text
'MustInherit' Keyword
' '           Text
'Class'       Keyword
' '           Text
'EmailBase'   Name.Class
' '           Text
':'           Punctuation
' '           Text
'Implements'  Keyword
' '           Text
'IValidatable' Name
','           Punctuation
' '           Text
'IDisposable' Name
'\n\n'        Text

'#Region " Constants "\n' Comment.Preproc

'\n        '  Text
'Public'      Keyword
' '           Text
'Const'       Keyword
' '           Text
'LenientRegexPattern' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*' Literal.String
'"'           Literal.String
'\n        '  Text
'Public'      Keyword
' '           Text
'Const'       Keyword
' '           Text
'StrictRegexPattern' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'^(([^<>()[\\]\\\\.,;:\\s@\\' Literal.String
'""'          Literal.String
']+(\\.[^<>()[\\]\\\\.,;:\\s@\\' Literal.String
'""'          Literal.String
']+)*)|(\\'   Literal.String
'""'          Literal.String
'.+\\'        Literal.String
'""'          Literal.String
'))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$' Literal.String
'"'           Literal.String
'\n        '  Text
'Public'      Keyword
' '           Text
'Const'       Keyword
' '           Text
'InvalidEmailAddressError' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'The Email address provided was invalid' Literal.String
'"'           Literal.String
'\n        '  Text
'Public'      Keyword
' '           Text
'Const'       Keyword
' '           Text
'InvalidEmailAddressErrorWithAddress' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'The Email address, {0}, provided was invalid' Literal.String
'"'           Literal.String
'\n        '  Text
'Public'      Keyword
' '           Text
'Const'       Keyword
' '           Text
'NullEmailAddressError' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'The Email address was not provided' Literal.String
'"'           Literal.String
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " Fields "\n' Comment.Preproc

'\n        '  Text
'Private'     Keyword
' '           Text
'disposedValue' Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
'\n\n        ' Text
'Private'     Keyword
' '           Text
'_message'    Name
' '           Text
'As'          Operator.Word
' '           Text
'MailMessage' Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailMessage' Name
'('           Punctuation
')'           Punctuation
'\n        '  Text
'Private'     Keyword
' '           Text
'_mailClient' Name
' '           Text
'As'          Operator.Word
' '           Text
'SmtpClient'  Name
'\n\n        ' Text
'Private'     Keyword
' '           Text
'_useStrictValidation' Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " Construction "\n' Comment.Preproc

'\n        '  Text
"''' <summary>\n" Comment

'        '    Text
"''' Instantiates a new Email of the derived type.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="sender">The email address of the sender of the message.</param>\n' Comment

'        '    Text
'\'\'\' <param name="recipients">The email addresses of the recipients of the message.</param>\n' Comment

'        '    Text
'\'\'\' <param name="subject">The subject of the message.</param>\n' Comment

'        '    Text
'\'\'\' <param name="body">The body of the message.</param>\n' Comment

'        '    Text
'Protected'   Keyword
' '           Text
'Sub'         Keyword
' '           Text
'New'         Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'sender'      Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'subject'     Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'body'        Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'ParamArray'  Keyword
' '           Text
'recipients'  Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n            ' Text
'_message'    Name
'.'           Punctuation
'From'        Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'sender'      Name
')'           Punctuation
'\n            ' Text
'For'         Keyword
' '           Text
'i'           Name
' '           Text
'As'          Operator.Word
' '           Text
'Integer'     Keyword.Type
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'To'          Keyword
' '           Text
'recipients'  Name
'.'           Punctuation
'Length'      Name
' '           Text
'-'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n                ' Text
'_message'    Name
'.'           Punctuation
'To'          Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'recipients'  Name
'('           Punctuation
'i'           Name
')'           Punctuation
')'           Punctuation
'\n            ' Text
'Next'        Keyword
'\n            ' Text
'_message'    Name
'.'           Punctuation
'Subject'     Name
' '           Text
'='           Operator
' '           Text
'subject'     Name
'\n            ' Text
'_message'    Name
'.'           Punctuation
'Body'        Name
' '           Text
'='           Operator
' '           Text
'body'        Name
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " Properties "\n' Comment.Preproc

'\n        '  Text
"''' <summary>\n" Comment

'        '    Text
"''' Gets the Attachments for the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Protected'   Keyword
' '           Text
'Overridable' Keyword
' '           Text
'ReadOnly'    Keyword
' '           Text
'Property'    Keyword
' '           Text
'Attachments' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'AttachmentCollection' Name
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'Attachments' Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The email addresses of the BCC recipients of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'BccRecipients' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'Bcc'         Name
'.'           Punctuation
'ToAddressStringArray' Name
'('           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'Bcc'         Name
'.'           Punctuation
'Clear'       Name
'('           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'Bcc'         Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'value'       Name
'.'           Punctuation
'ToDelimitedString' Name
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The body of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Protected'   Keyword
' '           Text
'Overridable' Keyword
' '           Text
'Property'    Keyword
' '           Text
'Body'        Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'Body'        Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'Body'        Name
' '           Text
'='           Operator
' '           Text
'value'       Name
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The email addresses of the CC recipients of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'CCRecipients' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'CC'          Name
'.'           Punctuation
'ToAddressStringArray' Name
'('           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'CC'          Name
'.'           Punctuation
'Clear'       Name
'('           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'CC'          Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'value'       Name
'.'           Punctuation
'ToDelimitedString' Name
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Gets or Sets a flag to indicate if the body of the message is HTML.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'IsBodyHtml'  Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'IsBodyHtml'  Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'IsBodyHtml'  Name
' '           Text
'='           Operator
' '           Text
'value'       Name
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Gets the Mail message wrapped by the EmailBase class.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Protected'   Keyword
' '           Text
'ReadOnly'    Keyword
' '           Text
'Property'    Keyword
' '           Text
'Message'     Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'MailMessage' Name
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Gets or Sets the Priority of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'Priority'    Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'MailPriority' Name
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'Priority'    Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'MailPriority' Name
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'Priority'    Name
' '           Text
'='           Operator
' '           Text
'value'       Name
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The email addresses of the recipients of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'Recipients'  Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'To'          Name
'.'           Punctuation
'ToAddressStringArray' Name
'('           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'To'          Name
'.'           Punctuation
'Clear'       Name
'('           Punctuation
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'To'          Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'value'       Name
'.'           Punctuation
'ToDelimitedString' Name
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The reply email address of the sender of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'ReplyTo'     Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'Then'        Keyword
'\n                    ' Text
'Return'      Keyword
' '           Text
'String'      Keyword.Type
'.'           Punctuation
'Empty'       Name
'\n                ' Text
'Else'        Keyword
'\n                    ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
'.'           Punctuation
'Address'     Name
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'If'          Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'Then'        Keyword
'\n                    ' Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'value'       Name
')'           Punctuation
'\n                ' Text
'Else'        Keyword
'\n                    ' Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'value'       Name
','           Punctuation
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
'.'           Punctuation
'DisplayName' Name
')'           Punctuation
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The reply display name of the sender of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'ReplyToDisplayName' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'Then'        Keyword
'\n                    ' Text
'Return'      Keyword
' '           Text
'String'      Keyword.Type
'.'           Punctuation
'Empty'       Name
'\n                ' Text
'Else'        Keyword
'\n                    ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
'.'           Punctuation
'DisplayName' Name
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'If'          Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'Then'        Keyword
'\n                    ' Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'_message'    Name
'.'           Punctuation
'From'        Name
'.'           Punctuation
'Address'     Name
','           Punctuation
' '           Text
'value'       Name
')'           Punctuation
'\n                ' Text
'Else'        Keyword
'\n                    ' Text
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'_message'    Name
'.'           Punctuation
'ReplyTo'     Name
'.'           Punctuation
'Address'     Name
','           Punctuation
' '           Text
'value'       Name
')'           Punctuation
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The email address of the sender of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Overridable' Keyword
' '           Text
'Property'    Keyword
' '           Text
'Sender'      Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'From'        Name
'.'           Punctuation
'Address'     Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Protected'   Keyword
' '           Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'From'        Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'value'       Name
','           Punctuation
' '           Text
'_message'    Name
'.'           Punctuation
'From'        Name
'.'           Punctuation
'DisplayName' Name
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The display name of the sender of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Overridable' Keyword
' '           Text
'Property'    Keyword
' '           Text
'SenderDisplayName' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'From'        Name
'.'           Punctuation
'DisplayName' Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Protected'   Keyword
' '           Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'From'        Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'MailAddress' Name
'('           Punctuation
'_message'    Name
'.'           Punctuation
'From'        Name
'.'           Punctuation
'Address'     Name
','           Punctuation
' '           Text
'value'       Name
')'           Punctuation
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' The subject of the message.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Overridable' Keyword
' '           Text
'Property'    Keyword
' '           Text
'Subject'     Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_message'    Name
'.'           Punctuation
'Subject'     Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Protected'   Keyword
' '           Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n                ' Text
'_message'    Name
'.'           Punctuation
'Subject'     Name
' '           Text
'='           Operator
' '           Text
'value'       Name
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " Methods "\n' Comment.Preproc

'\n'          Text

'#Region " Send Methods "\n' Comment.Preproc

'\n        '  Text
"''' <summary>\n" Comment

'        '    Text
"''' Sends this email\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="mailServer">The SMTP server to use to send the email.</param>\n' Comment

'        '    Text
'Public'      Keyword
' '           Text
'Sub'         Keyword
' '           Text
'Send'        Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'mailServer'  Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n            ' Text
'_mailClient' Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'SmtpClient'  Name
'('           Punctuation
'mailServer'  Name
')'           Punctuation
'\n            ' Text
'_mailClient' Name
'.'           Punctuation
'Send'        Name
'('           Punctuation
'_message'    Name
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Sends this email asynchronously.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="mailServer">The SMTP server to use to send the email.</param>\n' Comment

'        '    Text
'\'\'\' <param name="userToken">A user defined token passed to the recieving method on completion of the asynchronous task.</param>\n' Comment

'        '    Text
'Public'      Keyword
' '           Text
'Sub'         Keyword
' '           Text
'SendAsync'   Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'mailServer'  Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'userToken'   Name
' '           Text
'As'          Operator.Word
' '           Text
'Object'      Keyword.Type
')'           Punctuation
'\n            ' Text
'_mailClient' Name
' '           Text
'='           Operator
' '           Text
'New'         Keyword
' '           Text
'SmtpClient'  Name
'('           Punctuation
'mailServer'  Name
')'           Punctuation
'\n            ' Text
'_mailClient' Name
'.'           Punctuation
'SendAsync'   Name
'('           Punctuation
'_message'    Name
','           Punctuation
' '           Text
'userToken'   Name
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Cancels an attempt to send this email asynchronously.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Sub'         Keyword
' '           Text
'SendAsyncCancel' Name.Function
'('           Punctuation
')'           Punctuation
'\n            ' Text
'_mailClient' Name
'.'           Punctuation
'SendAsyncCancel' Name
'('           Punctuation
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " IValidatable Implementation "\n' Comment.Preproc

'\n        '  Text
"''' <summary>\n" Comment

'        '    Text
"''' gets and Sets a flag to indicate whether to use strict validation.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Property'    Keyword
' '           Text
'UseStrictValidation' Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
'\n            ' Text
'Get'         Keyword
'\n                ' Text
'Return'      Keyword
' '           Text
'_useStrictValidation' Name
'\n            ' Text
'End'         Keyword
' '           Text
'Get'         Keyword
'\n            ' Text
'Set'         Keyword
'('           Punctuation
'ByVal'       Keyword
' '           Text
'value'       Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
')'           Punctuation
'\n                ' Text
'_useStrictValidation' Name
' '           Text
'='           Operator
' '           Text
'value'       Name
'\n            ' Text
'End'         Keyword
' '           Text
'Set'         Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Property'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Validates this email.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
"''' <returns>A ValidationResponse, containing a flag to indicate if validation was passed and a collection of Property Names and validation errors.</returns>\n" Comment

'        '    Text
'Public'      Keyword
' '           Text
'Function'    Keyword
' '           Text
'Validate'    Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'ValidationResponse' Name
' '           Text
'Implements'  Keyword
' '           Text
'IValidatable' Name
'.'           Punctuation
'Validate'    Name
'\n\n            ' Text
'Dim'         Keyword
' '           Text
'retVal'      Name
' '           Text
'As'          Operator.Word
' '           Text
'New'         Keyword
' '           Text
'ValidationResponse' Name
'('           Punctuation
')'           Punctuation
'\n            ' Text
'Dim'         Keyword
' '           Text
'mailRegEx'   Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'If'          Keyword
'('           Punctuation
'_useStrictValidation' Name
','           Punctuation
' '           Text
'StrictRegexPattern' Name
','           Punctuation
' '           Text
'LenientRegexPattern' Name
')'           Punctuation
'\n\n            ' Text
'ValidateAddress' Name
'('           Punctuation
'"'           Literal.String
'Sender'      Literal.String
'"'           Literal.String
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
','           Punctuation
' '           Text
'True'        Keyword
')'           Punctuation
'\n            ' Text
'ValidateAddresses' Name
'('           Punctuation
'"'           Literal.String
'Recipients'  Literal.String
'"'           Literal.String
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
','           Punctuation
' '           Text
'True'        Keyword
')'           Punctuation
'\n            ' Text
'ValidateAddresses' Name
'('           Punctuation
'"'           Literal.String
'CcRecipients' Literal.String
'"'           Literal.String
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
')'           Punctuation
'\n            ' Text
'ValidateAddresses' Name
'('           Punctuation
'"'           Literal.String
'BccRecipients' Literal.String
'"'           Literal.String
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
')'           Punctuation
'\n            ' Text
'ValidateAddress' Name
'('           Punctuation
'"'           Literal.String
'ReplyTo'     Literal.String
'"'           Literal.String
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
')'           Punctuation
'\n\n            ' Text
'Return'      Keyword
' '           Text
'retVal'      Name
'\n\n        ' Text
'End'         Keyword
' '           Text
'Function'    Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Validates a single Email Address property.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="propertyName">The name of the property to validate.</param>\n' Comment

'        '    Text
'\'\'\' <param name="retVal">The validation response object.</param>\n' Comment

'        '    Text
'\'\'\' <param name="mailRegEx">The regular expression pattern to use for validation.</param>\n' Comment

'        '    Text
'Private'     Keyword
' '           Text
'Overloads'   Keyword
' '           Text
'Sub'         Keyword
' '           Text
'ValidateAddress' Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'propertyName' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByRef'       Keyword
' '           Text
'retVal'      Name
' '           Text
'As'          Operator.Word
' '           Text
'ValidationResponse' Name
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'mailRegEx'   Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n            ' Text
'ValidateAddress' Name
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
','           Punctuation
' '           Text
'False'       Keyword
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Validates a single Email Address property.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="propertyName">The name of the property to validate.</param>\n' Comment

'        '    Text
'\'\'\' <param name="retVal">The validation response object.</param>\n' Comment

'        '    Text
'\'\'\' <param name="mailRegEx">The regular expression pattern to use for validation.</param>\n' Comment

'        '    Text
'\'\'\' <param name="required">Indicates if the address is required; False if not specified.</param>\n' Comment

'        '    Text
'Private'     Keyword
' '           Text
'Overloads'   Keyword
' '           Text
'Sub'         Keyword
' '           Text
'ValidateAddress' Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'propertyName' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByRef'       Keyword
' '           Text
'retVal'      Name
' '           Text
'As'          Operator.Word
' '           Text
'ValidationResponse' Name
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'mailRegEx'   Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'required'    Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
')'           Punctuation
'\n\n            ' Text
'Dim'         Keyword
' '           Text
'emailAddress' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'ReflectionHelper' Name
'.'           Punctuation
'Properties'  Name
'.'           Punctuation
'GetProperty' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
')'           Punctuation
'('           Punctuation
'Me'          Keyword
','           Punctuation
' '           Text
'propertyName' Name
')'           Punctuation
'\n\n            ' Text
'If'          Keyword
' '           Text
'emailAddress' Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'OrElse'      Operator.Word
' '           Text
'emailAddress' Name
'.'           Punctuation
'Length'      Name
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'Then'        Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'required'    Name
' '           Text
'Then'        Keyword
' '           Text
'retVal'      Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'New'         Keyword
' '           Text
'KeyValuePair' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'String'      Keyword.Type
')'           Punctuation
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'NullEmailAddressError' Name
')'           Punctuation
')'           Punctuation
'\n            ' Text
'Else'        Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'('           Punctuation
'Not'         Keyword
' '           Text
'Regex'       Name
'.'           Punctuation
'IsMatch'     Name
'('           Punctuation
'emailAddress' Name
','           Punctuation
' '           Text
'mailRegEx'   Name
')'           Punctuation
')'           Punctuation
' '           Text
'Then'        Keyword
'\n                    ' Text
'retVal'      Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'New'         Keyword
' '           Text
'KeyValuePair' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'String'      Keyword.Type
')'           Punctuation
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'InvalidEmailAddressError' Name
')'           Punctuation
')'           Punctuation
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n\n        ' Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Validates a string array of Email Address property.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="propertyName">The name of the property to validate.</param>\n' Comment

'        '    Text
'\'\'\' <param name="retVal">The validation response object.</param>\n' Comment

'        '    Text
'\'\'\' <param name="mailRegEx">The regular expression pattern to use for validation.</param>\n' Comment

'        '    Text
'Private'     Keyword
' '           Text
'Overloads'   Keyword
' '           Text
'Sub'         Keyword
' '           Text
'ValidateAddresses' Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'propertyName' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByRef'       Keyword
' '           Text
'retVal'      Name
' '           Text
'As'          Operator.Word
' '           Text
'ValidationResponse' Name
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'mailRegEx'   Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
')'           Punctuation
'\n            ' Text
'ValidateAddresses' Name
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'retVal'      Name
','           Punctuation
' '           Text
'mailRegEx'   Name
','           Punctuation
' '           Text
'False'       Keyword
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
"''' <summary>\n" Comment

'        '    Text
"''' Validates a string array of Email Address property.\n" Comment

'        '    Text
"''' </summary>\n" Comment

'        '    Text
'\'\'\' <param name="propertyName">The name of the property to validate.</param>\n' Comment

'        '    Text
'\'\'\' <param name="retVal">The validation response object.</param>\n' Comment

'        '    Text
'\'\'\' <param name="mailRegEx">The regular expression pattern to use for validation.</param>\n' Comment

'        '    Text
'\'\'\' <param name="required">Indicates if the address is required; False if not specified.</param>\n' Comment

'        '    Text
'Private'     Keyword
' '           Text
'Overloads'   Keyword
' '           Text
'Sub'         Keyword
' '           Text
'ValidateAddresses' Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'propertyName' Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByRef'       Keyword
' '           Text
'retVal'      Name
' '           Text
'As'          Operator.Word
' '           Text
'ValidationResponse' Name
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'mailRegEx'   Name
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'ByVal'       Keyword
' '           Text
'required'    Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
')'           Punctuation
'\n\n            ' Text
'Dim'         Keyword
' '           Text
'emailAddresses' Name
'('           Punctuation
')'           Punctuation
' '           Text
'As'          Operator.Word
' '           Text
'String'      Keyword.Type
' '           Text
'='           Operator
' '           Text
'ReflectionHelper' Name
'.'           Punctuation
'Properties'  Name
'.'           Punctuation
'GetProperty' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
'('           Punctuation
')'           Punctuation
')'           Punctuation
'('           Punctuation
'Me'          Keyword
','           Punctuation
' '           Text
'propertyName' Name
')'           Punctuation
'\n\n            ' Text
'If'          Keyword
' '           Text
'emailAddresses' Name
' '           Text
'Is'          Operator.Word
' '           Text
'Nothing'     Keyword
' '           Text
'OrElse'      Operator.Word
' '           Text
'emailAddresses' Name
'.'           Punctuation
'Length'      Name
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'Then'        Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'required'    Name
' '           Text
'Then'        Keyword
' '           Text
'retVal'      Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'New'         Keyword
' '           Text
'KeyValuePair' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'String'      Keyword.Type
')'           Punctuation
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'String'      Keyword.Type
'.'           Punctuation
'Format'      Name
'('           Punctuation
'CultureInfo' Name
'.'           Punctuation
'CurrentCulture' Name
','           Punctuation
' '           Text
'NullEmailAddressError' Name
')'           Punctuation
')'           Punctuation
')'           Punctuation
'\n            ' Text
'Else'        Keyword
'\n                ' Text
'For'         Keyword
' '           Text
'i'           Name
' '           Text
'As'          Operator.Word
' '           Text
'Integer'     Keyword.Type
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'To'          Keyword
' '           Text
'emailAddresses' Name
'.'           Punctuation
'Length'      Name
' '           Text
'-'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n                    ' Text
'If'          Keyword
' '           Text
'('           Punctuation
'Not'         Keyword
' '           Text
'Regex'       Name
'.'           Punctuation
'IsMatch'     Name
'('           Punctuation
'emailAddresses' Name
'('           Punctuation
'i'           Name
')'           Punctuation
','           Punctuation
' '           Text
'mailRegEx'   Name
')'           Punctuation
')'           Punctuation
' '           Text
'Then'        Keyword
'\n                        ' Text
'retVal'      Name
'.'           Punctuation
'Add'         Name
'('           Punctuation
'New'         Keyword
' '           Text
'KeyValuePair' Name
'('           Punctuation
'Of'          Keyword
' '           Text
'String'      Keyword.Type
','           Punctuation
' '           Text
'String'      Keyword.Type
')'           Punctuation
'('           Punctuation
'propertyName' Name
','           Punctuation
' '           Text
'String'      Keyword.Type
'.'           Punctuation
'Format'      Name
'('           Punctuation
'CultureInfo' Name
'.'           Punctuation
'CurrentCulture' Name
','           Punctuation
' '           Text
'InvalidEmailAddressErrorWithAddress' Name
','           Punctuation
' '           Text
'emailAddresses' Name
'('           Punctuation
'i'           Name
')'           Punctuation
')'           Punctuation
')'           Punctuation
')'           Punctuation
'\n                    ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n                ' Text
'Next'        Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n\n        ' Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n'        Text

'#Region " IDisposable Implementation "\n' Comment.Preproc

'\n        '  Text
'Protected'   Keyword
' '           Text
'Overridable' Keyword
' '           Text
'Sub'         Keyword
' '           Text
'Dispose'     Name.Function
'('           Punctuation
'ByVal'       Keyword
' '           Text
'disposing'   Name
' '           Text
'As'          Operator.Word
' '           Text
'Boolean'     Keyword.Type
')'           Punctuation
'\n            ' Text
'If'          Keyword
' '           Text
'Not'         Keyword
' '           Text
'Me'          Keyword
'.'           Punctuation
'disposedValue' Name
' '           Text
'Then'        Keyword
'\n                ' Text
'If'          Keyword
' '           Text
'disposing'   Name
' '           Text
'Then'        Keyword
'\n                    ' Text
'_message'    Name
'.'           Punctuation
'Dispose'     Name
'('           Punctuation
')'           Punctuation
'\n                ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n                ' Text
'_mailClient' Name
' '           Text
'='           Operator
' '           Text
'Nothing'     Keyword
'\n                ' Text
'_message'    Name
' '           Text
'='           Operator
' '           Text
'Nothing'     Keyword
'\n            ' Text
'End'         Keyword
' '           Text
'If'          Keyword
'\n            ' Text
'Me'          Keyword
'.'           Punctuation
'disposedValue' Name
' '           Text
'='           Operator
' '           Text
'True'        Keyword
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n        ' Text
'Public'      Keyword
' '           Text
'Sub'         Keyword
' '           Text
'Dispose'     Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'Implements'  Keyword
' '           Text
'IDisposable' Name
'.'           Punctuation
'Dispose'     Name
'\n            ' Text
"' Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.\n" Comment

'            ' Text
'Dispose'     Name
'('           Punctuation
'True'        Keyword
')'           Punctuation
'\n            ' Text
'GC'          Name
'.'           Punctuation
'SuppressFinalize' Name
'('           Punctuation
'Me'          Keyword
')'           Punctuation
'\n        '  Text
'End'         Keyword
' '           Text
'Sub'         Keyword
'\n\n'        Text

'#End Region' Comment.Preproc
'\n\n    '    Text
'End'         Keyword
' '           Text
'Class'       Keyword
'\n\n'        Text

'End'         Keyword
' '           Text
'Namespace'   Keyword
'\n'          Text
