diff --git a/ReadSharp/Encodings/Iso88591.cs b/ReadSharp/Encodings/Iso88591.cs
new file mode 100644
index 0000000..72fd6cd
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88591.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 (ISO)' 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 Iso88591 : 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 "iso-8859-1";
+ }
+ }
+
+
+ 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 Iso88591()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* 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)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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 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)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/Iso885913.cs b/ReadSharp/Encodings/Iso885913.cs
new file mode 100644
index 0000000..cc5f3b0
--- /dev/null
+++ b/ReadSharp/Encodings/Iso885913.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
+ /// 'Estonian (ISO)' 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 Iso885913 : 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 "iso-8859-13";
+ }
+ }
+
+
+ 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 Iso885913()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)8221 /* byte 161 */ ,
+ (char)162 /* byte 162 */ ,
+ (char)163 /* byte 163 */ ,
+ (char)164 /* byte 164 */ ,
+ (char)8222 /* 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)8220 /* 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)8217 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)8221, 161 },
+ { (char)162, 162 },
+ { (char)163, 163 },
+ { (char)164, 164 },
+ { (char)8222, 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)8220, 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)8217, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso885915.cs b/ReadSharp/Encodings/Iso885915.cs
new file mode 100644
index 0000000..0fc4bcf
--- /dev/null
+++ b/ReadSharp/Encodings/Iso885915.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
+ /// 'Latin 9 (ISO)' 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 Iso885915 : 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 "iso-8859-15";
+ }
+ }
+
+
+ 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 Iso885915()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* 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)8364 /* byte 164 */ ,
+ (char)165 /* byte 165 */ ,
+ (char)352 /* byte 166 */ ,
+ (char)167 /* byte 167 */ ,
+ (char)353 /* 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)381 /* byte 180 */ ,
+ (char)181 /* byte 181 */ ,
+ (char)182 /* byte 182 */ ,
+ (char)183 /* byte 183 */ ,
+ (char)382 /* byte 184 */ ,
+ (char)185 /* byte 185 */ ,
+ (char)186 /* byte 186 */ ,
+ (char)187 /* byte 187 */ ,
+ (char)338 /* byte 188 */ ,
+ (char)339 /* byte 189 */ ,
+ (char)376 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 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)8364, 164 },
+ { (char)165, 165 },
+ { (char)352, 166 },
+ { (char)167, 167 },
+ { (char)353, 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)381, 180 },
+ { (char)181, 181 },
+ { (char)182, 182 },
+ { (char)183, 183 },
+ { (char)382, 184 },
+ { (char)185, 185 },
+ { (char)186, 186 },
+ { (char)187, 187 },
+ { (char)338, 188 },
+ { (char)339, 189 },
+ { (char)376, 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/Iso88592.cs b/ReadSharp/Encodings/Iso88592.cs
new file mode 100644
index 0000000..6ee05d2
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88592.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
+ /// 'Central European (ISO)' 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 Iso88592 : 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 "iso-8859-2";
+ }
+ }
+
+
+ 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 Iso88592()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)260 /* byte 161 */ ,
+ (char)728 /* byte 162 */ ,
+ (char)321 /* byte 163 */ ,
+ (char)164 /* byte 164 */ ,
+ (char)317 /* byte 165 */ ,
+ (char)346 /* byte 166 */ ,
+ (char)167 /* byte 167 */ ,
+ (char)168 /* byte 168 */ ,
+ (char)352 /* byte 169 */ ,
+ (char)350 /* byte 170 */ ,
+ (char)356 /* byte 171 */ ,
+ (char)377 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)381 /* byte 174 */ ,
+ (char)379 /* byte 175 */ ,
+ (char)176 /* byte 176 */ ,
+ (char)261 /* byte 177 */ ,
+ (char)731 /* byte 178 */ ,
+ (char)322 /* byte 179 */ ,
+ (char)180 /* byte 180 */ ,
+ (char)318 /* byte 181 */ ,
+ (char)347 /* byte 182 */ ,
+ (char)711 /* byte 183 */ ,
+ (char)184 /* byte 184 */ ,
+ (char)353 /* byte 185 */ ,
+ (char)351 /* byte 186 */ ,
+ (char)357 /* byte 187 */ ,
+ (char)378 /* byte 188 */ ,
+ (char)733 /* byte 189 */ ,
+ (char)382 /* byte 190 */ ,
+ (char)380 /* byte 191 */ ,
+ (char)340 /* byte 192 */ ,
+ (char)193 /* byte 193 */ ,
+ (char)194 /* byte 194 */ ,
+ (char)258 /* byte 195 */ ,
+ (char)196 /* byte 196 */ ,
+ (char)313 /* byte 197 */ ,
+ (char)262 /* byte 198 */ ,
+ (char)199 /* byte 199 */ ,
+ (char)268 /* byte 200 */ ,
+ (char)201 /* byte 201 */ ,
+ (char)280 /* byte 202 */ ,
+ (char)203 /* byte 203 */ ,
+ (char)282 /* byte 204 */ ,
+ (char)205 /* byte 205 */ ,
+ (char)206 /* byte 206 */ ,
+ (char)270 /* byte 207 */ ,
+ (char)272 /* byte 208 */ ,
+ (char)323 /* byte 209 */ ,
+ (char)327 /* byte 210 */ ,
+ (char)211 /* byte 211 */ ,
+ (char)212 /* byte 212 */ ,
+ (char)336 /* byte 213 */ ,
+ (char)214 /* byte 214 */ ,
+ (char)215 /* byte 215 */ ,
+ (char)344 /* byte 216 */ ,
+ (char)366 /* byte 217 */ ,
+ (char)218 /* byte 218 */ ,
+ (char)368 /* byte 219 */ ,
+ (char)220 /* byte 220 */ ,
+ (char)221 /* byte 221 */ ,
+ (char)354 /* byte 222 */ ,
+ (char)223 /* byte 223 */ ,
+ (char)341 /* byte 224 */ ,
+ (char)225 /* byte 225 */ ,
+ (char)226 /* byte 226 */ ,
+ (char)259 /* byte 227 */ ,
+ (char)228 /* byte 228 */ ,
+ (char)314 /* byte 229 */ ,
+ (char)263 /* byte 230 */ ,
+ (char)231 /* byte 231 */ ,
+ (char)269 /* byte 232 */ ,
+ (char)233 /* byte 233 */ ,
+ (char)281 /* byte 234 */ ,
+ (char)235 /* byte 235 */ ,
+ (char)283 /* byte 236 */ ,
+ (char)237 /* byte 237 */ ,
+ (char)238 /* byte 238 */ ,
+ (char)271 /* byte 239 */ ,
+ (char)273 /* byte 240 */ ,
+ (char)324 /* byte 241 */ ,
+ (char)328 /* byte 242 */ ,
+ (char)243 /* byte 243 */ ,
+ (char)244 /* byte 244 */ ,
+ (char)337 /* byte 245 */ ,
+ (char)246 /* byte 246 */ ,
+ (char)247 /* byte 247 */ ,
+ (char)345 /* byte 248 */ ,
+ (char)367 /* byte 249 */ ,
+ (char)250 /* byte 250 */ ,
+ (char)369 /* byte 251 */ ,
+ (char)252 /* byte 252 */ ,
+ (char)253 /* byte 253 */ ,
+ (char)355 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)260, 161 },
+ { (char)728, 162 },
+ { (char)321, 163 },
+ { (char)164, 164 },
+ { (char)317, 165 },
+ { (char)346, 166 },
+ { (char)167, 167 },
+ { (char)168, 168 },
+ { (char)352, 169 },
+ { (char)350, 170 },
+ { (char)356, 171 },
+ { (char)377, 172 },
+ { (char)173, 173 },
+ { (char)381, 174 },
+ { (char)379, 175 },
+ { (char)176, 176 },
+ { (char)261, 177 },
+ { (char)731, 178 },
+ { (char)322, 179 },
+ { (char)180, 180 },
+ { (char)318, 181 },
+ { (char)347, 182 },
+ { (char)711, 183 },
+ { (char)184, 184 },
+ { (char)353, 185 },
+ { (char)351, 186 },
+ { (char)357, 187 },
+ { (char)378, 188 },
+ { (char)733, 189 },
+ { (char)382, 190 },
+ { (char)380, 191 },
+ { (char)340, 192 },
+ { (char)193, 193 },
+ { (char)194, 194 },
+ { (char)258, 195 },
+ { (char)196, 196 },
+ { (char)313, 197 },
+ { (char)262, 198 },
+ { (char)199, 199 },
+ { (char)268, 200 },
+ { (char)201, 201 },
+ { (char)280, 202 },
+ { (char)203, 203 },
+ { (char)282, 204 },
+ { (char)205, 205 },
+ { (char)206, 206 },
+ { (char)270, 207 },
+ { (char)272, 208 },
+ { (char)323, 209 },
+ { (char)327, 210 },
+ { (char)211, 211 },
+ { (char)212, 212 },
+ { (char)336, 213 },
+ { (char)214, 214 },
+ { (char)215, 215 },
+ { (char)344, 216 },
+ { (char)366, 217 },
+ { (char)218, 218 },
+ { (char)368, 219 },
+ { (char)220, 220 },
+ { (char)221, 221 },
+ { (char)354, 222 },
+ { (char)223, 223 },
+ { (char)341, 224 },
+ { (char)225, 225 },
+ { (char)226, 226 },
+ { (char)259, 227 },
+ { (char)228, 228 },
+ { (char)314, 229 },
+ { (char)263, 230 },
+ { (char)231, 231 },
+ { (char)269, 232 },
+ { (char)233, 233 },
+ { (char)281, 234 },
+ { (char)235, 235 },
+ { (char)283, 236 },
+ { (char)237, 237 },
+ { (char)238, 238 },
+ { (char)271, 239 },
+ { (char)273, 240 },
+ { (char)324, 241 },
+ { (char)328, 242 },
+ { (char)243, 243 },
+ { (char)244, 244 },
+ { (char)337, 245 },
+ { (char)246, 246 },
+ { (char)247, 247 },
+ { (char)345, 248 },
+ { (char)367, 249 },
+ { (char)250, 250 },
+ { (char)369, 251 },
+ { (char)252, 252 },
+ { (char)253, 253 },
+ { (char)355, 254 },
+ { (char)729, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88593.cs b/ReadSharp/Encodings/Iso88593.cs
new file mode 100644
index 0000000..8f69cce
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88593.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
+ /// 'Latin 3 (ISO)' 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 Iso88593 : 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 "iso-8859-3";
+ }
+ }
+
+
+ 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 Iso88593()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)294 /* byte 161 */ ,
+ (char)728 /* byte 162 */ ,
+ (char)163 /* byte 163 */ ,
+ (char)164 /* byte 164 */ ,
+ (char)63477 /* byte 165 */ ,
+ (char)292 /* byte 166 */ ,
+ (char)167 /* byte 167 */ ,
+ (char)168 /* byte 168 */ ,
+ (char)304 /* byte 169 */ ,
+ (char)350 /* byte 170 */ ,
+ (char)286 /* byte 171 */ ,
+ (char)308 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)63478 /* byte 174 */ ,
+ (char)379 /* byte 175 */ ,
+ (char)176 /* byte 176 */ ,
+ (char)295 /* byte 177 */ ,
+ (char)178 /* byte 178 */ ,
+ (char)179 /* byte 179 */ ,
+ (char)180 /* byte 180 */ ,
+ (char)181 /* byte 181 */ ,
+ (char)293 /* byte 182 */ ,
+ (char)183 /* byte 183 */ ,
+ (char)184 /* byte 184 */ ,
+ (char)305 /* byte 185 */ ,
+ (char)351 /* byte 186 */ ,
+ (char)287 /* byte 187 */ ,
+ (char)309 /* byte 188 */ ,
+ (char)189 /* byte 189 */ ,
+ (char)63479 /* byte 190 */ ,
+ (char)380 /* byte 191 */ ,
+ (char)192 /* byte 192 */ ,
+ (char)193 /* byte 193 */ ,
+ (char)194 /* byte 194 */ ,
+ (char)63480 /* byte 195 */ ,
+ (char)196 /* byte 196 */ ,
+ (char)266 /* byte 197 */ ,
+ (char)264 /* 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)63481 /* byte 208 */ ,
+ (char)209 /* byte 209 */ ,
+ (char)210 /* byte 210 */ ,
+ (char)211 /* byte 211 */ ,
+ (char)212 /* byte 212 */ ,
+ (char)288 /* byte 213 */ ,
+ (char)214 /* byte 214 */ ,
+ (char)215 /* byte 215 */ ,
+ (char)284 /* byte 216 */ ,
+ (char)217 /* byte 217 */ ,
+ (char)218 /* byte 218 */ ,
+ (char)219 /* byte 219 */ ,
+ (char)220 /* byte 220 */ ,
+ (char)364 /* byte 221 */ ,
+ (char)348 /* byte 222 */ ,
+ (char)223 /* byte 223 */ ,
+ (char)224 /* byte 224 */ ,
+ (char)225 /* byte 225 */ ,
+ (char)226 /* byte 226 */ ,
+ (char)63482 /* byte 227 */ ,
+ (char)228 /* byte 228 */ ,
+ (char)267 /* byte 229 */ ,
+ (char)265 /* 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)63483 /* byte 240 */ ,
+ (char)241 /* byte 241 */ ,
+ (char)242 /* byte 242 */ ,
+ (char)243 /* byte 243 */ ,
+ (char)244 /* byte 244 */ ,
+ (char)289 /* byte 245 */ ,
+ (char)246 /* byte 246 */ ,
+ (char)247 /* byte 247 */ ,
+ (char)285 /* byte 248 */ ,
+ (char)249 /* byte 249 */ ,
+ (char)250 /* byte 250 */ ,
+ (char)251 /* byte 251 */ ,
+ (char)252 /* byte 252 */ ,
+ (char)365 /* byte 253 */ ,
+ (char)349 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)294, 161 },
+ { (char)728, 162 },
+ { (char)163, 163 },
+ { (char)164, 164 },
+ { (char)63477, 165 },
+ { (char)292, 166 },
+ { (char)167, 167 },
+ { (char)168, 168 },
+ { (char)304, 169 },
+ { (char)350, 170 },
+ { (char)286, 171 },
+ { (char)308, 172 },
+ { (char)173, 173 },
+ { (char)63478, 174 },
+ { (char)379, 175 },
+ { (char)176, 176 },
+ { (char)295, 177 },
+ { (char)178, 178 },
+ { (char)179, 179 },
+ { (char)180, 180 },
+ { (char)181, 181 },
+ { (char)293, 182 },
+ { (char)183, 183 },
+ { (char)184, 184 },
+ { (char)305, 185 },
+ { (char)351, 186 },
+ { (char)287, 187 },
+ { (char)309, 188 },
+ { (char)189, 189 },
+ { (char)63479, 190 },
+ { (char)380, 191 },
+ { (char)192, 192 },
+ { (char)193, 193 },
+ { (char)194, 194 },
+ { (char)63480, 195 },
+ { (char)196, 196 },
+ { (char)266, 197 },
+ { (char)264, 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)63481, 208 },
+ { (char)209, 209 },
+ { (char)210, 210 },
+ { (char)211, 211 },
+ { (char)212, 212 },
+ { (char)288, 213 },
+ { (char)214, 214 },
+ { (char)215, 215 },
+ { (char)284, 216 },
+ { (char)217, 217 },
+ { (char)218, 218 },
+ { (char)219, 219 },
+ { (char)220, 220 },
+ { (char)364, 221 },
+ { (char)348, 222 },
+ { (char)223, 223 },
+ { (char)224, 224 },
+ { (char)225, 225 },
+ { (char)226, 226 },
+ { (char)63482, 227 },
+ { (char)228, 228 },
+ { (char)267, 229 },
+ { (char)265, 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)63483, 240 },
+ { (char)241, 241 },
+ { (char)242, 242 },
+ { (char)243, 243 },
+ { (char)244, 244 },
+ { (char)289, 245 },
+ { (char)246, 246 },
+ { (char)247, 247 },
+ { (char)285, 248 },
+ { (char)249, 249 },
+ { (char)250, 250 },
+ { (char)251, 251 },
+ { (char)252, 252 },
+ { (char)365, 253 },
+ { (char)349, 254 },
+ { (char)729, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88594.cs b/ReadSharp/Encodings/Iso88594.cs
new file mode 100644
index 0000000..1153294
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88594.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 (ISO)' 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 Iso88594 : 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 "iso-8859-4";
+ }
+ }
+
+
+ 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 Iso88594()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)260 /* byte 161 */ ,
+ (char)312 /* byte 162 */ ,
+ (char)342 /* byte 163 */ ,
+ (char)164 /* byte 164 */ ,
+ (char)296 /* byte 165 */ ,
+ (char)315 /* byte 166 */ ,
+ (char)167 /* byte 167 */ ,
+ (char)168 /* byte 168 */ ,
+ (char)352 /* byte 169 */ ,
+ (char)274 /* byte 170 */ ,
+ (char)290 /* byte 171 */ ,
+ (char)358 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)381 /* byte 174 */ ,
+ (char)175 /* byte 175 */ ,
+ (char)176 /* byte 176 */ ,
+ (char)261 /* byte 177 */ ,
+ (char)731 /* byte 178 */ ,
+ (char)343 /* byte 179 */ ,
+ (char)180 /* byte 180 */ ,
+ (char)297 /* byte 181 */ ,
+ (char)316 /* byte 182 */ ,
+ (char)711 /* byte 183 */ ,
+ (char)184 /* byte 184 */ ,
+ (char)353 /* byte 185 */ ,
+ (char)275 /* byte 186 */ ,
+ (char)291 /* byte 187 */ ,
+ (char)359 /* byte 188 */ ,
+ (char)330 /* byte 189 */ ,
+ (char)382 /* byte 190 */ ,
+ (char)331 /* byte 191 */ ,
+ (char)256 /* 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)302 /* byte 199 */ ,
+ (char)268 /* byte 200 */ ,
+ (char)201 /* byte 201 */ ,
+ (char)280 /* byte 202 */ ,
+ (char)203 /* byte 203 */ ,
+ (char)278 /* byte 204 */ ,
+ (char)205 /* byte 205 */ ,
+ (char)206 /* byte 206 */ ,
+ (char)298 /* byte 207 */ ,
+ (char)272 /* byte 208 */ ,
+ (char)325 /* byte 209 */ ,
+ (char)332 /* byte 210 */ ,
+ (char)310 /* byte 211 */ ,
+ (char)212 /* byte 212 */ ,
+ (char)213 /* byte 213 */ ,
+ (char)214 /* byte 214 */ ,
+ (char)215 /* byte 215 */ ,
+ (char)216 /* byte 216 */ ,
+ (char)370 /* byte 217 */ ,
+ (char)218 /* byte 218 */ ,
+ (char)219 /* byte 219 */ ,
+ (char)220 /* byte 220 */ ,
+ (char)360 /* byte 221 */ ,
+ (char)362 /* byte 222 */ ,
+ (char)223 /* byte 223 */ ,
+ (char)257 /* 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)303 /* byte 231 */ ,
+ (char)269 /* byte 232 */ ,
+ (char)233 /* byte 233 */ ,
+ (char)281 /* byte 234 */ ,
+ (char)235 /* byte 235 */ ,
+ (char)279 /* byte 236 */ ,
+ (char)237 /* byte 237 */ ,
+ (char)238 /* byte 238 */ ,
+ (char)299 /* byte 239 */ ,
+ (char)273 /* byte 240 */ ,
+ (char)326 /* byte 241 */ ,
+ (char)333 /* byte 242 */ ,
+ (char)311 /* byte 243 */ ,
+ (char)244 /* byte 244 */ ,
+ (char)245 /* byte 245 */ ,
+ (char)246 /* byte 246 */ ,
+ (char)247 /* byte 247 */ ,
+ (char)248 /* byte 248 */ ,
+ (char)371 /* byte 249 */ ,
+ (char)250 /* byte 250 */ ,
+ (char)251 /* byte 251 */ ,
+ (char)252 /* byte 252 */ ,
+ (char)361 /* byte 253 */ ,
+ (char)363 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)260, 161 },
+ { (char)312, 162 },
+ { (char)342, 163 },
+ { (char)164, 164 },
+ { (char)296, 165 },
+ { (char)315, 166 },
+ { (char)167, 167 },
+ { (char)168, 168 },
+ { (char)352, 169 },
+ { (char)274, 170 },
+ { (char)290, 171 },
+ { (char)358, 172 },
+ { (char)173, 173 },
+ { (char)381, 174 },
+ { (char)175, 175 },
+ { (char)176, 176 },
+ { (char)261, 177 },
+ { (char)731, 178 },
+ { (char)343, 179 },
+ { (char)180, 180 },
+ { (char)297, 181 },
+ { (char)316, 182 },
+ { (char)711, 183 },
+ { (char)184, 184 },
+ { (char)353, 185 },
+ { (char)275, 186 },
+ { (char)291, 187 },
+ { (char)359, 188 },
+ { (char)330, 189 },
+ { (char)382, 190 },
+ { (char)331, 191 },
+ { (char)256, 192 },
+ { (char)193, 193 },
+ { (char)194, 194 },
+ { (char)195, 195 },
+ { (char)196, 196 },
+ { (char)197, 197 },
+ { (char)198, 198 },
+ { (char)302, 199 },
+ { (char)268, 200 },
+ { (char)201, 201 },
+ { (char)280, 202 },
+ { (char)203, 203 },
+ { (char)278, 204 },
+ { (char)205, 205 },
+ { (char)206, 206 },
+ { (char)298, 207 },
+ { (char)272, 208 },
+ { (char)325, 209 },
+ { (char)332, 210 },
+ { (char)310, 211 },
+ { (char)212, 212 },
+ { (char)213, 213 },
+ { (char)214, 214 },
+ { (char)215, 215 },
+ { (char)216, 216 },
+ { (char)370, 217 },
+ { (char)218, 218 },
+ { (char)219, 219 },
+ { (char)220, 220 },
+ { (char)360, 221 },
+ { (char)362, 222 },
+ { (char)223, 223 },
+ { (char)257, 224 },
+ { (char)225, 225 },
+ { (char)226, 226 },
+ { (char)227, 227 },
+ { (char)228, 228 },
+ { (char)229, 229 },
+ { (char)230, 230 },
+ { (char)303, 231 },
+ { (char)269, 232 },
+ { (char)233, 233 },
+ { (char)281, 234 },
+ { (char)235, 235 },
+ { (char)279, 236 },
+ { (char)237, 237 },
+ { (char)238, 238 },
+ { (char)299, 239 },
+ { (char)273, 240 },
+ { (char)326, 241 },
+ { (char)333, 242 },
+ { (char)311, 243 },
+ { (char)244, 244 },
+ { (char)245, 245 },
+ { (char)246, 246 },
+ { (char)247, 247 },
+ { (char)248, 248 },
+ { (char)371, 249 },
+ { (char)250, 250 },
+ { (char)251, 251 },
+ { (char)252, 252 },
+ { (char)361, 253 },
+ { (char)363, 254 },
+ { (char)729, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88595.cs b/ReadSharp/Encodings/Iso88595.cs
new file mode 100644
index 0000000..ee0f3ea
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88595.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 (ISO)' 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 Iso88595 : 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 "iso-8859-5";
+ }
+ }
+
+
+ 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 Iso88595()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)1025 /* byte 161 */ ,
+ (char)1026 /* byte 162 */ ,
+ (char)1027 /* byte 163 */ ,
+ (char)1028 /* byte 164 */ ,
+ (char)1029 /* byte 165 */ ,
+ (char)1030 /* byte 166 */ ,
+ (char)1031 /* byte 167 */ ,
+ (char)1032 /* byte 168 */ ,
+ (char)1033 /* byte 169 */ ,
+ (char)1034 /* byte 170 */ ,
+ (char)1035 /* byte 171 */ ,
+ (char)1036 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)1038 /* byte 174 */ ,
+ (char)1039 /* byte 175 */ ,
+ (char)1040 /* byte 176 */ ,
+ (char)1041 /* byte 177 */ ,
+ (char)1042 /* byte 178 */ ,
+ (char)1043 /* byte 179 */ ,
+ (char)1044 /* byte 180 */ ,
+ (char)1045 /* byte 181 */ ,
+ (char)1046 /* byte 182 */ ,
+ (char)1047 /* byte 183 */ ,
+ (char)1048 /* byte 184 */ ,
+ (char)1049 /* byte 185 */ ,
+ (char)1050 /* byte 186 */ ,
+ (char)1051 /* byte 187 */ ,
+ (char)1052 /* byte 188 */ ,
+ (char)1053 /* byte 189 */ ,
+ (char)1054 /* byte 190 */ ,
+ (char)1055 /* byte 191 */ ,
+ (char)1056 /* byte 192 */ ,
+ (char)1057 /* byte 193 */ ,
+ (char)1058 /* byte 194 */ ,
+ (char)1059 /* byte 195 */ ,
+ (char)1060 /* byte 196 */ ,
+ (char)1061 /* byte 197 */ ,
+ (char)1062 /* byte 198 */ ,
+ (char)1063 /* byte 199 */ ,
+ (char)1064 /* byte 200 */ ,
+ (char)1065 /* byte 201 */ ,
+ (char)1066 /* byte 202 */ ,
+ (char)1067 /* byte 203 */ ,
+ (char)1068 /* byte 204 */ ,
+ (char)1069 /* byte 205 */ ,
+ (char)1070 /* byte 206 */ ,
+ (char)1071 /* byte 207 */ ,
+ (char)1072 /* byte 208 */ ,
+ (char)1073 /* byte 209 */ ,
+ (char)1074 /* byte 210 */ ,
+ (char)1075 /* byte 211 */ ,
+ (char)1076 /* byte 212 */ ,
+ (char)1077 /* byte 213 */ ,
+ (char)1078 /* byte 214 */ ,
+ (char)1079 /* byte 215 */ ,
+ (char)1080 /* byte 216 */ ,
+ (char)1081 /* byte 217 */ ,
+ (char)1082 /* byte 218 */ ,
+ (char)1083 /* byte 219 */ ,
+ (char)1084 /* byte 220 */ ,
+ (char)1085 /* byte 221 */ ,
+ (char)1086 /* byte 222 */ ,
+ (char)1087 /* byte 223 */ ,
+ (char)1088 /* byte 224 */ ,
+ (char)1089 /* byte 225 */ ,
+ (char)1090 /* byte 226 */ ,
+ (char)1091 /* byte 227 */ ,
+ (char)1092 /* byte 228 */ ,
+ (char)1093 /* byte 229 */ ,
+ (char)1094 /* byte 230 */ ,
+ (char)1095 /* byte 231 */ ,
+ (char)1096 /* byte 232 */ ,
+ (char)1097 /* byte 233 */ ,
+ (char)1098 /* byte 234 */ ,
+ (char)1099 /* byte 235 */ ,
+ (char)1100 /* byte 236 */ ,
+ (char)1101 /* byte 237 */ ,
+ (char)1102 /* byte 238 */ ,
+ (char)1103 /* byte 239 */ ,
+ (char)8470 /* byte 240 */ ,
+ (char)1105 /* byte 241 */ ,
+ (char)1106 /* byte 242 */ ,
+ (char)1107 /* byte 243 */ ,
+ (char)1108 /* byte 244 */ ,
+ (char)1109 /* byte 245 */ ,
+ (char)1110 /* byte 246 */ ,
+ (char)1111 /* byte 247 */ ,
+ (char)1112 /* byte 248 */ ,
+ (char)1113 /* byte 249 */ ,
+ (char)1114 /* byte 250 */ ,
+ (char)1115 /* byte 251 */ ,
+ (char)1116 /* byte 252 */ ,
+ (char)167 /* byte 253 */ ,
+ (char)1118 /* byte 254 */ ,
+ (char)1119 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)1025, 161 },
+ { (char)1026, 162 },
+ { (char)1027, 163 },
+ { (char)1028, 164 },
+ { (char)1029, 165 },
+ { (char)1030, 166 },
+ { (char)1031, 167 },
+ { (char)1032, 168 },
+ { (char)1033, 169 },
+ { (char)1034, 170 },
+ { (char)1035, 171 },
+ { (char)1036, 172 },
+ { (char)173, 173 },
+ { (char)1038, 174 },
+ { (char)1039, 175 },
+ { (char)1040, 176 },
+ { (char)1041, 177 },
+ { (char)1042, 178 },
+ { (char)1043, 179 },
+ { (char)1044, 180 },
+ { (char)1045, 181 },
+ { (char)1046, 182 },
+ { (char)1047, 183 },
+ { (char)1048, 184 },
+ { (char)1049, 185 },
+ { (char)1050, 186 },
+ { (char)1051, 187 },
+ { (char)1052, 188 },
+ { (char)1053, 189 },
+ { (char)1054, 190 },
+ { (char)1055, 191 },
+ { (char)1056, 192 },
+ { (char)1057, 193 },
+ { (char)1058, 194 },
+ { (char)1059, 195 },
+ { (char)1060, 196 },
+ { (char)1061, 197 },
+ { (char)1062, 198 },
+ { (char)1063, 199 },
+ { (char)1064, 200 },
+ { (char)1065, 201 },
+ { (char)1066, 202 },
+ { (char)1067, 203 },
+ { (char)1068, 204 },
+ { (char)1069, 205 },
+ { (char)1070, 206 },
+ { (char)1071, 207 },
+ { (char)1072, 208 },
+ { (char)1073, 209 },
+ { (char)1074, 210 },
+ { (char)1075, 211 },
+ { (char)1076, 212 },
+ { (char)1077, 213 },
+ { (char)1078, 214 },
+ { (char)1079, 215 },
+ { (char)1080, 216 },
+ { (char)1081, 217 },
+ { (char)1082, 218 },
+ { (char)1083, 219 },
+ { (char)1084, 220 },
+ { (char)1085, 221 },
+ { (char)1086, 222 },
+ { (char)1087, 223 },
+ { (char)1088, 224 },
+ { (char)1089, 225 },
+ { (char)1090, 226 },
+ { (char)1091, 227 },
+ { (char)1092, 228 },
+ { (char)1093, 229 },
+ { (char)1094, 230 },
+ { (char)1095, 231 },
+ { (char)1096, 232 },
+ { (char)1097, 233 },
+ { (char)1098, 234 },
+ { (char)1099, 235 },
+ { (char)1100, 236 },
+ { (char)1101, 237 },
+ { (char)1102, 238 },
+ { (char)1103, 239 },
+ { (char)8470, 240 },
+ { (char)1105, 241 },
+ { (char)1106, 242 },
+ { (char)1107, 243 },
+ { (char)1108, 244 },
+ { (char)1109, 245 },
+ { (char)1110, 246 },
+ { (char)1111, 247 },
+ { (char)1112, 248 },
+ { (char)1113, 249 },
+ { (char)1114, 250 },
+ { (char)1115, 251 },
+ { (char)1116, 252 },
+ { (char)167, 253 },
+ { (char)1118, 254 },
+ { (char)1119, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88596.cs b/ReadSharp/Encodings/Iso88596.cs
new file mode 100644
index 0000000..6cd1f77
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88596.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 (ISO)' 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 Iso88596 : 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 "iso-8859-6";
+ }
+ }
+
+
+ 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 Iso88596()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)63432 /* byte 161 */ ,
+ (char)63433 /* byte 162 */ ,
+ (char)63434 /* byte 163 */ ,
+ (char)164 /* byte 164 */ ,
+ (char)63435 /* byte 165 */ ,
+ (char)63436 /* byte 166 */ ,
+ (char)63437 /* byte 167 */ ,
+ (char)63438 /* byte 168 */ ,
+ (char)63439 /* byte 169 */ ,
+ (char)63440 /* byte 170 */ ,
+ (char)63441 /* byte 171 */ ,
+ (char)1548 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)63442 /* byte 174 */ ,
+ (char)63443 /* byte 175 */ ,
+ (char)63444 /* byte 176 */ ,
+ (char)63445 /* byte 177 */ ,
+ (char)63446 /* byte 178 */ ,
+ (char)63447 /* byte 179 */ ,
+ (char)63448 /* byte 180 */ ,
+ (char)63449 /* byte 181 */ ,
+ (char)63450 /* byte 182 */ ,
+ (char)63451 /* byte 183 */ ,
+ (char)63452 /* byte 184 */ ,
+ (char)63453 /* byte 185 */ ,
+ (char)63454 /* byte 186 */ ,
+ (char)1563 /* byte 187 */ ,
+ (char)63455 /* byte 188 */ ,
+ (char)63456 /* byte 189 */ ,
+ (char)63457 /* byte 190 */ ,
+ (char)1567 /* byte 191 */ ,
+ (char)63458 /* 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)1591 /* byte 215 */ ,
+ (char)1592 /* byte 216 */ ,
+ (char)1593 /* byte 217 */ ,
+ (char)1594 /* byte 218 */ ,
+ (char)63459 /* byte 219 */ ,
+ (char)63460 /* byte 220 */ ,
+ (char)63461 /* byte 221 */ ,
+ (char)63462 /* byte 222 */ ,
+ (char)63463 /* byte 223 */ ,
+ (char)1600 /* byte 224 */ ,
+ (char)1601 /* byte 225 */ ,
+ (char)1602 /* byte 226 */ ,
+ (char)1603 /* byte 227 */ ,
+ (char)1604 /* byte 228 */ ,
+ (char)1605 /* byte 229 */ ,
+ (char)1606 /* byte 230 */ ,
+ (char)1607 /* byte 231 */ ,
+ (char)1608 /* byte 232 */ ,
+ (char)1609 /* byte 233 */ ,
+ (char)1610 /* byte 234 */ ,
+ (char)1611 /* byte 235 */ ,
+ (char)1612 /* byte 236 */ ,
+ (char)1613 /* byte 237 */ ,
+ (char)1614 /* byte 238 */ ,
+ (char)1615 /* byte 239 */ ,
+ (char)1616 /* byte 240 */ ,
+ (char)1617 /* byte 241 */ ,
+ (char)1618 /* byte 242 */ ,
+ (char)63464 /* byte 243 */ ,
+ (char)63465 /* byte 244 */ ,
+ (char)63466 /* byte 245 */ ,
+ (char)63467 /* byte 246 */ ,
+ (char)63468 /* byte 247 */ ,
+ (char)63469 /* byte 248 */ ,
+ (char)63470 /* byte 249 */ ,
+ (char)63471 /* byte 250 */ ,
+ (char)63472 /* byte 251 */ ,
+ (char)63473 /* byte 252 */ ,
+ (char)63474 /* byte 253 */ ,
+ (char)63475 /* byte 254 */ ,
+ (char)63476 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)63432, 161 },
+ { (char)63433, 162 },
+ { (char)63434, 163 },
+ { (char)164, 164 },
+ { (char)63435, 165 },
+ { (char)63436, 166 },
+ { (char)63437, 167 },
+ { (char)63438, 168 },
+ { (char)63439, 169 },
+ { (char)63440, 170 },
+ { (char)63441, 171 },
+ { (char)1548, 172 },
+ { (char)173, 173 },
+ { (char)63442, 174 },
+ { (char)63443, 175 },
+ { (char)63444, 176 },
+ { (char)63445, 177 },
+ { (char)63446, 178 },
+ { (char)63447, 179 },
+ { (char)63448, 180 },
+ { (char)63449, 181 },
+ { (char)63450, 182 },
+ { (char)63451, 183 },
+ { (char)63452, 184 },
+ { (char)63453, 185 },
+ { (char)63454, 186 },
+ { (char)1563, 187 },
+ { (char)63455, 188 },
+ { (char)63456, 189 },
+ { (char)63457, 190 },
+ { (char)1567, 191 },
+ { (char)63458, 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)1591, 215 },
+ { (char)1592, 216 },
+ { (char)1593, 217 },
+ { (char)1594, 218 },
+ { (char)63459, 219 },
+ { (char)63460, 220 },
+ { (char)63461, 221 },
+ { (char)63462, 222 },
+ { (char)63463, 223 },
+ { (char)1600, 224 },
+ { (char)1601, 225 },
+ { (char)1602, 226 },
+ { (char)1603, 227 },
+ { (char)1604, 228 },
+ { (char)1605, 229 },
+ { (char)1606, 230 },
+ { (char)1607, 231 },
+ { (char)1608, 232 },
+ { (char)1609, 233 },
+ { (char)1610, 234 },
+ { (char)1611, 235 },
+ { (char)1612, 236 },
+ { (char)1613, 237 },
+ { (char)1614, 238 },
+ { (char)1615, 239 },
+ { (char)1616, 240 },
+ { (char)1617, 241 },
+ { (char)1618, 242 },
+ { (char)63464, 243 },
+ { (char)63465, 244 },
+ { (char)63466, 245 },
+ { (char)63467, 246 },
+ { (char)63468, 247 },
+ { (char)63469, 248 },
+ { (char)63470, 249 },
+ { (char)63471, 250 },
+ { (char)63472, 251 },
+ { (char)63473, 252 },
+ { (char)63474, 253 },
+ { (char)63475, 254 },
+ { (char)63476, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88597.cs b/ReadSharp/Encodings/Iso88597.cs
new file mode 100644
index 0000000..fe50d0f
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88597.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 (ISO-Visual)' 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 Iso88598 : 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 "iso-8859-8";
+ }
+ }
+
+
+ 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 Iso88598()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* byte 155 */ ,
+ (char)156 /* byte 156 */ ,
+ (char)157 /* byte 157 */ ,
+ (char)158 /* byte 158 */ ,
+ (char)159 /* byte 159 */ ,
+ (char)160 /* byte 160 */ ,
+ (char)63388 /* 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)215 /* byte 170 */ ,
+ (char)171 /* byte 171 */ ,
+ (char)172 /* byte 172 */ ,
+ (char)173 /* byte 173 */ ,
+ (char)174 /* byte 174 */ ,
+ (char)8254 /* 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)63389 /* byte 191 */ ,
+ (char)63390 /* byte 192 */ ,
+ (char)63391 /* byte 193 */ ,
+ (char)63392 /* byte 194 */ ,
+ (char)63393 /* byte 195 */ ,
+ (char)63394 /* byte 196 */ ,
+ (char)63395 /* byte 197 */ ,
+ (char)63396 /* byte 198 */ ,
+ (char)63397 /* byte 199 */ ,
+ (char)63398 /* byte 200 */ ,
+ (char)63399 /* byte 201 */ ,
+ (char)63400 /* byte 202 */ ,
+ (char)63401 /* byte 203 */ ,
+ (char)63402 /* byte 204 */ ,
+ (char)63403 /* byte 205 */ ,
+ (char)63404 /* byte 206 */ ,
+ (char)63405 /* byte 207 */ ,
+ (char)63406 /* byte 208 */ ,
+ (char)63407 /* byte 209 */ ,
+ (char)63408 /* byte 210 */ ,
+ (char)63409 /* byte 211 */ ,
+ (char)63410 /* byte 212 */ ,
+ (char)63411 /* byte 213 */ ,
+ (char)63412 /* byte 214 */ ,
+ (char)63413 /* byte 215 */ ,
+ (char)63414 /* byte 216 */ ,
+ (char)63415 /* byte 217 */ ,
+ (char)63416 /* byte 218 */ ,
+ (char)63417 /* byte 219 */ ,
+ (char)63418 /* byte 220 */ ,
+ (char)63419 /* byte 221 */ ,
+ (char)63420 /* byte 222 */ ,
+ (char)8215 /* 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)63421 /* byte 251 */ ,
+ (char)63422 /* byte 252 */ ,
+ (char)63423 /* byte 253 */ ,
+ (char)63424 /* byte 254 */ ,
+ (char)63425 /* 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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 155 },
+ { (char)156, 156 },
+ { (char)157, 157 },
+ { (char)158, 158 },
+ { (char)159, 159 },
+ { (char)160, 160 },
+ { (char)63388, 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)215, 170 },
+ { (char)171, 171 },
+ { (char)172, 172 },
+ { (char)173, 173 },
+ { (char)174, 174 },
+ { (char)8254, 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)63389, 191 },
+ { (char)63390, 192 },
+ { (char)63391, 193 },
+ { (char)63392, 194 },
+ { (char)63393, 195 },
+ { (char)63394, 196 },
+ { (char)63395, 197 },
+ { (char)63396, 198 },
+ { (char)63397, 199 },
+ { (char)63398, 200 },
+ { (char)63399, 201 },
+ { (char)63400, 202 },
+ { (char)63401, 203 },
+ { (char)63402, 204 },
+ { (char)63403, 205 },
+ { (char)63404, 206 },
+ { (char)63405, 207 },
+ { (char)63406, 208 },
+ { (char)63407, 209 },
+ { (char)63408, 210 },
+ { (char)63409, 211 },
+ { (char)63410, 212 },
+ { (char)63411, 213 },
+ { (char)63412, 214 },
+ { (char)63413, 215 },
+ { (char)63414, 216 },
+ { (char)63415, 217 },
+ { (char)63416, 218 },
+ { (char)63417, 219 },
+ { (char)63418, 220 },
+ { (char)63419, 221 },
+ { (char)63420, 222 },
+ { (char)8215, 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)63421, 251 },
+ { (char)63422, 252 },
+ { (char)63423, 253 },
+ { (char)63424, 254 },
+ { (char)63425, 255 }
+ };
+
+ #endregion
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88598.cs b/ReadSharp/Encodings/Iso88598.cs
new file mode 100644
index 0000000..e2e2679
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88598.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ReadSharp.Encodings
+{
+ class Iso88598
+ {
+ }
+}
diff --git a/ReadSharp/Encodings/Iso88599.cs b/ReadSharp/Encodings/Iso88599.cs
new file mode 100644
index 0000000..6992a4c
--- /dev/null
+++ b/ReadSharp/Encodings/Iso88599.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 (ISO)' 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 Iso88599 : 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 "iso-8859-9";
+ }
+ }
+
+
+ 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 Iso88599()
+ {
+ 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)128 /* byte 128 */ ,
+ (char)129 /* byte 129 */ ,
+ (char)130 /* byte 130 */ ,
+ (char)131 /* byte 131 */ ,
+ (char)132 /* byte 132 */ ,
+ (char)133 /* byte 133 */ ,
+ (char)134 /* byte 134 */ ,
+ (char)135 /* byte 135 */ ,
+ (char)136 /* byte 136 */ ,
+ (char)137 /* byte 137 */ ,
+ (char)138 /* byte 138 */ ,
+ (char)139 /* byte 139 */ ,
+ (char)140 /* byte 140 */ ,
+ (char)141 /* byte 141 */ ,
+ (char)142 /* byte 142 */ ,
+ (char)143 /* byte 143 */ ,
+ (char)144 /* byte 144 */ ,
+ (char)145 /* byte 145 */ ,
+ (char)146 /* byte 146 */ ,
+ (char)147 /* byte 147 */ ,
+ (char)148 /* byte 148 */ ,
+ (char)149 /* byte 149 */ ,
+ (char)150 /* byte 150 */ ,
+ (char)151 /* byte 151 */ ,
+ (char)152 /* byte 152 */ ,
+ (char)153 /* byte 153 */ ,
+ (char)154 /* byte 154 */ ,
+ (char)155 /* 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)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)128, 128 },
+ { (char)129, 129 },
+ { (char)130, 130 },
+ { (char)131, 131 },
+ { (char)132, 132 },
+ { (char)133, 133 },
+ { (char)134, 134 },
+ { (char)135, 135 },
+ { (char)136, 136 },
+ { (char)137, 137 },
+ { (char)138, 138 },
+ { (char)139, 139 },
+ { (char)140, 140 },
+ { (char)141, 141 },
+ { (char)142, 142 },
+ { (char)143, 143 },
+ { (char)144, 144 },
+ { (char)145, 145 },
+ { (char)146, 146 },
+ { (char)147, 147 },
+ { (char)148, 148 },
+ { (char)149, 149 },
+ { (char)150, 150 },
+ { (char)151, 151 },
+ { (char)152, 152 },
+ { (char)153, 153 },
+ { (char)154, 154 },
+ { (char)155, 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)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
+ }
+}