'XMLChars Class: Option Public Option Explicit Class XMLChars '** get valid character ranges and classes, per the XML spec at: '** http://www.w3.org/TR/REC-xml '** '** version 1.0 '** Julian Robichaux -- http://www.nsftools.com '** August 9, 2004 Private p_char As String Private p_whitespace As String Private p_pubidChar As String Private p_baseChar As String Private p_ideographic As String Private p_combiningChar As String Private p_digit As String Private p_extender As String '** used in the getCharRange function Private tempArray(10000) As String Sub New () '** nothing to initialize (we'll set the internal variables as needed) End Sub Private Function getCharRange (startChar As String, endChar As String) As String '** when getting a range of characters, it's a lot more efficient to store them '** one by one in an array and then Join the array when you're done (instead '** of concatenating the string over and over) -- that's what's going on in the '** For loop below. If you're still using R5, you'll have to take the performance '** hit and just concatenate the characters one at a time. On Error Goto processError Dim count As Integer, tempArraySize As Integer Erase tempArray tempArraySize = Ubound(tempArray) Dim i As Long, startNum As Long, endNum As Long startNum = getHexAsLong(startChar) endNum = getHexAsLong(endChar) For i = startNum To endNum tempArray(count) = Uchr$(i) count = count + 1 If (count > tempArraySize) Then getCharRange = getCharRange & Join(tempArray, "") Erase tempArray count = 0 End If Next processError: 'If (Err > 0) Then Print "Error " & Err & ": " & Error$ getCharRange = getCharRange & Join(tempArray, "") Exit Function End Function Private Function getChar (hexChar As String) As String On Error Goto processError getChar = Uchr$(getHexAsLong(hexChar)) processError: Exit Function End Function Private Function getHexAsLong (hexNum As String) As Long On Error Resume Next '** make sure you append an ampersand to the end to force the number '** to be a Long; otherwise you can end up with unexpected negative '** values because hex numbers are treated as Integers by default getHexAsLong = Val("&H" & hexNum & "&") End Function Property Get Char () As String If (Len(p_char) = 0) Then p_char = p_char & getChar("9") p_char = p_char & getChar("A") p_char = p_char & getChar("D") p_char = p_char & getCharRange("20", "D7FF") p_char = p_char & getCharRange("E000", "FFFD") End If Char = p_char End Property Property Get Whitespace () As String If (Len(p_whitespace) = 0) Then p_whitespace = p_whitespace & getChar("20") p_whitespace = p_whitespace & getChar("9") p_whitespace = p_whitespace & getChar("A") p_whitespace = p_whitespace & getChar("D") End If Whitespace = p_whitespace End Property Property Get NameChar () As String NameChar = Letter & Digit & ".-_:" & CombiningChar & Extender End Property Property Get PubidChar () As String If (Len(p_pubidChar) = 0) Then p_pubidChar = p_pubidChar & getChar("20") p_pubidChar = p_pubidChar & getChar("D") p_pubidChar = p_pubidChar & getChar("A") p_pubidChar = p_pubidChar & "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" p_pubidChar = p_pubidChar & "-'()+,./:=?;!*#@$_%" End If PubidChar = p_pubidChar End Property Property Get Letter () As String Letter = BaseChar & Ideographic End Property Property Get BaseChar () As String If (Len(p_baseChar) = 0) Then p_baseChar = p_baseChar & getCharRange("0041", "005A") p_baseChar = p_baseChar & getCharRange("0061", "007A") p_baseChar = p_baseChar & getCharRange("00C0", "00D6") p_baseChar = p_baseChar & getCharRange("00D8", "00F6") p_baseChar = p_baseChar & getCharRange("00F8", "00FF") p_baseChar = p_baseChar & getCharRange("0100", "0131") p_baseChar = p_baseChar & getCharRange("0134", "013E") p_baseChar = p_baseChar & getCharRange("0141", "0148") p_baseChar = p_baseChar & getCharRange("014A", "017E") p_baseChar = p_baseChar & getCharRange("0180", "01C3") p_baseChar = p_baseChar & getCharRange("01CD", "01F0") p_baseChar = p_baseChar & getCharRange("01F4", "01F5") p_baseChar = p_baseChar & getCharRange("01FA", "0217") p_baseChar = p_baseChar & getCharRange("0250", "02A8") p_baseChar = p_baseChar & getCharRange("02BB", "02C1") p_baseChar = p_baseChar & getChar("0386") p_baseChar = p_baseChar & getCharRange("0388", "038A") p_baseChar = p_baseChar & getChar("038C") p_baseChar = p_baseChar & getCharRange("038E", "03A1") p_baseChar = p_baseChar & getCharRange("03A3", "03CE") p_baseChar = p_baseChar & getCharRange("03D0", "03D6") p_baseChar = p_baseChar & getChar("03DA") p_baseChar = p_baseChar & getChar("03DC") p_baseChar = p_baseChar & getChar("03DE") p_baseChar = p_baseChar & getChar("03E0") p_baseChar = p_baseChar & getCharRange("03E2", "03F3") p_baseChar = p_baseChar & getCharRange("0401", "040C") p_baseChar = p_baseChar & getCharRange("040E", "044F") p_baseChar = p_baseChar & getCharRange("0451", "045C") p_baseChar = p_baseChar & getCharRange("045E", "0481") p_baseChar = p_baseChar & getCharRange("0490", "04C4") p_baseChar = p_baseChar & getCharRange("04C7", "04C8") p_baseChar = p_baseChar & getCharRange("04CB", "04CC") p_baseChar = p_baseChar & getCharRange("04D0", "04EB") p_baseChar = p_baseChar & getCharRange("04EE", "04F5") p_baseChar = p_baseChar & getCharRange("04F8", "04F9") p_baseChar = p_baseChar & getCharRange("0531", "0556") p_baseChar = p_baseChar & getChar("0559") p_baseChar = p_baseChar & getCharRange("0561", "0586") p_baseChar = p_baseChar & getCharRange("05D0", "05EA") p_baseChar = p_baseChar & getCharRange("05F0", "05F2") p_baseChar = p_baseChar & getCharRange("0621", "063A") p_baseChar = p_baseChar & getCharRange("0641", "064A") p_baseChar = p_baseChar & getCharRange("0671", "06B7") p_baseChar = p_baseChar & getCharRange("06BA", "06BE") p_baseChar = p_baseChar & getCharRange("06C0", "06CE") p_baseChar = p_baseChar & getCharRange("06D0", "06D3") p_baseChar = p_baseChar & getChar("06D5") p_baseChar = p_baseChar & getCharRange("06E5", "06E6") p_baseChar = p_baseChar & getCharRange("0905", "0939") p_baseChar = p_baseChar & getChar("093D") p_baseChar = p_baseChar & getCharRange("0958", "0961") p_baseChar = p_baseChar & getCharRange("0985", "098C") p_baseChar = p_baseChar & getCharRange("098F", "0990") p_baseChar = p_baseChar & getCharRange("0993", "09A8") p_baseChar = p_baseChar & getCharRange("09AA", "09B0") p_baseChar = p_baseChar & getChar("09B2") p_baseChar = p_baseChar & getCharRange("09B6", "09B9") p_baseChar = p_baseChar & getCharRange("09DC", "09DD") p_baseChar = p_baseChar & getCharRange("09DF", "09E1") p_baseChar = p_baseChar & getCharRange("09F0", "09F1") p_baseChar = p_baseChar & getCharRange("0A05", "0A0A") p_baseChar = p_baseChar & getCharRange("0A0F", "0A10") p_baseChar = p_baseChar & getCharRange("0A13", "0A28") p_baseChar = p_baseChar & getCharRange("0A2A", "0A30") p_baseChar = p_baseChar & getCharRange("0A32", "0A33") p_baseChar = p_baseChar & getCharRange("0A35", "0A36") p_baseChar = p_baseChar & getCharRange("0A38", "0A39") p_baseChar = p_baseChar & getCharRange("0A59", "0A5C") p_baseChar = p_baseChar & getChar("0A5E") p_baseChar = p_baseChar & getCharRange("0A72", "0A74") p_baseChar = p_baseChar & getCharRange("0A85", "0A8B") p_baseChar = p_baseChar & getChar("0A8D") p_baseChar = p_baseChar & getCharRange("0A8F", "0A91") p_baseChar = p_baseChar & getCharRange("0A93", "0AA8") p_baseChar = p_baseChar & getCharRange("0AAA", "0AB0") p_baseChar = p_baseChar & getCharRange("0AB2", "0AB3") p_baseChar = p_baseChar & getCharRange("0AB5", "0AB9") p_baseChar = p_baseChar & getChar("0ABD") p_baseChar = p_baseChar & getChar("0AE0") p_baseChar = p_baseChar & getCharRange("0B05", "0B0C") p_baseChar = p_baseChar & getCharRange("0B0F", "0B10") p_baseChar = p_baseChar & getCharRange("0B13", "0B28") p_baseChar = p_baseChar & getCharRange("0B2A", "0B30") p_baseChar = p_baseChar & getCharRange("0B32", "0B33") p_baseChar = p_baseChar & getCharRange("0B36", "0B39") p_baseChar = p_baseChar & getChar("0B3D") p_baseChar = p_baseChar & getCharRange("0B5C", "0B5D") p_baseChar = p_baseChar & getCharRange("0B5F", "0B61") p_baseChar = p_baseChar & getCharRange("0B85", "0B8A") p_baseChar = p_baseChar & getCharRange("0B8E", "0B90") p_baseChar = p_baseChar & getCharRange("0B92", "0B95") p_baseChar = p_baseChar & getCharRange("0B99", "0B9A") p_baseChar = p_baseChar & getChar("0B9C") p_baseChar = p_baseChar & getCharRange("0B9E", "0B9F") p_baseChar = p_baseChar & getCharRange("0BA3", "0BA4") p_baseChar = p_baseChar & getCharRange("0BA8", "0BAA") p_baseChar = p_baseChar & getCharRange("0BAE", "0BB5") p_baseChar = p_baseChar & getCharRange("0BB7", "0BB9") p_baseChar = p_baseChar & getCharRange("0C05", "0C0C") p_baseChar = p_baseChar & getCharRange("0C0E", "0C10") p_baseChar = p_baseChar & getCharRange("0C12", "0C28") p_baseChar = p_baseChar & getCharRange("0C2A", "0C33") p_baseChar = p_baseChar & getCharRange("0C35", "0C39") p_baseChar = p_baseChar & getCharRange("0C60", "0C61") p_baseChar = p_baseChar & getCharRange("0C85", "0C8C") p_baseChar = p_baseChar & getCharRange("0C8E", "0C90") p_baseChar = p_baseChar & getCharRange("0C92", "0CA8") p_baseChar = p_baseChar & getCharRange("0CAA", "0CB3") p_baseChar = p_baseChar & getCharRange("0CB5", "0CB9") p_baseChar = p_baseChar & getChar("0CDE") p_baseChar = p_baseChar & getCharRange("0CE0", "0CE1") p_baseChar = p_baseChar & getCharRange("0D05", "0D0C") p_baseChar = p_baseChar & getCharRange("0D0E", "0D10") p_baseChar = p_baseChar & getCharRange("0D12", "0D28") p_baseChar = p_baseChar & getCharRange("0D2A", "0D39") p_baseChar = p_baseChar & getCharRange("0D60", "0D61") p_baseChar = p_baseChar & getCharRange("0E01", "0E2E") p_baseChar = p_baseChar & getChar("0E30") p_baseChar = p_baseChar & getCharRange("0E32", "0E33") p_baseChar = p_baseChar & getCharRange("0E40", "0E45") p_baseChar = p_baseChar & getCharRange("0E81", "0E82") p_baseChar = p_baseChar & getChar("0E84") p_baseChar = p_baseChar & getCharRange("0E87", "0E88") p_baseChar = p_baseChar & getChar("0E8A") p_baseChar = p_baseChar & getChar("0E8D") p_baseChar = p_baseChar & getCharRange("0E94", "0E97") p_baseChar = p_baseChar & getCharRange("0E99", "0E9F") p_baseChar = p_baseChar & getCharRange("0EA1", "0EA3") p_baseChar = p_baseChar & getChar("0EA5") p_baseChar = p_baseChar & getChar("0EA7") p_baseChar = p_baseChar & getCharRange("0EAA", "0EAB") p_baseChar = p_baseChar & getCharRange("0EAD", "0EAE") p_baseChar = p_baseChar & getChar("0EB0") p_baseChar = p_baseChar & getCharRange("0EB2", "0EB3") p_baseChar = p_baseChar & getChar("0EBD") p_baseChar = p_baseChar & getCharRange("0EC0", "0EC4") p_baseChar = p_baseChar & getCharRange("0F40", "0F47") p_baseChar = p_baseChar & getCharRange("0F49", "0F69") p_baseChar = p_baseChar & getCharRange("10A0", "10C5") p_baseChar = p_baseChar & getCharRange("10D0", "10F6") p_baseChar = p_baseChar & getChar("1100") p_baseChar = p_baseChar & getCharRange("1102", "1103") p_baseChar = p_baseChar & getCharRange("1105", "1107") p_baseChar = p_baseChar & getChar("1109") p_baseChar = p_baseChar & getCharRange("110B", "110C") p_baseChar = p_baseChar & getCharRange("110E", "1112") p_baseChar = p_baseChar & getChar("113C") p_baseChar = p_baseChar & getChar("113E") p_baseChar = p_baseChar & getChar("1140") p_baseChar = p_baseChar & getChar("114C") p_baseChar = p_baseChar & getChar("114E") p_baseChar = p_baseChar & getChar("1150") p_baseChar = p_baseChar & getCharRange("1154", "1155") p_baseChar = p_baseChar & getChar("1159") p_baseChar = p_baseChar & getCharRange("115F", "1161") p_baseChar = p_baseChar & getChar("1163") p_baseChar = p_baseChar & getChar("1165") p_baseChar = p_baseChar & getChar("1167") p_baseChar = p_baseChar & getChar("1169") p_baseChar = p_baseChar & getCharRange("116D", "116E") p_baseChar = p_baseChar & getCharRange("1172", "1173") p_baseChar = p_baseChar & getChar("1175") p_baseChar = p_baseChar & getChar("119E") p_baseChar = p_baseChar & getChar("11A8") p_baseChar = p_baseChar & getChar("11AB") p_baseChar = p_baseChar & getCharRange("11AE", "11AF") p_baseChar = p_baseChar & getCharRange("11B7", "11B8") p_baseChar = p_baseChar & getChar("11BA") p_baseChar = p_baseChar & getCharRange("11BC", "11C2") p_baseChar = p_baseChar & getChar("11EB") p_baseChar = p_baseChar & getChar("11F0") p_baseChar = p_baseChar & getChar("11F9") p_baseChar = p_baseChar & getCharRange("1E00", "1E9B") p_baseChar = p_baseChar & getCharRange("1EA0", "1EF9") p_baseChar = p_baseChar & getCharRange("1F00", "1F15") p_baseChar = p_baseChar & getCharRange("1F18", "1F1D") p_baseChar = p_baseChar & getCharRange("1F20", "1F45") p_baseChar = p_baseChar & getCharRange("1F48", "1F4D") p_baseChar = p_baseChar & getCharRange("1F50", "1F57") p_baseChar = p_baseChar & getChar("1F59") p_baseChar = p_baseChar & getChar("1F5B") p_baseChar = p_baseChar & getChar("1F5D") p_baseChar = p_baseChar & getCharRange("1F5F", "1F7D") p_baseChar = p_baseChar & getCharRange("1F80", "1FB4") p_baseChar = p_baseChar & getCharRange("1FB6", "1FBC") p_baseChar = p_baseChar & getChar("1FBE") p_baseChar = p_baseChar & getCharRange("1FC2", "1FC4") p_baseChar = p_baseChar & getCharRange("1FC6", "1FCC") p_baseChar = p_baseChar & getCharRange("1FD0", "1FD3") p_baseChar = p_baseChar & getCharRange("1FD6", "1FDB") p_baseChar = p_baseChar & getCharRange("1FE0", "1FEC") p_baseChar = p_baseChar & getCharRange("1FF2", "1FF4") p_baseChar = p_baseChar & getCharRange("1FF6", "1FFC") p_baseChar = p_baseChar & getChar("2126") p_baseChar = p_baseChar & getCharRange("212A", "212B") p_baseChar = p_baseChar & getChar("212E") p_baseChar = p_baseChar & getCharRange("2180", "2182") p_baseChar = p_baseChar & getCharRange("3041", "3094") p_baseChar = p_baseChar & getCharRange("30A1", "30FA") p_baseChar = p_baseChar & getCharRange("3105", "312C") p_baseChar = p_baseChar & getCharRange("AC00", "D7A3") End If BaseChar = p_baseChar End Property Property Get Ideographic () As String If (Len(p_ideographic) = 0) Then p_ideographic = p_ideographic & getCharRange("4E00", "9FA5") p_ideographic = p_ideographic & getChar("3007") p_ideographic = p_ideographic & getCharRange("3021", "3029") End If Ideographic = p_ideographic End Property Property Get CombiningChar () As String If (Len(p_combiningChar) = 0) Then p_combiningChar = p_combiningChar & getCharRange("0300", "0345") p_combiningChar = p_combiningChar & getCharRange("0360", "0361") p_combiningChar = p_combiningChar & getCharRange("0483", "0486") p_combiningChar = p_combiningChar & getCharRange("0591", "05A1") p_combiningChar = p_combiningChar & getCharRange("05A3", "05B9") p_combiningChar = p_combiningChar & getCharRange("05BB", "05BD") p_combiningChar = p_combiningChar & getChar("05BF") p_combiningChar = p_combiningChar & getCharRange("05C1", "05C2") p_combiningChar = p_combiningChar & getChar("05C4") p_combiningChar = p_combiningChar & getCharRange("064B", "0652") p_combiningChar = p_combiningChar & getChar("0670") p_combiningChar = p_combiningChar & getCharRange("06D6", "06DC") p_combiningChar = p_combiningChar & getCharRange("06DD", "06DF") p_combiningChar = p_combiningChar & getCharRange("06E0", "06E4") p_combiningChar = p_combiningChar & getCharRange("06E7", "06E8") p_combiningChar = p_combiningChar & getCharRange("06EA", "06ED") p_combiningChar = p_combiningChar & getCharRange("0901", "0903") p_combiningChar = p_combiningChar & getChar("093C") p_combiningChar = p_combiningChar & getCharRange("093E", "094C") p_combiningChar = p_combiningChar & getChar("094D") p_combiningChar = p_combiningChar & getCharRange("0951", "0954") p_combiningChar = p_combiningChar & getCharRange("0962", "0963") p_combiningChar = p_combiningChar & getCharRange("0981", "0983") p_combiningChar = p_combiningChar & getChar("09BC") p_combiningChar = p_combiningChar & getChar("09BE") p_combiningChar = p_combiningChar & getChar("09BF") p_combiningChar = p_combiningChar & getCharRange("09C0", "09C4") p_combiningChar = p_combiningChar & getCharRange("09C7", "09C8") p_combiningChar = p_combiningChar & getCharRange("09CB", "09CD") p_combiningChar = p_combiningChar & getChar("09D7") p_combiningChar = p_combiningChar & getCharRange("09E2", "09E3") p_combiningChar = p_combiningChar & getChar("0A02") p_combiningChar = p_combiningChar & getChar("0A3C") p_combiningChar = p_combiningChar & getChar("0A3E") p_combiningChar = p_combiningChar & getChar("0A3F") p_combiningChar = p_combiningChar & getCharRange("0A40", "0A42") p_combiningChar = p_combiningChar & getCharRange("0A47", "0A48") p_combiningChar = p_combiningChar & getCharRange("0A4B", "0A4D") p_combiningChar = p_combiningChar & getCharRange("0A70", "0A71") p_combiningChar = p_combiningChar & getCharRange("0A81", "0A83") p_combiningChar = p_combiningChar & getChar("0ABC") p_combiningChar = p_combiningChar & getCharRange("0ABE", "0AC5") p_combiningChar = p_combiningChar & getCharRange("0AC7", "0AC9") p_combiningChar = p_combiningChar & getCharRange("0ACB", "0ACD") p_combiningChar = p_combiningChar & getCharRange("0B01", "0B03") p_combiningChar = p_combiningChar & getChar("0B3C") p_combiningChar = p_combiningChar & getCharRange("0B3E", "0B43") p_combiningChar = p_combiningChar & getCharRange("0B47", "0B48") p_combiningChar = p_combiningChar & getCharRange("0B4B", "0B4D") p_combiningChar = p_combiningChar & getCharRange("0B56", "0B57") p_combiningChar = p_combiningChar & getCharRange("0B82", "0B83") p_combiningChar = p_combiningChar & getCharRange("0BBE", "0BC2") p_combiningChar = p_combiningChar & getCharRange("0BC6", "0BC8") p_combiningChar = p_combiningChar & getCharRange("0BCA", "0BCD") p_combiningChar = p_combiningChar & getChar("0BD7") p_combiningChar = p_combiningChar & getCharRange("0C01", "0C03") p_combiningChar = p_combiningChar & getCharRange("0C3E", "0C44") p_combiningChar = p_combiningChar & getCharRange("0C46", "0C48") p_combiningChar = p_combiningChar & getCharRange("0C4A", "0C4D") p_combiningChar = p_combiningChar & getCharRange("0C55", "0C56") p_combiningChar = p_combiningChar & getCharRange("0C82", "0C83") p_combiningChar = p_combiningChar & getCharRange("0CBE", "0CC4") p_combiningChar = p_combiningChar & getCharRange("0CC6", "0CC8") p_combiningChar = p_combiningChar & getCharRange("0CCA", "0CCD") p_combiningChar = p_combiningChar & getCharRange("0CD5", "0CD6") p_combiningChar = p_combiningChar & getCharRange("0D02", "0D03") p_combiningChar = p_combiningChar & getCharRange("0D3E", "0D43") p_combiningChar = p_combiningChar & getCharRange("0D46", "0D48") p_combiningChar = p_combiningChar & getCharRange("0D4A", "0D4D") p_combiningChar = p_combiningChar & getChar("0D57") p_combiningChar = p_combiningChar & getChar("0E31") p_combiningChar = p_combiningChar & getCharRange("0E34", "0E3A") p_combiningChar = p_combiningChar & getCharRange("0E47", "0E4E") p_combiningChar = p_combiningChar & getChar("0EB1") p_combiningChar = p_combiningChar & getCharRange("0EB4", "0EB9") p_combiningChar = p_combiningChar & getCharRange("0EBB", "0EBC") p_combiningChar = p_combiningChar & getCharRange("0EC8", "0ECD") p_combiningChar = p_combiningChar & getCharRange("0F18", "0F19") p_combiningChar = p_combiningChar & getChar("0F35") p_combiningChar = p_combiningChar & getChar("0F37") p_combiningChar = p_combiningChar & getChar("0F39") p_combiningChar = p_combiningChar & getChar("0F3E") p_combiningChar = p_combiningChar & getChar("0F3F") p_combiningChar = p_combiningChar & getCharRange("0F71", "0F84") p_combiningChar = p_combiningChar & getCharRange("0F86", "0F8B") p_combiningChar = p_combiningChar & getCharRange("0F90", "0F95") p_combiningChar = p_combiningChar & getChar("0F97") p_combiningChar = p_combiningChar & getCharRange("0F99", "0FAD") p_combiningChar = p_combiningChar & getCharRange("0FB1", "0FB7") p_combiningChar = p_combiningChar & getChar("0FB9") p_combiningChar = p_combiningChar & getCharRange("20D0", "20DC") p_combiningChar = p_combiningChar & getChar("20E1") p_combiningChar = p_combiningChar & getCharRange("302A", "302F") p_combiningChar = p_combiningChar & getChar("3099") p_combiningChar = p_combiningChar & getChar("309A") End If CombiningChar = p_combiningChar End Property Property Get Digit () As String If (Len(p_digit) = 0) Then p_digit = p_digit & getCharRange("0030", "0039") p_digit = p_digit & getCharRange("0660", "0669") p_digit = p_digit & getCharRange("06F0", "06F9") p_digit = p_digit & getCharRange("0966", "096F") p_digit = p_digit & getCharRange("09E6", "09EF") p_digit = p_digit & getCharRange("0A66", "0A6F") p_digit = p_digit & getCharRange("0AE6", "0AEF") p_digit = p_digit & getCharRange("0B66", "0B6F") p_digit = p_digit & getCharRange("0BE7", "0BEF") p_digit = p_digit & getCharRange("0C66", "0C6F") p_digit = p_digit & getCharRange("0CE6", "0CEF") p_digit = p_digit & getCharRange("0D66", "0D6F") p_digit = p_digit & getCharRange("0E50", "0E59") p_digit = p_digit & getCharRange("0ED0", "0ED9") p_digit = p_digit & getCharRange("0F20", "0F29") End If Digit = p_digit End Property Property Get Extender () As String If (Len(p_extender) = 0) Then p_extender = p_extender & getChar("00B7") p_extender = p_extender & getChar("02D0") p_extender = p_extender & getChar("02D1") p_extender = p_extender & getChar("0387") p_extender = p_extender & getChar("0640") p_extender = p_extender & getChar("0E46") p_extender = p_extender & getChar("0EC6") p_extender = p_extender & getChar("3005") p_extender = p_extender & getCharRange("3031", "3035") p_extender = p_extender & getCharRange("309D", "309E") p_extender = p_extender & getCharRange("30FC", "30FE") End If Extender = p_extender End Property End Class Sub Initialize Dim xchars As New XMLChars Dim fileNum As Integer Dim putString As String Dim newLine As String '** This is a test of the XMLChars class '** REMOVE ALL THIS IF YOU USE THE CLASS IN PRODUCTION newLine = Chr(13) & Chr(10) fileNum = Freefile '** we need to use Binary output, and write the data using Put '** so the Unicode characters will get written properly Open "C:\XMLChars.txt" For Binary Access Write As fileNum putString = "Char = " & xchars.Char & newLine & newLine Put #fileNum, , putString putString = "Whitespace = " & xchars.Whitespace & newLine & newLine Put #fileNum, , putString putString = "NameChar = " & xchars.NameChar & newLine & newLine Put #fileNum, , putString putString = "PubidChar = " & xchars.PubidChar & newLine & newLine Put #fileNum, , putString putString = "Letter = " & xchars.Letter & newLine & newLine Put #fileNum, , putString putString = "BaseChar = " & xchars.BaseChar & newLine & newLine Put #fileNum, , putString putString = "Ideographic = " & xchars.Ideographic & newLine & newLine Put #fileNum, , putString putString = "CombiningChar = " & xchars.CombiningChar & newLine & newLine Put #fileNum, , putString putString = "Digit = " & xchars.Digit & newLine & newLine Put #fileNum, , putString putString = "Extender = " & xchars.Extender & newLine & newLine Put #fileNum, , putString Close fileNum End Sub