From bab7dffa22a1f82af04d8e9455d17014d3134ac0 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Sun, 22 Dec 2013 23:13:32 +0100 Subject: [PATCH] add windows charsets --- ReadSharp/Encodings/Windows1251.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1252.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1253.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1254.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1255.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1256.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1257.cs | 796 +++++++++++++++++++++++++++++ ReadSharp/Encodings/Windows1258.cs | 796 +++++++++++++++++++++++++++++ 8 files changed, 6368 insertions(+) create mode 100644 ReadSharp/Encodings/Windows1251.cs create mode 100644 ReadSharp/Encodings/Windows1252.cs create mode 100644 ReadSharp/Encodings/Windows1253.cs create mode 100644 ReadSharp/Encodings/Windows1254.cs create mode 100644 ReadSharp/Encodings/Windows1255.cs create mode 100644 ReadSharp/Encodings/Windows1256.cs create mode 100644 ReadSharp/Encodings/Windows1257.cs create mode 100644 ReadSharp/Encodings/Windows1258.cs diff --git a/ReadSharp/Encodings/Windows1251.cs b/ReadSharp/Encodings/Windows1251.cs new file mode 100644 index 0000000..86d2570 --- /dev/null +++ b/ReadSharp/Encodings/Windows1251.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Cyrillic (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1251 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1251"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1251() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)1026 /* byte 128 */ , + (char)1027 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)1107 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)8364 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)1033 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)1034 /* byte 140 */ , + (char)1036 /* byte 141 */ , + (char)1035 /* byte 142 */ , + (char)1039 /* byte 143 */ , + (char)1106 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)152 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)1113 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)1114 /* byte 156 */ , + (char)1116 /* byte 157 */ , + (char)1115 /* byte 158 */ , + (char)1119 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)1038 /* byte 161 */ , + (char)1118 /* byte 162 */ , + (char)1032 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)1168 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)1025 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)1028 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)1031 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)1030 /* byte 178 */ , + (char)1110 /* byte 179 */ , + (char)1169 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)1105 /* byte 184 */ , + (char)8470 /* byte 185 */ , + (char)1108 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)1112 /* byte 188 */ , + (char)1029 /* byte 189 */ , + (char)1109 /* byte 190 */ , + (char)1111 /* byte 191 */ , + (char)1040 /* byte 192 */ , + (char)1041 /* byte 193 */ , + (char)1042 /* byte 194 */ , + (char)1043 /* byte 195 */ , + (char)1044 /* byte 196 */ , + (char)1045 /* byte 197 */ , + (char)1046 /* byte 198 */ , + (char)1047 /* byte 199 */ , + (char)1048 /* byte 200 */ , + (char)1049 /* byte 201 */ , + (char)1050 /* byte 202 */ , + (char)1051 /* byte 203 */ , + (char)1052 /* byte 204 */ , + (char)1053 /* byte 205 */ , + (char)1054 /* byte 206 */ , + (char)1055 /* byte 207 */ , + (char)1056 /* byte 208 */ , + (char)1057 /* byte 209 */ , + (char)1058 /* byte 210 */ , + (char)1059 /* byte 211 */ , + (char)1060 /* byte 212 */ , + (char)1061 /* byte 213 */ , + (char)1062 /* byte 214 */ , + (char)1063 /* byte 215 */ , + (char)1064 /* byte 216 */ , + (char)1065 /* byte 217 */ , + (char)1066 /* byte 218 */ , + (char)1067 /* byte 219 */ , + (char)1068 /* byte 220 */ , + (char)1069 /* byte 221 */ , + (char)1070 /* byte 222 */ , + (char)1071 /* byte 223 */ , + (char)1072 /* byte 224 */ , + (char)1073 /* byte 225 */ , + (char)1074 /* byte 226 */ , + (char)1075 /* byte 227 */ , + (char)1076 /* byte 228 */ , + (char)1077 /* byte 229 */ , + (char)1078 /* byte 230 */ , + (char)1079 /* byte 231 */ , + (char)1080 /* byte 232 */ , + (char)1081 /* byte 233 */ , + (char)1082 /* byte 234 */ , + (char)1083 /* byte 235 */ , + (char)1084 /* byte 236 */ , + (char)1085 /* byte 237 */ , + (char)1086 /* byte 238 */ , + (char)1087 /* byte 239 */ , + (char)1088 /* byte 240 */ , + (char)1089 /* byte 241 */ , + (char)1090 /* byte 242 */ , + (char)1091 /* byte 243 */ , + (char)1092 /* byte 244 */ , + (char)1093 /* byte 245 */ , + (char)1094 /* byte 246 */ , + (char)1095 /* byte 247 */ , + (char)1096 /* byte 248 */ , + (char)1097 /* byte 249 */ , + (char)1098 /* byte 250 */ , + (char)1099 /* byte 251 */ , + (char)1100 /* byte 252 */ , + (char)1101 /* byte 253 */ , + (char)1102 /* byte 254 */ , + (char)1103 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)1026, 128 }, + { (char)1027, 129 }, + { (char)8218, 130 }, + { (char)1107, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)8364, 136 }, + { (char)8240, 137 }, + { (char)1033, 138 }, + { (char)8249, 139 }, + { (char)1034, 140 }, + { (char)1036, 141 }, + { (char)1035, 142 }, + { (char)1039, 143 }, + { (char)1106, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)152, 152 }, + { (char)8482, 153 }, + { (char)1113, 154 }, + { (char)8250, 155 }, + { (char)1114, 156 }, + { (char)1116, 157 }, + { (char)1115, 158 }, + { (char)1119, 159 }, + { (char)160, 160 }, + { (char)1038, 161 }, + { (char)1118, 162 }, + { (char)1032, 163 }, + { (char)164, 164 }, + { (char)1168, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)1025, 168 }, + { (char)169, 169 }, + { (char)1028, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)1031, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)1030, 178 }, + { (char)1110, 179 }, + { (char)1169, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)1105, 184 }, + { (char)8470, 185 }, + { (char)1108, 186 }, + { (char)187, 187 }, + { (char)1112, 188 }, + { (char)1029, 189 }, + { (char)1109, 190 }, + { (char)1111, 191 }, + { (char)1040, 192 }, + { (char)1041, 193 }, + { (char)1042, 194 }, + { (char)1043, 195 }, + { (char)1044, 196 }, + { (char)1045, 197 }, + { (char)1046, 198 }, + { (char)1047, 199 }, + { (char)1048, 200 }, + { (char)1049, 201 }, + { (char)1050, 202 }, + { (char)1051, 203 }, + { (char)1052, 204 }, + { (char)1053, 205 }, + { (char)1054, 206 }, + { (char)1055, 207 }, + { (char)1056, 208 }, + { (char)1057, 209 }, + { (char)1058, 210 }, + { (char)1059, 211 }, + { (char)1060, 212 }, + { (char)1061, 213 }, + { (char)1062, 214 }, + { (char)1063, 215 }, + { (char)1064, 216 }, + { (char)1065, 217 }, + { (char)1066, 218 }, + { (char)1067, 219 }, + { (char)1068, 220 }, + { (char)1069, 221 }, + { (char)1070, 222 }, + { (char)1071, 223 }, + { (char)1072, 224 }, + { (char)1073, 225 }, + { (char)1074, 226 }, + { (char)1075, 227 }, + { (char)1076, 228 }, + { (char)1077, 229 }, + { (char)1078, 230 }, + { (char)1079, 231 }, + { (char)1080, 232 }, + { (char)1081, 233 }, + { (char)1082, 234 }, + { (char)1083, 235 }, + { (char)1084, 236 }, + { (char)1085, 237 }, + { (char)1086, 238 }, + { (char)1087, 239 }, + { (char)1088, 240 }, + { (char)1089, 241 }, + { (char)1090, 242 }, + { (char)1091, 243 }, + { (char)1092, 244 }, + { (char)1093, 245 }, + { (char)1094, 246 }, + { (char)1095, 247 }, + { (char)1096, 248 }, + { (char)1097, 249 }, + { (char)1098, 250 }, + { (char)1099, 251 }, + { (char)1100, 252 }, + { (char)1101, 253 }, + { (char)1102, 254 }, + { (char)1103, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1252.cs b/ReadSharp/Encodings/Windows1252.cs new file mode 100644 index 0000000..51d4f1f --- /dev/null +++ b/ReadSharp/Encodings/Windows1252.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Western European (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1252 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "Windows-1252"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1252() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)710 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)352 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)338 /* byte 140 */ , + (char)141 /* byte 141 */ , + (char)381 /* byte 142 */ , + (char)143 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)732 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)353 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)339 /* byte 156 */ , + (char)157 /* byte 157 */ , + (char)382 /* byte 158 */ , + (char)376 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)161 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)170 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)175 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)184 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)186 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)191 /* byte 191 */ , + (char)192 /* byte 192 */ , + (char)193 /* byte 193 */ , + (char)194 /* byte 194 */ , + (char)195 /* byte 195 */ , + (char)196 /* byte 196 */ , + (char)197 /* byte 197 */ , + (char)198 /* byte 198 */ , + (char)199 /* byte 199 */ , + (char)200 /* byte 200 */ , + (char)201 /* byte 201 */ , + (char)202 /* byte 202 */ , + (char)203 /* byte 203 */ , + (char)204 /* byte 204 */ , + (char)205 /* byte 205 */ , + (char)206 /* byte 206 */ , + (char)207 /* byte 207 */ , + (char)208 /* byte 208 */ , + (char)209 /* byte 209 */ , + (char)210 /* byte 210 */ , + (char)211 /* byte 211 */ , + (char)212 /* byte 212 */ , + (char)213 /* byte 213 */ , + (char)214 /* byte 214 */ , + (char)215 /* byte 215 */ , + (char)216 /* byte 216 */ , + (char)217 /* byte 217 */ , + (char)218 /* byte 218 */ , + (char)219 /* byte 219 */ , + (char)220 /* byte 220 */ , + (char)221 /* byte 221 */ , + (char)222 /* byte 222 */ , + (char)223 /* byte 223 */ , + (char)224 /* byte 224 */ , + (char)225 /* byte 225 */ , + (char)226 /* byte 226 */ , + (char)227 /* byte 227 */ , + (char)228 /* byte 228 */ , + (char)229 /* byte 229 */ , + (char)230 /* byte 230 */ , + (char)231 /* byte 231 */ , + (char)232 /* byte 232 */ , + (char)233 /* byte 233 */ , + (char)234 /* byte 234 */ , + (char)235 /* byte 235 */ , + (char)236 /* byte 236 */ , + (char)237 /* byte 237 */ , + (char)238 /* byte 238 */ , + (char)239 /* byte 239 */ , + (char)240 /* byte 240 */ , + (char)241 /* byte 241 */ , + (char)242 /* byte 242 */ , + (char)243 /* byte 243 */ , + (char)244 /* byte 244 */ , + (char)245 /* byte 245 */ , + (char)246 /* byte 246 */ , + (char)247 /* byte 247 */ , + (char)248 /* byte 248 */ , + (char)249 /* byte 249 */ , + (char)250 /* byte 250 */ , + (char)251 /* byte 251 */ , + (char)252 /* byte 252 */ , + (char)253 /* byte 253 */ , + (char)254 /* byte 254 */ , + (char)255 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)710, 136 }, + { (char)8240, 137 }, + { (char)352, 138 }, + { (char)8249, 139 }, + { (char)338, 140 }, + { (char)141, 141 }, + { (char)381, 142 }, + { (char)143, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)732, 152 }, + { (char)8482, 153 }, + { (char)353, 154 }, + { (char)8250, 155 }, + { (char)339, 156 }, + { (char)157, 157 }, + { (char)382, 158 }, + { (char)376, 159 }, + { (char)160, 160 }, + { (char)161, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)170, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)175, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)184, 184 }, + { (char)185, 185 }, + { (char)186, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)191, 191 }, + { (char)192, 192 }, + { (char)193, 193 }, + { (char)194, 194 }, + { (char)195, 195 }, + { (char)196, 196 }, + { (char)197, 197 }, + { (char)198, 198 }, + { (char)199, 199 }, + { (char)200, 200 }, + { (char)201, 201 }, + { (char)202, 202 }, + { (char)203, 203 }, + { (char)204, 204 }, + { (char)205, 205 }, + { (char)206, 206 }, + { (char)207, 207 }, + { (char)208, 208 }, + { (char)209, 209 }, + { (char)210, 210 }, + { (char)211, 211 }, + { (char)212, 212 }, + { (char)213, 213 }, + { (char)214, 214 }, + { (char)215, 215 }, + { (char)216, 216 }, + { (char)217, 217 }, + { (char)218, 218 }, + { (char)219, 219 }, + { (char)220, 220 }, + { (char)221, 221 }, + { (char)222, 222 }, + { (char)223, 223 }, + { (char)224, 224 }, + { (char)225, 225 }, + { (char)226, 226 }, + { (char)227, 227 }, + { (char)228, 228 }, + { (char)229, 229 }, + { (char)230, 230 }, + { (char)231, 231 }, + { (char)232, 232 }, + { (char)233, 233 }, + { (char)234, 234 }, + { (char)235, 235 }, + { (char)236, 236 }, + { (char)237, 237 }, + { (char)238, 238 }, + { (char)239, 239 }, + { (char)240, 240 }, + { (char)241, 241 }, + { (char)242, 242 }, + { (char)243, 243 }, + { (char)244, 244 }, + { (char)245, 245 }, + { (char)246, 246 }, + { (char)247, 247 }, + { (char)248, 248 }, + { (char)249, 249 }, + { (char)250, 250 }, + { (char)251, 251 }, + { (char)252, 252 }, + { (char)253, 253 }, + { (char)254, 254 }, + { (char)255, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1253.cs b/ReadSharp/Encodings/Windows1253.cs new file mode 100644 index 0000000..148255f --- /dev/null +++ b/ReadSharp/Encodings/Windows1253.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Greek (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1253 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1253"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1253() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)136 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)138 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)140 /* byte 140 */ , + (char)141 /* byte 141 */ , + (char)142 /* byte 142 */ , + (char)143 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)152 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)154 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)156 /* byte 156 */ , + (char)157 /* byte 157 */ , + (char)158 /* byte 158 */ , + (char)159 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)901 /* byte 161 */ , + (char)902 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)63737 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)8213 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)900 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)904 /* byte 184 */ , + (char)905 /* byte 185 */ , + (char)906 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)908 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)910 /* byte 190 */ , + (char)911 /* byte 191 */ , + (char)912 /* byte 192 */ , + (char)913 /* byte 193 */ , + (char)914 /* byte 194 */ , + (char)915 /* byte 195 */ , + (char)916 /* byte 196 */ , + (char)917 /* byte 197 */ , + (char)918 /* byte 198 */ , + (char)919 /* byte 199 */ , + (char)920 /* byte 200 */ , + (char)921 /* byte 201 */ , + (char)922 /* byte 202 */ , + (char)923 /* byte 203 */ , + (char)924 /* byte 204 */ , + (char)925 /* byte 205 */ , + (char)926 /* byte 206 */ , + (char)927 /* byte 207 */ , + (char)928 /* byte 208 */ , + (char)929 /* byte 209 */ , + (char)63738 /* byte 210 */ , + (char)931 /* byte 211 */ , + (char)932 /* byte 212 */ , + (char)933 /* byte 213 */ , + (char)934 /* byte 214 */ , + (char)935 /* byte 215 */ , + (char)936 /* byte 216 */ , + (char)937 /* byte 217 */ , + (char)938 /* byte 218 */ , + (char)939 /* byte 219 */ , + (char)940 /* byte 220 */ , + (char)941 /* byte 221 */ , + (char)942 /* byte 222 */ , + (char)943 /* byte 223 */ , + (char)944 /* byte 224 */ , + (char)945 /* byte 225 */ , + (char)946 /* byte 226 */ , + (char)947 /* byte 227 */ , + (char)948 /* byte 228 */ , + (char)949 /* byte 229 */ , + (char)950 /* byte 230 */ , + (char)951 /* byte 231 */ , + (char)952 /* byte 232 */ , + (char)953 /* byte 233 */ , + (char)954 /* byte 234 */ , + (char)955 /* byte 235 */ , + (char)956 /* byte 236 */ , + (char)957 /* byte 237 */ , + (char)958 /* byte 238 */ , + (char)959 /* byte 239 */ , + (char)960 /* byte 240 */ , + (char)961 /* byte 241 */ , + (char)962 /* byte 242 */ , + (char)963 /* byte 243 */ , + (char)964 /* byte 244 */ , + (char)965 /* byte 245 */ , + (char)966 /* byte 246 */ , + (char)967 /* byte 247 */ , + (char)968 /* byte 248 */ , + (char)969 /* byte 249 */ , + (char)970 /* byte 250 */ , + (char)971 /* byte 251 */ , + (char)972 /* byte 252 */ , + (char)973 /* byte 253 */ , + (char)974 /* byte 254 */ , + (char)63739 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)136, 136 }, + { (char)8240, 137 }, + { (char)138, 138 }, + { (char)8249, 139 }, + { (char)140, 140 }, + { (char)141, 141 }, + { (char)142, 142 }, + { (char)143, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)152, 152 }, + { (char)8482, 153 }, + { (char)154, 154 }, + { (char)8250, 155 }, + { (char)156, 156 }, + { (char)157, 157 }, + { (char)158, 158 }, + { (char)159, 159 }, + { (char)160, 160 }, + { (char)901, 161 }, + { (char)902, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)63737, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)8213, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)900, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)904, 184 }, + { (char)905, 185 }, + { (char)906, 186 }, + { (char)187, 187 }, + { (char)908, 188 }, + { (char)189, 189 }, + { (char)910, 190 }, + { (char)911, 191 }, + { (char)912, 192 }, + { (char)913, 193 }, + { (char)914, 194 }, + { (char)915, 195 }, + { (char)916, 196 }, + { (char)917, 197 }, + { (char)918, 198 }, + { (char)919, 199 }, + { (char)920, 200 }, + { (char)921, 201 }, + { (char)922, 202 }, + { (char)923, 203 }, + { (char)924, 204 }, + { (char)925, 205 }, + { (char)926, 206 }, + { (char)927, 207 }, + { (char)928, 208 }, + { (char)929, 209 }, + { (char)63738, 210 }, + { (char)931, 211 }, + { (char)932, 212 }, + { (char)933, 213 }, + { (char)934, 214 }, + { (char)935, 215 }, + { (char)936, 216 }, + { (char)937, 217 }, + { (char)938, 218 }, + { (char)939, 219 }, + { (char)940, 220 }, + { (char)941, 221 }, + { (char)942, 222 }, + { (char)943, 223 }, + { (char)944, 224 }, + { (char)945, 225 }, + { (char)946, 226 }, + { (char)947, 227 }, + { (char)948, 228 }, + { (char)949, 229 }, + { (char)950, 230 }, + { (char)951, 231 }, + { (char)952, 232 }, + { (char)953, 233 }, + { (char)954, 234 }, + { (char)955, 235 }, + { (char)956, 236 }, + { (char)957, 237 }, + { (char)958, 238 }, + { (char)959, 239 }, + { (char)960, 240 }, + { (char)961, 241 }, + { (char)962, 242 }, + { (char)963, 243 }, + { (char)964, 244 }, + { (char)965, 245 }, + { (char)966, 246 }, + { (char)967, 247 }, + { (char)968, 248 }, + { (char)969, 249 }, + { (char)970, 250 }, + { (char)971, 251 }, + { (char)972, 252 }, + { (char)973, 253 }, + { (char)974, 254 }, + { (char)63739, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1254.cs b/ReadSharp/Encodings/Windows1254.cs new file mode 100644 index 0000000..54cc5ae --- /dev/null +++ b/ReadSharp/Encodings/Windows1254.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Turkish (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1254 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1254"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1254() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)710 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)352 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)338 /* byte 140 */ , + (char)141 /* byte 141 */ , + (char)142 /* byte 142 */ , + (char)143 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)732 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)353 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)339 /* byte 156 */ , + (char)157 /* byte 157 */ , + (char)158 /* byte 158 */ , + (char)376 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)161 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)170 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)175 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)184 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)186 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)191 /* byte 191 */ , + (char)192 /* byte 192 */ , + (char)193 /* byte 193 */ , + (char)194 /* byte 194 */ , + (char)195 /* byte 195 */ , + (char)196 /* byte 196 */ , + (char)197 /* byte 197 */ , + (char)198 /* byte 198 */ , + (char)199 /* byte 199 */ , + (char)200 /* byte 200 */ , + (char)201 /* byte 201 */ , + (char)202 /* byte 202 */ , + (char)203 /* byte 203 */ , + (char)204 /* byte 204 */ , + (char)205 /* byte 205 */ , + (char)206 /* byte 206 */ , + (char)207 /* byte 207 */ , + (char)286 /* byte 208 */ , + (char)209 /* byte 209 */ , + (char)210 /* byte 210 */ , + (char)211 /* byte 211 */ , + (char)212 /* byte 212 */ , + (char)213 /* byte 213 */ , + (char)214 /* byte 214 */ , + (char)215 /* byte 215 */ , + (char)216 /* byte 216 */ , + (char)217 /* byte 217 */ , + (char)218 /* byte 218 */ , + (char)219 /* byte 219 */ , + (char)220 /* byte 220 */ , + (char)304 /* byte 221 */ , + (char)350 /* byte 222 */ , + (char)223 /* byte 223 */ , + (char)224 /* byte 224 */ , + (char)225 /* byte 225 */ , + (char)226 /* byte 226 */ , + (char)227 /* byte 227 */ , + (char)228 /* byte 228 */ , + (char)229 /* byte 229 */ , + (char)230 /* byte 230 */ , + (char)231 /* byte 231 */ , + (char)232 /* byte 232 */ , + (char)233 /* byte 233 */ , + (char)234 /* byte 234 */ , + (char)235 /* byte 235 */ , + (char)236 /* byte 236 */ , + (char)237 /* byte 237 */ , + (char)238 /* byte 238 */ , + (char)239 /* byte 239 */ , + (char)287 /* byte 240 */ , + (char)241 /* byte 241 */ , + (char)242 /* byte 242 */ , + (char)243 /* byte 243 */ , + (char)244 /* byte 244 */ , + (char)245 /* byte 245 */ , + (char)246 /* byte 246 */ , + (char)247 /* byte 247 */ , + (char)248 /* byte 248 */ , + (char)249 /* byte 249 */ , + (char)250 /* byte 250 */ , + (char)251 /* byte 251 */ , + (char)252 /* byte 252 */ , + (char)305 /* byte 253 */ , + (char)351 /* byte 254 */ , + (char)255 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)710, 136 }, + { (char)8240, 137 }, + { (char)352, 138 }, + { (char)8249, 139 }, + { (char)338, 140 }, + { (char)141, 141 }, + { (char)142, 142 }, + { (char)143, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)732, 152 }, + { (char)8482, 153 }, + { (char)353, 154 }, + { (char)8250, 155 }, + { (char)339, 156 }, + { (char)157, 157 }, + { (char)158, 158 }, + { (char)376, 159 }, + { (char)160, 160 }, + { (char)161, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)170, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)175, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)184, 184 }, + { (char)185, 185 }, + { (char)186, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)191, 191 }, + { (char)192, 192 }, + { (char)193, 193 }, + { (char)194, 194 }, + { (char)195, 195 }, + { (char)196, 196 }, + { (char)197, 197 }, + { (char)198, 198 }, + { (char)199, 199 }, + { (char)200, 200 }, + { (char)201, 201 }, + { (char)202, 202 }, + { (char)203, 203 }, + { (char)204, 204 }, + { (char)205, 205 }, + { (char)206, 206 }, + { (char)207, 207 }, + { (char)286, 208 }, + { (char)209, 209 }, + { (char)210, 210 }, + { (char)211, 211 }, + { (char)212, 212 }, + { (char)213, 213 }, + { (char)214, 214 }, + { (char)215, 215 }, + { (char)216, 216 }, + { (char)217, 217 }, + { (char)218, 218 }, + { (char)219, 219 }, + { (char)220, 220 }, + { (char)304, 221 }, + { (char)350, 222 }, + { (char)223, 223 }, + { (char)224, 224 }, + { (char)225, 225 }, + { (char)226, 226 }, + { (char)227, 227 }, + { (char)228, 228 }, + { (char)229, 229 }, + { (char)230, 230 }, + { (char)231, 231 }, + { (char)232, 232 }, + { (char)233, 233 }, + { (char)234, 234 }, + { (char)235, 235 }, + { (char)236, 236 }, + { (char)237, 237 }, + { (char)238, 238 }, + { (char)239, 239 }, + { (char)287, 240 }, + { (char)241, 241 }, + { (char)242, 242 }, + { (char)243, 243 }, + { (char)244, 244 }, + { (char)245, 245 }, + { (char)246, 246 }, + { (char)247, 247 }, + { (char)248, 248 }, + { (char)249, 249 }, + { (char)250, 250 }, + { (char)251, 251 }, + { (char)252, 252 }, + { (char)305, 253 }, + { (char)351, 254 }, + { (char)255, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1255.cs b/ReadSharp/Encodings/Windows1255.cs new file mode 100644 index 0000000..ebb84a6 --- /dev/null +++ b/ReadSharp/Encodings/Windows1255.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Hebrew (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1255 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1255"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1255() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)710 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)138 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)140 /* byte 140 */ , + (char)141 /* byte 141 */ , + (char)142 /* byte 142 */ , + (char)143 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)732 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)154 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)156 /* byte 156 */ , + (char)157 /* byte 157 */ , + (char)158 /* byte 158 */ , + (char)159 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)161 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)8362 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)215 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)175 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)184 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)247 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)191 /* byte 191 */ , + (char)1456 /* byte 192 */ , + (char)1457 /* byte 193 */ , + (char)1458 /* byte 194 */ , + (char)1459 /* byte 195 */ , + (char)1460 /* byte 196 */ , + (char)1461 /* byte 197 */ , + (char)1462 /* byte 198 */ , + (char)1463 /* byte 199 */ , + (char)1464 /* byte 200 */ , + (char)1465 /* byte 201 */ , + (char)1466 /* byte 202 */ , + (char)1467 /* byte 203 */ , + (char)1468 /* byte 204 */ , + (char)1469 /* byte 205 */ , + (char)1470 /* byte 206 */ , + (char)1471 /* byte 207 */ , + (char)1472 /* byte 208 */ , + (char)1473 /* byte 209 */ , + (char)1474 /* byte 210 */ , + (char)1475 /* byte 211 */ , + (char)1520 /* byte 212 */ , + (char)1521 /* byte 213 */ , + (char)1522 /* byte 214 */ , + (char)1523 /* byte 215 */ , + (char)1524 /* byte 216 */ , + (char)63629 /* byte 217 */ , + (char)63630 /* byte 218 */ , + (char)63631 /* byte 219 */ , + (char)63632 /* byte 220 */ , + (char)63633 /* byte 221 */ , + (char)63634 /* byte 222 */ , + (char)63635 /* byte 223 */ , + (char)1488 /* byte 224 */ , + (char)1489 /* byte 225 */ , + (char)1490 /* byte 226 */ , + (char)1491 /* byte 227 */ , + (char)1492 /* byte 228 */ , + (char)1493 /* byte 229 */ , + (char)1494 /* byte 230 */ , + (char)1495 /* byte 231 */ , + (char)1496 /* byte 232 */ , + (char)1497 /* byte 233 */ , + (char)1498 /* byte 234 */ , + (char)1499 /* byte 235 */ , + (char)1500 /* byte 236 */ , + (char)1501 /* byte 237 */ , + (char)1502 /* byte 238 */ , + (char)1503 /* byte 239 */ , + (char)1504 /* byte 240 */ , + (char)1505 /* byte 241 */ , + (char)1506 /* byte 242 */ , + (char)1507 /* byte 243 */ , + (char)1508 /* byte 244 */ , + (char)1509 /* byte 245 */ , + (char)1510 /* byte 246 */ , + (char)1511 /* byte 247 */ , + (char)1512 /* byte 248 */ , + (char)1513 /* byte 249 */ , + (char)1514 /* byte 250 */ , + (char)63636 /* byte 251 */ , + (char)63637 /* byte 252 */ , + (char)8206 /* byte 253 */ , + (char)8207 /* byte 254 */ , + (char)63638 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)710, 136 }, + { (char)8240, 137 }, + { (char)138, 138 }, + { (char)8249, 139 }, + { (char)140, 140 }, + { (char)141, 141 }, + { (char)142, 142 }, + { (char)143, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)732, 152 }, + { (char)8482, 153 }, + { (char)154, 154 }, + { (char)8250, 155 }, + { (char)156, 156 }, + { (char)157, 157 }, + { (char)158, 158 }, + { (char)159, 159 }, + { (char)160, 160 }, + { (char)161, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)8362, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)215, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)175, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)184, 184 }, + { (char)185, 185 }, + { (char)247, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)191, 191 }, + { (char)1456, 192 }, + { (char)1457, 193 }, + { (char)1458, 194 }, + { (char)1459, 195 }, + { (char)1460, 196 }, + { (char)1461, 197 }, + { (char)1462, 198 }, + { (char)1463, 199 }, + { (char)1464, 200 }, + { (char)1465, 201 }, + { (char)1466, 202 }, + { (char)1467, 203 }, + { (char)1468, 204 }, + { (char)1469, 205 }, + { (char)1470, 206 }, + { (char)1471, 207 }, + { (char)1472, 208 }, + { (char)1473, 209 }, + { (char)1474, 210 }, + { (char)1475, 211 }, + { (char)1520, 212 }, + { (char)1521, 213 }, + { (char)1522, 214 }, + { (char)1523, 215 }, + { (char)1524, 216 }, + { (char)63629, 217 }, + { (char)63630, 218 }, + { (char)63631, 219 }, + { (char)63632, 220 }, + { (char)63633, 221 }, + { (char)63634, 222 }, + { (char)63635, 223 }, + { (char)1488, 224 }, + { (char)1489, 225 }, + { (char)1490, 226 }, + { (char)1491, 227 }, + { (char)1492, 228 }, + { (char)1493, 229 }, + { (char)1494, 230 }, + { (char)1495, 231 }, + { (char)1496, 232 }, + { (char)1497, 233 }, + { (char)1498, 234 }, + { (char)1499, 235 }, + { (char)1500, 236 }, + { (char)1501, 237 }, + { (char)1502, 238 }, + { (char)1503, 239 }, + { (char)1504, 240 }, + { (char)1505, 241 }, + { (char)1506, 242 }, + { (char)1507, 243 }, + { (char)1508, 244 }, + { (char)1509, 245 }, + { (char)1510, 246 }, + { (char)1511, 247 }, + { (char)1512, 248 }, + { (char)1513, 249 }, + { (char)1514, 250 }, + { (char)63636, 251 }, + { (char)63637, 252 }, + { (char)8206, 253 }, + { (char)8207, 254 }, + { (char)63638, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1256.cs b/ReadSharp/Encodings/Windows1256.cs new file mode 100644 index 0000000..26736c6 --- /dev/null +++ b/ReadSharp/Encodings/Windows1256.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Arabic (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1256 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1256"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1256() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)1662 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)710 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)1657 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)338 /* byte 140 */ , + (char)1670 /* byte 141 */ , + (char)1688 /* byte 142 */ , + (char)1672 /* byte 143 */ , + (char)1711 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)1705 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)1681 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)339 /* byte 156 */ , + (char)8204 /* byte 157 */ , + (char)8205 /* byte 158 */ , + (char)1722 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)1548 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)1726 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)175 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)184 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)1563 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)1567 /* byte 191 */ , + (char)1729 /* byte 192 */ , + (char)1569 /* byte 193 */ , + (char)1570 /* byte 194 */ , + (char)1571 /* byte 195 */ , + (char)1572 /* byte 196 */ , + (char)1573 /* byte 197 */ , + (char)1574 /* byte 198 */ , + (char)1575 /* byte 199 */ , + (char)1576 /* byte 200 */ , + (char)1577 /* byte 201 */ , + (char)1578 /* byte 202 */ , + (char)1579 /* byte 203 */ , + (char)1580 /* byte 204 */ , + (char)1581 /* byte 205 */ , + (char)1582 /* byte 206 */ , + (char)1583 /* byte 207 */ , + (char)1584 /* byte 208 */ , + (char)1585 /* byte 209 */ , + (char)1586 /* byte 210 */ , + (char)1587 /* byte 211 */ , + (char)1588 /* byte 212 */ , + (char)1589 /* byte 213 */ , + (char)1590 /* byte 214 */ , + (char)215 /* byte 215 */ , + (char)1591 /* byte 216 */ , + (char)1592 /* byte 217 */ , + (char)1593 /* byte 218 */ , + (char)1594 /* byte 219 */ , + (char)1600 /* byte 220 */ , + (char)1601 /* byte 221 */ , + (char)1602 /* byte 222 */ , + (char)1603 /* byte 223 */ , + (char)224 /* byte 224 */ , + (char)1604 /* byte 225 */ , + (char)226 /* byte 226 */ , + (char)1605 /* byte 227 */ , + (char)1606 /* byte 228 */ , + (char)1607 /* byte 229 */ , + (char)1608 /* byte 230 */ , + (char)231 /* byte 231 */ , + (char)232 /* byte 232 */ , + (char)233 /* byte 233 */ , + (char)234 /* byte 234 */ , + (char)235 /* byte 235 */ , + (char)1609 /* byte 236 */ , + (char)1610 /* byte 237 */ , + (char)238 /* byte 238 */ , + (char)239 /* byte 239 */ , + (char)1611 /* byte 240 */ , + (char)1612 /* byte 241 */ , + (char)1613 /* byte 242 */ , + (char)1614 /* byte 243 */ , + (char)244 /* byte 244 */ , + (char)1615 /* byte 245 */ , + (char)1616 /* byte 246 */ , + (char)247 /* byte 247 */ , + (char)1617 /* byte 248 */ , + (char)249 /* byte 249 */ , + (char)1618 /* byte 250 */ , + (char)251 /* byte 251 */ , + (char)252 /* byte 252 */ , + (char)8206 /* byte 253 */ , + (char)8207 /* byte 254 */ , + (char)1746 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)1662, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)710, 136 }, + { (char)8240, 137 }, + { (char)1657, 138 }, + { (char)8249, 139 }, + { (char)338, 140 }, + { (char)1670, 141 }, + { (char)1688, 142 }, + { (char)1672, 143 }, + { (char)1711, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)1705, 152 }, + { (char)8482, 153 }, + { (char)1681, 154 }, + { (char)8250, 155 }, + { (char)339, 156 }, + { (char)8204, 157 }, + { (char)8205, 158 }, + { (char)1722, 159 }, + { (char)160, 160 }, + { (char)1548, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)1726, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)175, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)184, 184 }, + { (char)185, 185 }, + { (char)1563, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)1567, 191 }, + { (char)1729, 192 }, + { (char)1569, 193 }, + { (char)1570, 194 }, + { (char)1571, 195 }, + { (char)1572, 196 }, + { (char)1573, 197 }, + { (char)1574, 198 }, + { (char)1575, 199 }, + { (char)1576, 200 }, + { (char)1577, 201 }, + { (char)1578, 202 }, + { (char)1579, 203 }, + { (char)1580, 204 }, + { (char)1581, 205 }, + { (char)1582, 206 }, + { (char)1583, 207 }, + { (char)1584, 208 }, + { (char)1585, 209 }, + { (char)1586, 210 }, + { (char)1587, 211 }, + { (char)1588, 212 }, + { (char)1589, 213 }, + { (char)1590, 214 }, + { (char)215, 215 }, + { (char)1591, 216 }, + { (char)1592, 217 }, + { (char)1593, 218 }, + { (char)1594, 219 }, + { (char)1600, 220 }, + { (char)1601, 221 }, + { (char)1602, 222 }, + { (char)1603, 223 }, + { (char)224, 224 }, + { (char)1604, 225 }, + { (char)226, 226 }, + { (char)1605, 227 }, + { (char)1606, 228 }, + { (char)1607, 229 }, + { (char)1608, 230 }, + { (char)231, 231 }, + { (char)232, 232 }, + { (char)233, 233 }, + { (char)234, 234 }, + { (char)235, 235 }, + { (char)1609, 236 }, + { (char)1610, 237 }, + { (char)238, 238 }, + { (char)239, 239 }, + { (char)1611, 240 }, + { (char)1612, 241 }, + { (char)1613, 242 }, + { (char)1614, 243 }, + { (char)244, 244 }, + { (char)1615, 245 }, + { (char)1616, 246 }, + { (char)247, 247 }, + { (char)1617, 248 }, + { (char)249, 249 }, + { (char)1618, 250 }, + { (char)251, 251 }, + { (char)252, 252 }, + { (char)8206, 253 }, + { (char)8207, 254 }, + { (char)1746, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1257.cs b/ReadSharp/Encodings/Windows1257.cs new file mode 100644 index 0000000..3419be8 --- /dev/null +++ b/ReadSharp/Encodings/Windows1257.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Baltic (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1257 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1257"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1257() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)131 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)136 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)138 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)140 /* byte 140 */ , + (char)168 /* byte 141 */ , + (char)711 /* byte 142 */ , + (char)184 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)152 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)154 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)156 /* byte 156 */ , + (char)175 /* byte 157 */ , + (char)731 /* byte 158 */ , + (char)159 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)63740 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)63741 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)216 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)342 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)198 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)248 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)343 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)230 /* byte 191 */ , + (char)260 /* byte 192 */ , + (char)302 /* byte 193 */ , + (char)256 /* byte 194 */ , + (char)262 /* byte 195 */ , + (char)196 /* byte 196 */ , + (char)197 /* byte 197 */ , + (char)280 /* byte 198 */ , + (char)274 /* byte 199 */ , + (char)268 /* byte 200 */ , + (char)201 /* byte 201 */ , + (char)377 /* byte 202 */ , + (char)278 /* byte 203 */ , + (char)290 /* byte 204 */ , + (char)310 /* byte 205 */ , + (char)298 /* byte 206 */ , + (char)315 /* byte 207 */ , + (char)352 /* byte 208 */ , + (char)323 /* byte 209 */ , + (char)325 /* byte 210 */ , + (char)211 /* byte 211 */ , + (char)332 /* byte 212 */ , + (char)213 /* byte 213 */ , + (char)214 /* byte 214 */ , + (char)215 /* byte 215 */ , + (char)370 /* byte 216 */ , + (char)321 /* byte 217 */ , + (char)346 /* byte 218 */ , + (char)362 /* byte 219 */ , + (char)220 /* byte 220 */ , + (char)379 /* byte 221 */ , + (char)381 /* byte 222 */ , + (char)223 /* byte 223 */ , + (char)261 /* byte 224 */ , + (char)303 /* byte 225 */ , + (char)257 /* byte 226 */ , + (char)263 /* byte 227 */ , + (char)228 /* byte 228 */ , + (char)229 /* byte 229 */ , + (char)281 /* byte 230 */ , + (char)275 /* byte 231 */ , + (char)269 /* byte 232 */ , + (char)233 /* byte 233 */ , + (char)378 /* byte 234 */ , + (char)279 /* byte 235 */ , + (char)291 /* byte 236 */ , + (char)311 /* byte 237 */ , + (char)299 /* byte 238 */ , + (char)316 /* byte 239 */ , + (char)353 /* byte 240 */ , + (char)324 /* byte 241 */ , + (char)326 /* byte 242 */ , + (char)243 /* byte 243 */ , + (char)333 /* byte 244 */ , + (char)245 /* byte 245 */ , + (char)246 /* byte 246 */ , + (char)247 /* byte 247 */ , + (char)371 /* byte 248 */ , + (char)322 /* byte 249 */ , + (char)347 /* byte 250 */ , + (char)363 /* byte 251 */ , + (char)252 /* byte 252 */ , + (char)380 /* byte 253 */ , + (char)382 /* byte 254 */ , + (char)729 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)131, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)136, 136 }, + { (char)8240, 137 }, + { (char)138, 138 }, + { (char)8249, 139 }, + { (char)140, 140 }, + { (char)168, 141 }, + { (char)711, 142 }, + { (char)184, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)152, 152 }, + { (char)8482, 153 }, + { (char)154, 154 }, + { (char)8250, 155 }, + { (char)156, 156 }, + { (char)175, 157 }, + { (char)731, 158 }, + { (char)159, 159 }, + { (char)160, 160 }, + { (char)63740, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)63741, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)216, 168 }, + { (char)169, 169 }, + { (char)342, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)198, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)248, 184 }, + { (char)185, 185 }, + { (char)343, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)230, 191 }, + { (char)260, 192 }, + { (char)302, 193 }, + { (char)256, 194 }, + { (char)262, 195 }, + { (char)196, 196 }, + { (char)197, 197 }, + { (char)280, 198 }, + { (char)274, 199 }, + { (char)268, 200 }, + { (char)201, 201 }, + { (char)377, 202 }, + { (char)278, 203 }, + { (char)290, 204 }, + { (char)310, 205 }, + { (char)298, 206 }, + { (char)315, 207 }, + { (char)352, 208 }, + { (char)323, 209 }, + { (char)325, 210 }, + { (char)211, 211 }, + { (char)332, 212 }, + { (char)213, 213 }, + { (char)214, 214 }, + { (char)215, 215 }, + { (char)370, 216 }, + { (char)321, 217 }, + { (char)346, 218 }, + { (char)362, 219 }, + { (char)220, 220 }, + { (char)379, 221 }, + { (char)381, 222 }, + { (char)223, 223 }, + { (char)261, 224 }, + { (char)303, 225 }, + { (char)257, 226 }, + { (char)263, 227 }, + { (char)228, 228 }, + { (char)229, 229 }, + { (char)281, 230 }, + { (char)275, 231 }, + { (char)269, 232 }, + { (char)233, 233 }, + { (char)378, 234 }, + { (char)279, 235 }, + { (char)291, 236 }, + { (char)311, 237 }, + { (char)299, 238 }, + { (char)316, 239 }, + { (char)353, 240 }, + { (char)324, 241 }, + { (char)326, 242 }, + { (char)243, 243 }, + { (char)333, 244 }, + { (char)245, 245 }, + { (char)246, 246 }, + { (char)247, 247 }, + { (char)371, 248 }, + { (char)322, 249 }, + { (char)347, 250 }, + { (char)363, 251 }, + { (char)252, 252 }, + { (char)380, 253 }, + { (char)382, 254 }, + { (char)729, 255 } + }; + + #endregion + } +} diff --git a/ReadSharp/Encodings/Windows1258.cs b/ReadSharp/Encodings/Windows1258.cs new file mode 100644 index 0000000..4039a0e --- /dev/null +++ b/ReadSharp/Encodings/Windows1258.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ReadSharp.Encodings +{ + /// + /// A custom encoding class that provides encoding capabilities for the + /// 'Vietnamese (Windows)' encoding under Silverlight.
+ /// This class was generated by a tool. For more information, visit + /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator + ///
+ public class Windows1258 : Encoding + { + /// + /// Gets the name registered with the + /// Internet Assigned Numbers Authority (IANA) for the current encoding. + /// + /// + /// The IANA name for the current . + /// + public override string WebName + { + get + { + return "windows-1258"; + } + } + + + private char? fallbackCharacter; + + /// + /// A character that can be set in order to make the encoding class + /// more fault tolerant. If this property is set, the encoding class will + /// use this property instead of throwing an exception if an unsupported + /// byte value is being passed for decoding. + /// + public char? FallbackCharacter + { + get { return fallbackCharacter; } + set + { + fallbackCharacter = value; + + if (value.HasValue && !charToByte.ContainsKey(value.Value)) + { + string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + + "- the fallback character itself is not supported by the encoding."; + msg = String.Format(msg, value.Value, (int)value.Value); + throw new EncoderFallbackException(msg); + } + + FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; + } + } + + /// + /// A byte value that corresponds to the . + /// It is used in encoding scenarios in case an unsupported character is + /// being passed for encoding. + /// + public byte? FallbackByte { get; private set; } + + + public Windows1258() + { + FallbackCharacter = '?'; + } + + /// + /// Encodes a set of characters from the specified character array into the specified byte array. + /// + /// + /// The actual number of bytes written into . + /// + /// The character array containing the set of characters to encode. + /// The index of the first character to encode. + /// The number of characters to encode. + /// The byte array to contain the resulting sequence of bytes. + /// The index at which to start writing the resulting sequence of bytes. + /// + public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + return FallbackByte.HasValue + ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) + : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); + } + + + private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; + } + + return charCount; + } + + private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) + { + for (int i = 0; i < charCount; i++) + { + var character = chars[i + charIndex]; + byte byteValue; + bool status = charToByte.TryGetValue(character, out byteValue); + + if (!status) + { + //throw exception + string msg = + "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; + msg = String.Format(msg, WebName, character, (int)character); + throw new EncoderFallbackException(msg); + } + + bytes[byteIndex + i] = byteValue; + } + + return charCount; + } + + + + /// + /// Decodes a sequence of bytes from the specified byte array into the specified character array. + /// + /// + /// The actual number of characters written into . + /// + /// The byte array containing the sequence of bytes to decode. + /// The index of the first byte to decode. + /// The number of bytes to decode. + /// The character array to contain the resulting set of characters. + /// The index at which to start writing the resulting set of characters. + /// + public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + return FallbackCharacter.HasValue + ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) + : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); + } + + + private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + + //if the byte value is not in our lookup array, fall back to default character + char result = lookupIndex >= byteToChar.Length + ? FallbackCharacter.Value + : byteToChar[lookupIndex]; + + chars[charIndex + i] = result; + } + + return byteCount; + } + + + + private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) + { + for (int i = 0; i < byteCount; i++) + { + byte lookupIndex = bytes[i + byteIndex]; + if (lookupIndex >= byteToChar.Length) + { + //throw exception + string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; + msg = String.Format(msg, WebName, lookupIndex); + throw new EncoderFallbackException(msg); + } + + + chars[charIndex + i] = byteToChar[lookupIndex]; + } + + return byteCount; + } + + + + /// + /// Calculates the number of bytes produced by encoding a set of characters + /// from the specified character array. + /// + /// + /// The number of bytes produced by encoding the specified characters. This class + /// alwas returns the value of . + /// + public override int GetByteCount(char[] chars, int index, int count) + { + return count; + } + + + /// + /// Calculates the number of characters produced by decoding a sequence + /// of bytes from the specified byte array. + /// + /// + /// The number of characters produced by decoding the specified sequence of bytes. This class + /// alwas returns the value of . + /// + public override int GetCharCount(byte[] bytes, int index, int count) + { + return count; + } + + + /// + /// Calculates the maximum number of bytes produced by encoding the specified number of characters. + /// + /// + /// The maximum number of bytes produced by encoding the specified number of characters. This + /// class alwas returns the value of . + /// + /// The number of characters to encode. + /// + public override int GetMaxByteCount(int charCount) + { + return charCount; + } + + /// + /// Calculates the maximum number of characters produced by decoding the specified number of bytes. + /// + /// + /// The maximum number of characters produced by decoding the specified number of bytes. This class + /// alwas returns the value of . + /// + /// The number of bytes to decode. + public override int GetMaxCharCount(int byteCount) + { + return byteCount; + } + + + /// + /// Gets the number of characters that are supported by this encoding. + /// This property returns a maximum value of 256, as the encoding class + /// only supports single byte encodings (1 byte == 256 possible values). + /// + public static int CharacterCount + { + get { return byteToChar.Length; } + } + + + #region Character Table + + /// + /// This table contains characters in an array. The index within the + /// array corresponds to the encoding's mapping of bytes to characters + /// (e.g. if a byte value of 5 is used to encode the character 'x', this + /// character will be stored at the array index 5. + /// + private static char[] byteToChar = new char[] + { + (char)0 /* byte 0 */ , + (char)1 /* byte 1 */ , + (char)2 /* byte 2 */ , + (char)3 /* byte 3 */ , + (char)4 /* byte 4 */ , + (char)5 /* byte 5 */ , + (char)6 /* byte 6 */ , + (char)7 /* byte 7 */ , + (char)8 /* byte 8 */ , + (char)9 /* byte 9 */ , + (char)10 /* byte 10 */ , + (char)11 /* byte 11 */ , + (char)12 /* byte 12 */ , + (char)13 /* byte 13 */ , + (char)14 /* byte 14 */ , + (char)15 /* byte 15 */ , + (char)16 /* byte 16 */ , + (char)17 /* byte 17 */ , + (char)18 /* byte 18 */ , + (char)19 /* byte 19 */ , + (char)20 /* byte 20 */ , + (char)21 /* byte 21 */ , + (char)22 /* byte 22 */ , + (char)23 /* byte 23 */ , + (char)24 /* byte 24 */ , + (char)25 /* byte 25 */ , + (char)26 /* byte 26 */ , + (char)27 /* byte 27 */ , + (char)28 /* byte 28 */ , + (char)29 /* byte 29 */ , + (char)30 /* byte 30 */ , + (char)31 /* byte 31 */ , + (char)32 /* byte 32 */ , + (char)33 /* byte 33 */ , + (char)34 /* byte 34 */ , + (char)35 /* byte 35 */ , + (char)36 /* byte 36 */ , + (char)37 /* byte 37 */ , + (char)38 /* byte 38 */ , + (char)39 /* byte 39 */ , + (char)40 /* byte 40 */ , + (char)41 /* byte 41 */ , + (char)42 /* byte 42 */ , + (char)43 /* byte 43 */ , + (char)44 /* byte 44 */ , + (char)45 /* byte 45 */ , + (char)46 /* byte 46 */ , + (char)47 /* byte 47 */ , + (char)48 /* byte 48 */ , + (char)49 /* byte 49 */ , + (char)50 /* byte 50 */ , + (char)51 /* byte 51 */ , + (char)52 /* byte 52 */ , + (char)53 /* byte 53 */ , + (char)54 /* byte 54 */ , + (char)55 /* byte 55 */ , + (char)56 /* byte 56 */ , + (char)57 /* byte 57 */ , + (char)58 /* byte 58 */ , + (char)59 /* byte 59 */ , + (char)60 /* byte 60 */ , + (char)61 /* byte 61 */ , + (char)62 /* byte 62 */ , + (char)63 /* byte 63 */ , + (char)64 /* byte 64 */ , + (char)65 /* byte 65 */ , + (char)66 /* byte 66 */ , + (char)67 /* byte 67 */ , + (char)68 /* byte 68 */ , + (char)69 /* byte 69 */ , + (char)70 /* byte 70 */ , + (char)71 /* byte 71 */ , + (char)72 /* byte 72 */ , + (char)73 /* byte 73 */ , + (char)74 /* byte 74 */ , + (char)75 /* byte 75 */ , + (char)76 /* byte 76 */ , + (char)77 /* byte 77 */ , + (char)78 /* byte 78 */ , + (char)79 /* byte 79 */ , + (char)80 /* byte 80 */ , + (char)81 /* byte 81 */ , + (char)82 /* byte 82 */ , + (char)83 /* byte 83 */ , + (char)84 /* byte 84 */ , + (char)85 /* byte 85 */ , + (char)86 /* byte 86 */ , + (char)87 /* byte 87 */ , + (char)88 /* byte 88 */ , + (char)89 /* byte 89 */ , + (char)90 /* byte 90 */ , + (char)91 /* byte 91 */ , + (char)92 /* byte 92 */ , + (char)93 /* byte 93 */ , + (char)94 /* byte 94 */ , + (char)95 /* byte 95 */ , + (char)96 /* byte 96 */ , + (char)97 /* byte 97 */ , + (char)98 /* byte 98 */ , + (char)99 /* byte 99 */ , + (char)100 /* byte 100 */ , + (char)101 /* byte 101 */ , + (char)102 /* byte 102 */ , + (char)103 /* byte 103 */ , + (char)104 /* byte 104 */ , + (char)105 /* byte 105 */ , + (char)106 /* byte 106 */ , + (char)107 /* byte 107 */ , + (char)108 /* byte 108 */ , + (char)109 /* byte 109 */ , + (char)110 /* byte 110 */ , + (char)111 /* byte 111 */ , + (char)112 /* byte 112 */ , + (char)113 /* byte 113 */ , + (char)114 /* byte 114 */ , + (char)115 /* byte 115 */ , + (char)116 /* byte 116 */ , + (char)117 /* byte 117 */ , + (char)118 /* byte 118 */ , + (char)119 /* byte 119 */ , + (char)120 /* byte 120 */ , + (char)121 /* byte 121 */ , + (char)122 /* byte 122 */ , + (char)123 /* byte 123 */ , + (char)124 /* byte 124 */ , + (char)125 /* byte 125 */ , + (char)126 /* byte 126 */ , + (char)127 /* byte 127 */ , + (char)8364 /* byte 128 */ , + (char)129 /* byte 129 */ , + (char)8218 /* byte 130 */ , + (char)402 /* byte 131 */ , + (char)8222 /* byte 132 */ , + (char)8230 /* byte 133 */ , + (char)8224 /* byte 134 */ , + (char)8225 /* byte 135 */ , + (char)710 /* byte 136 */ , + (char)8240 /* byte 137 */ , + (char)138 /* byte 138 */ , + (char)8249 /* byte 139 */ , + (char)338 /* byte 140 */ , + (char)141 /* byte 141 */ , + (char)142 /* byte 142 */ , + (char)143 /* byte 143 */ , + (char)144 /* byte 144 */ , + (char)8216 /* byte 145 */ , + (char)8217 /* byte 146 */ , + (char)8220 /* byte 147 */ , + (char)8221 /* byte 148 */ , + (char)8226 /* byte 149 */ , + (char)8211 /* byte 150 */ , + (char)8212 /* byte 151 */ , + (char)732 /* byte 152 */ , + (char)8482 /* byte 153 */ , + (char)154 /* byte 154 */ , + (char)8250 /* byte 155 */ , + (char)339 /* byte 156 */ , + (char)157 /* byte 157 */ , + (char)158 /* byte 158 */ , + (char)376 /* byte 159 */ , + (char)160 /* byte 160 */ , + (char)161 /* byte 161 */ , + (char)162 /* byte 162 */ , + (char)163 /* byte 163 */ , + (char)164 /* byte 164 */ , + (char)165 /* byte 165 */ , + (char)166 /* byte 166 */ , + (char)167 /* byte 167 */ , + (char)168 /* byte 168 */ , + (char)169 /* byte 169 */ , + (char)170 /* byte 170 */ , + (char)171 /* byte 171 */ , + (char)172 /* byte 172 */ , + (char)173 /* byte 173 */ , + (char)174 /* byte 174 */ , + (char)175 /* byte 175 */ , + (char)176 /* byte 176 */ , + (char)177 /* byte 177 */ , + (char)178 /* byte 178 */ , + (char)179 /* byte 179 */ , + (char)180 /* byte 180 */ , + (char)181 /* byte 181 */ , + (char)182 /* byte 182 */ , + (char)183 /* byte 183 */ , + (char)184 /* byte 184 */ , + (char)185 /* byte 185 */ , + (char)186 /* byte 186 */ , + (char)187 /* byte 187 */ , + (char)188 /* byte 188 */ , + (char)189 /* byte 189 */ , + (char)190 /* byte 190 */ , + (char)191 /* byte 191 */ , + (char)192 /* byte 192 */ , + (char)193 /* byte 193 */ , + (char)194 /* byte 194 */ , + (char)258 /* byte 195 */ , + (char)196 /* byte 196 */ , + (char)197 /* byte 197 */ , + (char)198 /* byte 198 */ , + (char)199 /* byte 199 */ , + (char)200 /* byte 200 */ , + (char)201 /* byte 201 */ , + (char)202 /* byte 202 */ , + (char)203 /* byte 203 */ , + (char)768 /* byte 204 */ , + (char)205 /* byte 205 */ , + (char)206 /* byte 206 */ , + (char)207 /* byte 207 */ , + (char)272 /* byte 208 */ , + (char)209 /* byte 209 */ , + (char)777 /* byte 210 */ , + (char)211 /* byte 211 */ , + (char)212 /* byte 212 */ , + (char)416 /* byte 213 */ , + (char)214 /* byte 214 */ , + (char)215 /* byte 215 */ , + (char)216 /* byte 216 */ , + (char)217 /* byte 217 */ , + (char)218 /* byte 218 */ , + (char)219 /* byte 219 */ , + (char)220 /* byte 220 */ , + (char)431 /* byte 221 */ , + (char)771 /* byte 222 */ , + (char)223 /* byte 223 */ , + (char)224 /* byte 224 */ , + (char)225 /* byte 225 */ , + (char)226 /* byte 226 */ , + (char)259 /* byte 227 */ , + (char)228 /* byte 228 */ , + (char)229 /* byte 229 */ , + (char)230 /* byte 230 */ , + (char)231 /* byte 231 */ , + (char)232 /* byte 232 */ , + (char)233 /* byte 233 */ , + (char)234 /* byte 234 */ , + (char)235 /* byte 235 */ , + (char)769 /* byte 236 */ , + (char)237 /* byte 237 */ , + (char)238 /* byte 238 */ , + (char)239 /* byte 239 */ , + (char)273 /* byte 240 */ , + (char)241 /* byte 241 */ , + (char)803 /* byte 242 */ , + (char)243 /* byte 243 */ , + (char)244 /* byte 244 */ , + (char)417 /* byte 245 */ , + (char)246 /* byte 246 */ , + (char)247 /* byte 247 */ , + (char)248 /* byte 248 */ , + (char)249 /* byte 249 */ , + (char)250 /* byte 250 */ , + (char)251 /* byte 251 */ , + (char)252 /* byte 252 */ , + (char)432 /* byte 253 */ , + (char)8363 /* byte 254 */ , + (char)255 /* byte 255 */ + }; + + #endregion + + + #region Byte Lookup Dictionary + + /// + /// This dictionary is used to resolve byte values for a given character. + /// + private static Dictionary charToByte = new Dictionary + { + { (char)0, 0 }, + { (char)1, 1 }, + { (char)2, 2 }, + { (char)3, 3 }, + { (char)4, 4 }, + { (char)5, 5 }, + { (char)6, 6 }, + { (char)7, 7 }, + { (char)8, 8 }, + { (char)9, 9 }, + { (char)10, 10 }, + { (char)11, 11 }, + { (char)12, 12 }, + { (char)13, 13 }, + { (char)14, 14 }, + { (char)15, 15 }, + { (char)16, 16 }, + { (char)17, 17 }, + { (char)18, 18 }, + { (char)19, 19 }, + { (char)20, 20 }, + { (char)21, 21 }, + { (char)22, 22 }, + { (char)23, 23 }, + { (char)24, 24 }, + { (char)25, 25 }, + { (char)26, 26 }, + { (char)27, 27 }, + { (char)28, 28 }, + { (char)29, 29 }, + { (char)30, 30 }, + { (char)31, 31 }, + { (char)32, 32 }, + { (char)33, 33 }, + { (char)34, 34 }, + { (char)35, 35 }, + { (char)36, 36 }, + { (char)37, 37 }, + { (char)38, 38 }, + { (char)39, 39 }, + { (char)40, 40 }, + { (char)41, 41 }, + { (char)42, 42 }, + { (char)43, 43 }, + { (char)44, 44 }, + { (char)45, 45 }, + { (char)46, 46 }, + { (char)47, 47 }, + { (char)48, 48 }, + { (char)49, 49 }, + { (char)50, 50 }, + { (char)51, 51 }, + { (char)52, 52 }, + { (char)53, 53 }, + { (char)54, 54 }, + { (char)55, 55 }, + { (char)56, 56 }, + { (char)57, 57 }, + { (char)58, 58 }, + { (char)59, 59 }, + { (char)60, 60 }, + { (char)61, 61 }, + { (char)62, 62 }, + { (char)63, 63 }, + { (char)64, 64 }, + { (char)65, 65 }, + { (char)66, 66 }, + { (char)67, 67 }, + { (char)68, 68 }, + { (char)69, 69 }, + { (char)70, 70 }, + { (char)71, 71 }, + { (char)72, 72 }, + { (char)73, 73 }, + { (char)74, 74 }, + { (char)75, 75 }, + { (char)76, 76 }, + { (char)77, 77 }, + { (char)78, 78 }, + { (char)79, 79 }, + { (char)80, 80 }, + { (char)81, 81 }, + { (char)82, 82 }, + { (char)83, 83 }, + { (char)84, 84 }, + { (char)85, 85 }, + { (char)86, 86 }, + { (char)87, 87 }, + { (char)88, 88 }, + { (char)89, 89 }, + { (char)90, 90 }, + { (char)91, 91 }, + { (char)92, 92 }, + { (char)93, 93 }, + { (char)94, 94 }, + { (char)95, 95 }, + { (char)96, 96 }, + { (char)97, 97 }, + { (char)98, 98 }, + { (char)99, 99 }, + { (char)100, 100 }, + { (char)101, 101 }, + { (char)102, 102 }, + { (char)103, 103 }, + { (char)104, 104 }, + { (char)105, 105 }, + { (char)106, 106 }, + { (char)107, 107 }, + { (char)108, 108 }, + { (char)109, 109 }, + { (char)110, 110 }, + { (char)111, 111 }, + { (char)112, 112 }, + { (char)113, 113 }, + { (char)114, 114 }, + { (char)115, 115 }, + { (char)116, 116 }, + { (char)117, 117 }, + { (char)118, 118 }, + { (char)119, 119 }, + { (char)120, 120 }, + { (char)121, 121 }, + { (char)122, 122 }, + { (char)123, 123 }, + { (char)124, 124 }, + { (char)125, 125 }, + { (char)126, 126 }, + { (char)127, 127 }, + { (char)8364, 128 }, + { (char)129, 129 }, + { (char)8218, 130 }, + { (char)402, 131 }, + { (char)8222, 132 }, + { (char)8230, 133 }, + { (char)8224, 134 }, + { (char)8225, 135 }, + { (char)710, 136 }, + { (char)8240, 137 }, + { (char)138, 138 }, + { (char)8249, 139 }, + { (char)338, 140 }, + { (char)141, 141 }, + { (char)142, 142 }, + { (char)143, 143 }, + { (char)144, 144 }, + { (char)8216, 145 }, + { (char)8217, 146 }, + { (char)8220, 147 }, + { (char)8221, 148 }, + { (char)8226, 149 }, + { (char)8211, 150 }, + { (char)8212, 151 }, + { (char)732, 152 }, + { (char)8482, 153 }, + { (char)154, 154 }, + { (char)8250, 155 }, + { (char)339, 156 }, + { (char)157, 157 }, + { (char)158, 158 }, + { (char)376, 159 }, + { (char)160, 160 }, + { (char)161, 161 }, + { (char)162, 162 }, + { (char)163, 163 }, + { (char)164, 164 }, + { (char)165, 165 }, + { (char)166, 166 }, + { (char)167, 167 }, + { (char)168, 168 }, + { (char)169, 169 }, + { (char)170, 170 }, + { (char)171, 171 }, + { (char)172, 172 }, + { (char)173, 173 }, + { (char)174, 174 }, + { (char)175, 175 }, + { (char)176, 176 }, + { (char)177, 177 }, + { (char)178, 178 }, + { (char)179, 179 }, + { (char)180, 180 }, + { (char)181, 181 }, + { (char)182, 182 }, + { (char)183, 183 }, + { (char)184, 184 }, + { (char)185, 185 }, + { (char)186, 186 }, + { (char)187, 187 }, + { (char)188, 188 }, + { (char)189, 189 }, + { (char)190, 190 }, + { (char)191, 191 }, + { (char)192, 192 }, + { (char)193, 193 }, + { (char)194, 194 }, + { (char)258, 195 }, + { (char)196, 196 }, + { (char)197, 197 }, + { (char)198, 198 }, + { (char)199, 199 }, + { (char)200, 200 }, + { (char)201, 201 }, + { (char)202, 202 }, + { (char)203, 203 }, + { (char)768, 204 }, + { (char)205, 205 }, + { (char)206, 206 }, + { (char)207, 207 }, + { (char)272, 208 }, + { (char)209, 209 }, + { (char)777, 210 }, + { (char)211, 211 }, + { (char)212, 212 }, + { (char)416, 213 }, + { (char)214, 214 }, + { (char)215, 215 }, + { (char)216, 216 }, + { (char)217, 217 }, + { (char)218, 218 }, + { (char)219, 219 }, + { (char)220, 220 }, + { (char)431, 221 }, + { (char)771, 222 }, + { (char)223, 223 }, + { (char)224, 224 }, + { (char)225, 225 }, + { (char)226, 226 }, + { (char)259, 227 }, + { (char)228, 228 }, + { (char)229, 229 }, + { (char)230, 230 }, + { (char)231, 231 }, + { (char)232, 232 }, + { (char)233, 233 }, + { (char)234, 234 }, + { (char)235, 235 }, + { (char)769, 236 }, + { (char)237, 237 }, + { (char)238, 238 }, + { (char)239, 239 }, + { (char)273, 240 }, + { (char)241, 241 }, + { (char)803, 242 }, + { (char)243, 243 }, + { (char)244, 244 }, + { (char)417, 245 }, + { (char)246, 246 }, + { (char)247, 247 }, + { (char)248, 248 }, + { (char)249, 249 }, + { (char)250, 250 }, + { (char)251, 251 }, + { (char)252, 252 }, + { (char)432, 253 }, + { (char)8363, 254 }, + { (char)255, 255 } + }; + + #endregion + } +}