public void HandleFallback(ref EncoderFallbackBuffer buffer, char[] chars, ref int charIndex, ref int charCount, byte[] bytes, ref int byteIndex, ref int byteCount, object state) { if (buffer == null) buffer = EncoderFallback.CreateFallbackBuffer(); if (charCount > 1 && (Char.IsSurrogate(chars[charIndex]) && Char.IsSurrogate(chars[charIndex + 1]))) { buffer.Fallback (chars[charIndex], chars[charIndex + 1], charIndex); charIndex++; charCount--; } else buffer.Fallback (chars[charIndex], charIndex); char[] tmp = new char[buffer.Remaining]; int idx = 0; while (buffer.Remaining > 0) tmp[idx++] = buffer.GetNextChar(); var len = state == null ? GetBytes(tmp, 0, tmp.Length, bytes, byteIndex) : GetBytesInternal(tmp, 0, tmp.Length, bytes, byteIndex, true, state); byteIndex += len; byteCount -= len; }
int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, ref EncoderFallbackBuffer buffer, ref char[] fallback_chars) { if (chars == null) throw new ArgumentNullException("chars"); return InternalGetBytes(chars, chars.Length, charIndex, charCount, bytes, byteIndex, ref buffer, ref fallback_chars); }
// Get the bytes that result from encoding a character buffer. public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) { int byteCount = bytes.Length; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif // Convert the characters into their byte form. int posn = byteIndex; int end = charIndex + charCount; int byteLength = byteCount; int /*ch,*/ value; byte[] cjkToJis = JISConvert.Convert.cjkToJis; byte[] greekToJis = JISConvert.Convert.greekToJis; byte[] extraToJis = JISConvert.Convert.extraToJis; //while (charCount > 0) for (int i = charIndex; i < end; i++, charCount--) { //ch = chars[charIndex++]; //--charCount; int ch = chars[i]; if (posn >= byteLength) { throw new ArgumentException (Strings.GetString("Arg_InsufficientSpace"), "bytes"); } if (ch < 0x0080) { // Character maps to itself. bytes[posn++] = (byte)ch; continue; } else if (ch < 0x0100) { // Check for special Latin 1 characters that // can be mapped to double-byte code points. if (ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 || ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 || ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 || ch == 0x00D7 || ch == 0x00F7) { if ((posn + 1) >= byteLength) { throw new ArgumentException (Strings.GetString ("Arg_InsufficientSpace"), "bytes"); } switch (ch) { case 0x00A2: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x91; break; case 0x00A3: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x92; break; case 0x00A7: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x98; break; case 0x00A8: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x4E; break; case 0x00AC: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0xCA; break; case 0x00B0: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x8B; break; case 0x00B1: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x7D; break; case 0x00B4: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x4C; break; case 0x00B6: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0xF7; break; case 0x00D7: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x7E; break; case 0x00F7: bytes[posn++] = (byte)0x81; bytes[posn++] = (byte)0x80; break; } } else if (ch == 0x00A5) { // Yen sign. bytes[posn++] = (byte)0x5C; } else { #if NET_2_0 HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount, null); #else // Invalid character. bytes[posn++] = (byte)'?'; #endif } continue; } else if (ch >= 0x0391 && ch <= 0x0451) { // Greek subset characters. value = (ch - 0x0391) * 2; value = ((int)(greekToJis[value])) | (((int)(greekToJis[value + 1])) << 8); } else if (ch >= 0x2010 && ch <= 0x9FA5) { // This range contains the bulk of the CJK set. value = (ch - 0x2010) * 2; value = ((int)(cjkToJis[value])) | (((int)(cjkToJis[value + 1])) << 8); } else if (ch >= 0xE000 && ch <= 0xE757) { // PrivateUse int diff = ch - 0xE000; value = ((int)(diff / 0xBC) << 8) + (diff % 0xBC) + 0xF040; if (value % 0x100 >= 0x7F) value++; } else if (ch >= 0xFF01 && ch <= 0xFF60) { value = (ch - 0xFF01) * 2; value = ((int)(extraToJis[value])) | (((int)(extraToJis[value + 1])) << 8); } else if (ch >= 0xFF60 && ch <= 0xFFA0) { value = ch - 0xFF60 + 0xA0; } else { // Invalid character. value = 0; } if (value == 0) { #if NET_2_0 HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref posn, ref byteCount, null); #else bytes[posn++] = (byte)'?'; #endif } else if (value < 0x0100) { bytes[posn++] = (byte)value; } else if ((posn + 1) >= byteLength) { throw new ArgumentException (Strings.GetString("Arg_InsufficientSpace"), "bytes"); } else if (value < 0x8000) { // JIS X 0208 character. value -= 0x0100; ch = (value / 0xBC); value = (value % 0xBC) + 0x40; if (value >= 0x7F) { ++value; } if (ch < (0x9F - 0x80)) { bytes[posn++] = (byte)(ch + 0x81); } else { bytes[posn++] = (byte)(ch - (0x9F - 0x80) + 0xE0); } bytes[posn++] = (byte)value; } else if (value >= 0xF040 && value <= 0xF9FC) { // PrivateUse bytes[posn++] = (byte)(value / 0x100); bytes[posn++] = (byte)(value % 0x100); } else { // JIS X 0212 character, which Shift-JIS doesn't // support, but we've already allocated two slots. bytes[posn++] = (byte)'?'; bytes[posn++] = (byte)'?'; } } // Return the final length to the caller. return posn - byteIndex; }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); if (ch >= 161) { switch (ch) { case 0x00A4: case 0x00AD: break; case 0x00A1: ch = 0x21; break; case 0x00A2: ch = 0x63; break; case 0x00A5: ch = 0x59; break; case 0x00A6: ch = 0x7C; break; case 0x00A9: ch = 0x43; break; case 0x00AA: ch = 0x61; break; case 0x00AB: ch = 0x3C; break; case 0x00AE: ch = 0x52; break; case 0x00B2: ch = 0x32; break; case 0x00B3: ch = 0x33; break; case 0x00B7: ch = 0x2E; break; case 0x00B8: ch = 0x2C; break; case 0x00B9: ch = 0x31; break; case 0x00BA: ch = 0x6F; break; case 0x00BB: ch = 0x3E; break; case 0x00C0: ch = 0x41; break; case 0x00C1: ch = 0x41; break; case 0x00C2: ch = 0x41; break; case 0x00C3: ch = 0x41; break; case 0x00C4: ch = 0x41; break; case 0x00C5: ch = 0x41; break; case 0x00C6: ch = 0x41; break; case 0x00C7: ch = 0x43; break; case 0x00C8: ch = 0x45; break; case 0x00C9: ch = 0x45; break; case 0x00CA: ch = 0x45; break; case 0x00CB: ch = 0x45; break; case 0x00CC: ch = 0x49; break; case 0x00CD: ch = 0x49; break; case 0x00CE: ch = 0x49; break; case 0x00CF: ch = 0x49; break; case 0x00D0: ch = 0x44; break; case 0x00D1: ch = 0x4E; break; case 0x00D2: ch = 0x4F; break; case 0x00D3: ch = 0x4F; break; case 0x00D4: ch = 0x4F; break; case 0x00D5: ch = 0x4F; break; case 0x00D6: ch = 0x4F; break; case 0x00D8: ch = 0x4F; break; case 0x00D9: ch = 0x55; break; case 0x00DA: ch = 0x55; break; case 0x00DB: ch = 0x55; break; case 0x00DC: ch = 0x55; break; case 0x00DD: ch = 0x59; break; case 0x00E0: ch = 0x61; break; case 0x00E1: ch = 0x61; break; case 0x00E2: ch = 0x61; break; case 0x00E3: ch = 0x61; break; case 0x00E4: ch = 0x61; break; case 0x00E5: ch = 0x61; break; case 0x00E6: ch = 0x61; break; case 0x00E7: ch = 0x63; break; case 0x00E8: ch = 0x65; break; case 0x00E9: ch = 0x65; break; case 0x00EA: ch = 0x65; break; case 0x00EB: ch = 0x65; break; case 0x00EC: ch = 0x69; break; case 0x00ED: ch = 0x69; break; case 0x00EE: ch = 0x69; break; case 0x00EF: ch = 0x69; break; case 0x00F1: ch = 0x6E; break; case 0x00F2: ch = 0x6F; break; case 0x00F3: ch = 0x6F; break; case 0x00F4: ch = 0x6F; break; case 0x00F5: ch = 0x6F; break; case 0x00F6: ch = 0x6F; break; case 0x00F8: ch = 0x6F; break; case 0x00F9: ch = 0x75; break; case 0x00FA: ch = 0x75; break; case 0x00FB: ch = 0x75; break; case 0x00FC: ch = 0x75; break; case 0x00FD: ch = 0x79; break; case 0x00FF: ch = 0x79; break; case 0x0100: ch = 0x41; break; case 0x0101: ch = 0x61; break; case 0x0102: ch = 0x41; break; case 0x0103: ch = 0x61; break; case 0x0104: ch = 0x41; break; case 0x0105: ch = 0x61; break; case 0x0106: ch = 0x43; break; case 0x0107: ch = 0x63; break; case 0x0108: ch = 0x43; break; case 0x0109: ch = 0x63; break; case 0x010A: ch = 0x43; break; case 0x010B: ch = 0x63; break; case 0x010C: ch = 0x43; break; case 0x010D: ch = 0x63; break; case 0x010E: ch = 0x44; break; case 0x010F: ch = 0x64; break; case 0x0110: ch = 0x44; break; case 0x0111: ch = 0x64; break; case 0x0112: ch = 0x45; break; case 0x0113: ch = 0x65; break; case 0x0114: ch = 0x45; break; case 0x0115: ch = 0x65; break; case 0x0116: ch = 0x45; break; case 0x0117: ch = 0x65; break; case 0x0118: ch = 0x45; break; case 0x0119: ch = 0x65; break; case 0x011A: ch = 0x45; break; case 0x011B: ch = 0x65; break; case 0x011C: ch = 0x47; break; case 0x011D: ch = 0x67; break; case 0x011E: ch = 0x47; break; case 0x011F: ch = 0x67; break; case 0x0120: ch = 0x47; break; case 0x0121: ch = 0x67; break; case 0x0122: ch = 0x47; break; case 0x0123: ch = 0x67; break; case 0x0124: ch = 0x48; break; case 0x0125: ch = 0x68; break; case 0x0126: ch = 0x48; break; case 0x0127: ch = 0x68; break; case 0x0128: ch = 0x49; break; case 0x0129: ch = 0x69; break; case 0x012A: ch = 0x49; break; case 0x012B: ch = 0x69; break; case 0x012C: ch = 0x49; break; case 0x012D: ch = 0x69; break; case 0x012E: ch = 0x49; break; case 0x012F: ch = 0x69; break; case 0x0130: ch = 0x49; break; case 0x0131: ch = 0x69; break; case 0x0134: ch = 0x4A; break; case 0x0135: ch = 0x6A; break; case 0x0136: ch = 0x4B; break; case 0x0137: ch = 0x6B; break; case 0x0139: ch = 0x4C; break; case 0x013A: ch = 0x6C; break; case 0x013B: ch = 0x4C; break; case 0x013C: ch = 0x6C; break; case 0x013D: ch = 0x4C; break; case 0x013E: ch = 0x6C; break; case 0x0141: ch = 0x4C; break; case 0x0142: ch = 0x6C; break; case 0x0143: ch = 0x4E; break; case 0x0144: ch = 0x6E; break; case 0x0145: ch = 0x4E; break; case 0x0146: ch = 0x6E; break; case 0x0147: ch = 0x4E; break; case 0x0148: ch = 0x6E; break; case 0x014C: ch = 0x4F; break; case 0x014D: ch = 0x6F; break; case 0x014E: ch = 0x4F; break; case 0x014F: ch = 0x6F; break; case 0x0150: ch = 0x4F; break; case 0x0151: ch = 0x6F; break; case 0x0152: ch = 0x4F; break; case 0x0153: ch = 0x6F; break; case 0x0154: ch = 0x52; break; case 0x0155: ch = 0x72; break; case 0x0156: ch = 0x52; break; case 0x0157: ch = 0x72; break; case 0x0158: ch = 0x52; break; case 0x0159: ch = 0x72; break; case 0x015A: ch = 0x53; break; case 0x015B: ch = 0x73; break; case 0x015C: ch = 0x53; break; case 0x015D: ch = 0x73; break; case 0x015E: ch = 0x53; break; case 0x015F: ch = 0x73; break; case 0x0160: ch = 0x53; break; case 0x0161: ch = 0x73; break; case 0x0162: ch = 0x54; break; case 0x0163: ch = 0x74; break; case 0x0164: ch = 0x54; break; case 0x0165: ch = 0x74; break; case 0x0166: ch = 0x54; break; case 0x0167: ch = 0x74; break; case 0x0168: ch = 0x55; break; case 0x0169: ch = 0x75; break; case 0x016A: ch = 0x55; break; case 0x016B: ch = 0x75; break; case 0x016C: ch = 0x55; break; case 0x016D: ch = 0x75; break; case 0x016E: ch = 0x55; break; case 0x016F: ch = 0x75; break; case 0x0170: ch = 0x55; break; case 0x0171: ch = 0x75; break; case 0x0172: ch = 0x55; break; case 0x0173: ch = 0x75; break; case 0x0174: ch = 0x57; break; case 0x0175: ch = 0x77; break; case 0x0176: ch = 0x59; break; case 0x0177: ch = 0x79; break; case 0x0178: ch = 0x59; break; case 0x0179: ch = 0x5A; break; case 0x017A: ch = 0x7A; break; case 0x017B: ch = 0x5A; break; case 0x017C: ch = 0x7A; break; case 0x017D: ch = 0x5A; break; case 0x017E: ch = 0x7A; break; case 0x0180: ch = 0x62; break; case 0x0189: ch = 0x44; break; case 0x0191: ch = 0x46; break; case 0x0192: ch = 0x66; break; case 0x0197: ch = 0x49; break; case 0x019A: ch = 0x6C; break; case 0x019F: ch = 0x4F; break; case 0x01A0: ch = 0x4F; break; case 0x01A1: ch = 0x6F; break; case 0x01AB: ch = 0x74; break; case 0x01AE: ch = 0x54; break; case 0x01AF: ch = 0x55; break; case 0x01B0: ch = 0x75; break; case 0x01B6: ch = 0x7A; break; case 0x01CD: ch = 0x41; break; case 0x01CE: ch = 0x61; break; case 0x01CF: ch = 0x49; break; case 0x01D0: ch = 0x69; break; case 0x01D1: ch = 0x4F; break; case 0x01D2: ch = 0x6F; break; case 0x01D3: ch = 0x55; break; case 0x01D4: ch = 0x75; break; case 0x01D5: ch = 0x55; break; case 0x01D6: ch = 0x75; break; case 0x01D7: ch = 0x55; break; case 0x01D8: ch = 0x75; break; case 0x01D9: ch = 0x55; break; case 0x01DA: ch = 0x75; break; case 0x01DB: ch = 0x55; break; case 0x01DC: ch = 0x75; break; case 0x01DE: ch = 0x41; break; case 0x01DF: ch = 0x61; break; case 0x01E4: ch = 0x47; break; case 0x01E5: ch = 0x67; break; case 0x01E6: ch = 0x47; break; case 0x01E7: ch = 0x67; break; case 0x01E8: ch = 0x4B; break; case 0x01E9: ch = 0x6B; break; case 0x01EA: ch = 0x4F; break; case 0x01EB: ch = 0x6F; break; case 0x01EC: ch = 0x4F; break; case 0x01ED: ch = 0x6F; break; case 0x01F0: ch = 0x6A; break; case 0x0261: ch = 0x67; break; case 0x02B9: ch = 0x27; break; case 0x02BA: ch = 0x22; break; case 0x02BC: ch = 0x27; break; case 0x02C4: ch = 0x5E; break; case 0x02C6: ch = 0x5E; break; case 0x02C8: ch = 0x27; break; case 0x02CB: ch = 0x60; break; case 0x02CD: ch = 0x5F; break; case 0x02DC: ch = 0x7E; break; case 0x0300: ch = 0x60; break; case 0x0302: ch = 0x5E; break; case 0x0303: ch = 0x7E; break; case 0x030E: ch = 0x22; break; case 0x0331: ch = 0x5F; break; case 0x0332: ch = 0x5F; break; case 0x060C: ch = 0xAC; break; case 0x061B: ch = 0xBB; break; case 0x061F: ch = 0xBF; break; case 0x0621: case 0x0622: case 0x0623: case 0x0624: case 0x0625: case 0x0626: case 0x0627: case 0x0628: case 0x0629: case 0x062A: case 0x062B: case 0x062C: case 0x062D: case 0x062E: case 0x062F: case 0x0630: case 0x0631: case 0x0632: case 0x0633: case 0x0634: case 0x0635: case 0x0636: case 0x0637: case 0x0638: case 0x0639: case 0x063A: ch -= 0x0560; break; case 0x0640: case 0x0641: case 0x0642: case 0x0643: case 0x0644: case 0x0645: case 0x0646: case 0x0647: case 0x0648: case 0x0649: case 0x064A: case 0x064B: case 0x064C: case 0x064D: case 0x064E: case 0x064F: case 0x0650: case 0x0651: case 0x0652: ch -= 0x0560; break; case 0x2000: ch = 0x20; break; case 0x2001: ch = 0x20; break; case 0x2002: ch = 0x20; break; case 0x2003: ch = 0x20; break; case 0x2004: ch = 0x20; break; case 0x2005: ch = 0x20; break; case 0x2006: ch = 0x20; break; case 0x2010: ch = 0x2D; break; case 0x2011: ch = 0x2D; break; case 0x2013: ch = 0x2D; break; case 0x2014: ch = 0x2D; break; case 0x2018: ch = 0x27; break; case 0x2019: ch = 0x27; break; case 0x201A: ch = 0x2C; break; case 0x201C: ch = 0x22; break; case 0x201D: ch = 0x22; break; case 0x201E: ch = 0x22; break; case 0x2022: ch = 0x2E; break; case 0x2026: ch = 0x2E; break; case 0x2032: ch = 0x27; break; case 0x2035: ch = 0x60; break; case 0x2039: ch = 0x3C; break; case 0x203A: ch = 0x3E; break; case 0x2122: ch = 0x54; break; case 0xF7C8: ch = 0xA1; break; case 0xF7C9: ch = 0xA2; break; case 0xF7CA: ch = 0xA3; break; case 0xF7CB: case 0xF7CC: case 0xF7CD: case 0xF7CE: case 0xF7CF: case 0xF7D0: case 0xF7D1: ch -= 0xF726; break; case 0xF7D2: case 0xF7D3: case 0xF7D4: case 0xF7D5: case 0xF7D6: case 0xF7D7: case 0xF7D8: case 0xF7D9: case 0xF7DA: case 0xF7DB: case 0xF7DC: case 0xF7DD: case 0xF7DE: ch -= 0xF724; break; case 0xF7DF: ch = 0xBC; break; case 0xF7E0: ch = 0xBD; break; case 0xF7E1: ch = 0xBE; break; case 0xF7E2: ch = 0xC0; break; case 0xF7E3: case 0xF7E4: case 0xF7E5: case 0xF7E6: case 0xF7E7: ch -= 0xF708; break; case 0xF7E8: case 0xF7E9: case 0xF7EA: case 0xF7EB: case 0xF7EC: case 0xF7ED: case 0xF7EE: case 0xF7EF: case 0xF7F0: case 0xF7F1: case 0xF7F2: case 0xF7F3: case 0xF7F4: ch -= 0xF6F5; break; case 0xFF01: case 0xFF02: case 0xFF03: case 0xFF04: case 0xFF05: case 0xFF06: case 0xFF07: case 0xFF08: case 0xFF09: case 0xFF0A: case 0xFF0B: case 0xFF0C: case 0xFF0D: case 0xFF0E: case 0xFF0F: case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: case 0xFF1A: case 0xFF1B: case 0xFF1C: case 0xFF1D: case 0xFF1E: ch -= 0xFEE0; break; case 0xFF20: case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: case 0xFF3B: case 0xFF3C: case 0xFF3D: case 0xFF3E: case 0xFF3F: case 0xFF40: case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: case 0xFF5B: case 0xFF5C: case 0xFF5D: case 0xFF5E: ch -= 0xFEE0; break; default: HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); charIndex++; charCount--; continue; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; charIndex++; charCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A0: ch = 0xFF; break; case 0x00A1: ch = 0xAD; break; case 0x00A2: ch = 0xBD; break; case 0x00A3: ch = 0x9C; break; case 0x00A4: ch = 0xCF; break; case 0x00A5: ch = 0xBE; break; case 0x00A6: ch = 0xDD; break; case 0x00A7: ch = 0xF5; break; case 0x00A8: ch = 0xF9; break; case 0x00A9: ch = 0xB8; break; case 0x00AA: ch = 0xA6; break; case 0x00AB: ch = 0xAE; break; case 0x00AC: ch = 0xAA; break; case 0x00AD: ch = 0xF0; break; case 0x00AE: ch = 0xA9; break; case 0x00AF: ch = 0xEE; break; case 0x00B0: ch = 0xF8; break; case 0x00B1: ch = 0xF1; break; case 0x00B2: ch = 0xFD; break; case 0x00B3: ch = 0xFC; break; case 0x00B4: ch = 0xEF; break; case 0x00B5: ch = 0xE6; break; case 0x00B6: ch = 0xF4; break; case 0x00B7: ch = 0xFA; break; case 0x00B8: ch = 0xF7; break; case 0x00B9: ch = 0xFB; break; case 0x00BA: ch = 0xA7; break; case 0x00BB: ch = 0xAF; break; case 0x00BC: ch = 0xAC; break; case 0x00BD: ch = 0xAB; break; case 0x00BE: ch = 0xF3; break; case 0x00BF: ch = 0xA8; break; case 0x00C0: ch = 0xB7; break; case 0x00C1: ch = 0xB5; break; case 0x00C2: ch = 0xB6; break; case 0x00C3: ch = 0xC7; break; case 0x00C4: ch = 0x8E; break; case 0x00C5: ch = 0x8F; break; case 0x00C6: ch = 0x92; break; case 0x00C7: ch = 0x80; break; case 0x00C8: ch = 0xD4; break; case 0x00C9: ch = 0x90; break; case 0x00CA: ch = 0xD2; break; case 0x00CB: ch = 0xD3; break; case 0x00CC: ch = 0xDE; break; case 0x00CD: ch = 0xD6; break; case 0x00CE: ch = 0xD7; break; case 0x00CF: ch = 0xD8; break; case 0x00D0: ch = 0xD1; break; case 0x00D1: ch = 0xA5; break; case 0x00D2: ch = 0xE3; break; case 0x00D3: ch = 0xE0; break; case 0x00D4: ch = 0xE2; break; case 0x00D5: ch = 0xE5; break; case 0x00D6: ch = 0x99; break; case 0x00D7: ch = 0x9E; break; case 0x00D8: ch = 0x9D; break; case 0x00D9: ch = 0xEB; break; case 0x00DA: ch = 0xE9; break; case 0x00DB: ch = 0xEA; break; case 0x00DC: ch = 0x9A; break; case 0x00DD: ch = 0xED; break; case 0x00DE: ch = 0xE8; break; case 0x00DF: ch = 0xE1; break; case 0x00E0: ch = 0x85; break; case 0x00E1: ch = 0xA0; break; case 0x00E2: ch = 0x83; break; case 0x00E3: ch = 0xC6; break; case 0x00E4: ch = 0x84; break; case 0x00E5: ch = 0x86; break; case 0x00E6: ch = 0x91; break; case 0x00E7: ch = 0x87; break; case 0x00E8: ch = 0x8A; break; case 0x00E9: ch = 0x82; break; case 0x00EA: ch = 0x88; break; case 0x00EB: ch = 0x89; break; case 0x00EC: ch = 0x8D; break; case 0x00ED: ch = 0xA1; break; case 0x00EE: ch = 0x8C; break; case 0x00EF: ch = 0x8B; break; case 0x00F0: ch = 0xD0; break; case 0x00F1: ch = 0xA4; break; case 0x00F2: ch = 0x95; break; case 0x00F3: ch = 0xA2; break; case 0x00F4: ch = 0x93; break; case 0x00F5: ch = 0xE4; break; case 0x00F6: ch = 0x94; break; case 0x00F7: ch = 0xF6; break; case 0x00F8: ch = 0x9B; break; case 0x00F9: ch = 0x97; break; case 0x00FA: ch = 0xA3; break; case 0x00FB: ch = 0x96; break; case 0x00FC: ch = 0x81; break; case 0x00FD: ch = 0xEC; break; case 0x00FE: ch = 0xE7; break; case 0x00FF: ch = 0x98; break; case 0x0110: ch = 0xD1; break; case 0x0131: ch = 0xD5; break; case 0x0192: ch = 0x9F; break; case 0x2017: ch = 0xF2; break; case 0x2022: ch = 0x07; break; case 0x203C: ch = 0x13; break; case 0x203E: ch = 0xEE; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x221F: ch = 0x1C; break; case 0x2302: ch = 0x7F; break; case 0x2500: ch = 0xC4; break; case 0x2502: ch = 0xB3; break; case 0x250C: ch = 0xDA; break; case 0x2510: ch = 0xBF; break; case 0x2514: ch = 0xC0; break; case 0x2518: ch = 0xD9; break; case 0x251C: ch = 0xC3; break; case 0x2524: ch = 0xB4; break; case 0x252C: ch = 0xC2; break; case 0x2534: ch = 0xC1; break; case 0x253C: ch = 0xC5; break; case 0x2550: ch = 0xCD; break; case 0x2551: ch = 0xBA; break; case 0x2554: ch = 0xC9; break; case 0x2557: ch = 0xBB; break; case 0x255A: ch = 0xC8; break; case 0x255D: ch = 0xBC; break; case 0x2560: ch = 0xCC; break; case 0x2563: ch = 0xB9; break; case 0x2566: ch = 0xCB; break; case 0x2569: ch = 0xCA; break; case 0x256C: ch = 0xCE; break; case 0x2580: ch = 0xDF; break; case 0x2584: ch = 0xDC; break; case 0x2588: ch = 0xDB; break; case 0x2591: ch = 0xB0; break; case 0x2592: ch = 0xB1; break; case 0x2593: ch = 0xB2; break; case 0x25A0: ch = 0xFE; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x25CB: ch = 0x09; break; case 0x25D8: ch = 0x08; break; case 0x25D9: ch = 0x0A; break; case 0x263A: ch = 0x01; break; case 0x263B: ch = 0x02; break; case 0x263C: ch = 0x0F; break; case 0x2640: ch = 0x0C; break; case 0x2642: ch = 0x0B; break; case 0x2660: ch = 0x06; break; case 0x2663: ch = 0x05; break; case 0x2665: ch = 0x03; break; case 0x2666: ch = 0x04; break; case 0x266A: ch = 0x0D; break; case 0x266C: ch = 0x0E; break; case 0xFFE8: ch = 0xB3; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFED: ch = 0xFE; break; case 0xFFEE: ch = 0x09; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 161) { switch (ch) { case 0x00A4: case 0x00A7: case 0x00A8: case 0x00AD: case 0x00B0: case 0x00B4: case 0x00B8: case 0x00C1: case 0x00C2: case 0x00C4: case 0x00C7: case 0x00C9: case 0x00CB: case 0x00CD: case 0x00CE: case 0x00D0: case 0x00D3: case 0x00D4: case 0x00D6: case 0x00D7: case 0x00DA: case 0x00DC: case 0x00DD: case 0x00DF: case 0x00E1: case 0x00E2: case 0x00E4: case 0x00E7: case 0x00E9: case 0x00EB: case 0x00ED: case 0x00EE: case 0x00F3: case 0x00F4: case 0x00F6: case 0x00F7: case 0x00FA: case 0x00FC: case 0x00FD: break; case 0x00A2: ch = 0x8D; break; case 0x00A5: ch = 0x8E; break; case 0x00A9: ch = 0x88; break; case 0x00AE: ch = 0x9F; break; case 0x00B6: ch = 0x14; break; case 0x0102: ch = 0xC3; break; case 0x0103: ch = 0xE3; break; case 0x0104: ch = 0xA1; break; case 0x0105: ch = 0xB1; break; case 0x0106: ch = 0xC6; break; case 0x0107: ch = 0xE6; break; case 0x010C: ch = 0xC8; break; case 0x010D: ch = 0xE8; break; case 0x010E: ch = 0xCF; break; case 0x010F: ch = 0xEF; break; case 0x0110: ch = 0xD0; break; case 0x0111: ch = 0xF0; break; case 0x0118: ch = 0xCA; break; case 0x0119: ch = 0xEA; break; case 0x011A: ch = 0xCC; break; case 0x011B: ch = 0xEC; break; case 0x0139: ch = 0xC5; break; case 0x013A: ch = 0xE5; break; case 0x013D: ch = 0xA5; break; case 0x013E: ch = 0xB5; break; case 0x0141: ch = 0xA3; break; case 0x0142: ch = 0xB3; break; case 0x0143: ch = 0xD1; break; case 0x0144: ch = 0xF1; break; case 0x0147: ch = 0xD2; break; case 0x0148: ch = 0xF2; break; case 0x0150: ch = 0xD5; break; case 0x0151: ch = 0xF5; break; case 0x0154: ch = 0xC0; break; case 0x0155: ch = 0xE0; break; case 0x0158: ch = 0xD8; break; case 0x0159: ch = 0xF8; break; case 0x015A: ch = 0xA6; break; case 0x015B: ch = 0xB6; break; case 0x015E: ch = 0xAA; break; case 0x015F: ch = 0xBA; break; case 0x0160: ch = 0xA9; break; case 0x0161: ch = 0xB9; break; case 0x0162: ch = 0xDE; break; case 0x0163: ch = 0xFE; break; case 0x0164: ch = 0xAB; break; case 0x0165: ch = 0xBB; break; case 0x016E: ch = 0xD9; break; case 0x016F: ch = 0xF9; break; case 0x0170: ch = 0xDB; break; case 0x0171: ch = 0xFB; break; case 0x0179: ch = 0xAC; break; case 0x017A: ch = 0xBC; break; case 0x017B: ch = 0xAF; break; case 0x017C: ch = 0xBF; break; case 0x017D: ch = 0xAE; break; case 0x017E: ch = 0xBE; break; case 0x02C7: ch = 0xB7; break; case 0x02D8: ch = 0xA2; break; case 0x02D9: ch = 0xFF; break; case 0x02DB: ch = 0xB2; break; case 0x02DD: ch = 0xBD; break; case 0x2022: ch = 0x07; break; case 0x203C: ch = 0x13; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x221F: ch = 0x1C; break; case 0x2500: ch = 0x94; break; case 0x2502: ch = 0x83; break; case 0x250C: ch = 0x86; break; case 0x2510: ch = 0x8F; break; case 0x2514: ch = 0x90; break; case 0x2518: ch = 0x85; break; case 0x251C: ch = 0x93; break; case 0x2524: ch = 0x84; break; case 0x252C: ch = 0x92; break; case 0x2534: ch = 0x91; break; case 0x253C: ch = 0x95; break; case 0x2550: ch = 0x9D; break; case 0x2551: ch = 0x8A; break; case 0x2554: ch = 0x99; break; case 0x2557: ch = 0x8B; break; case 0x255A: ch = 0x98; break; case 0x255D: ch = 0x8C; break; case 0x2560: ch = 0x9C; break; case 0x2563: ch = 0x89; break; case 0x2566: ch = 0x9B; break; case 0x2569: ch = 0x9A; break; case 0x256C: ch = 0x9E; break; case 0x2580: ch = 0x97; break; case 0x2584: ch = 0x96; break; case 0x2588: ch = 0x87; break; case 0x2591: ch = 0x80; break; case 0x2592: ch = 0x81; break; case 0x2593: ch = 0x82; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x25CB: ch = 0x09; break; case 0x25D8: ch = 0x08; break; case 0x25D9: ch = 0x0A; break; case 0x263A: ch = 0x01; break; case 0x263B: ch = 0x02; break; case 0x263C: ch = 0x0F; break; case 0x2640: ch = 0x0C; break; case 0x2642: ch = 0x0B; break; case 0x2660: ch = 0x06; break; case 0x2663: ch = 0x05; break; case 0x2665: ch = 0x03; break; case 0x2666: ch = 0x04; break; case 0x266A: ch = 0x0D; break; case 0x266C: ch = 0x0E; break; case 0xFFE8: ch = 0x83; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFEE: ch = 0x09; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x4F; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0x5B; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0x4A; break; case 0x005C: ch = 0xE0; break; case 0x005D: ch = 0x5A; break; case 0x005E: ch = 0x5F; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: ch += 0x0020; break; case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: ch += 0x0027; break; case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x002F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0x6A; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA1; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A0: ch = 0x74; break; case 0x00A3: ch = 0xB0; break; case 0x00A6: ch = 0xDF; break; case 0x00A7: ch = 0xEB; break; case 0x00A8: ch = 0x70; break; case 0x00A9: ch = 0xFB; break; case 0x00AB: ch = 0xEE; break; case 0x00AC: ch = 0xEF; break; case 0x00AD: ch = 0xCA; break; case 0x00B0: ch = 0x90; break; case 0x00B1: ch = 0xDA; break; case 0x00B2: ch = 0xEA; break; case 0x00B3: ch = 0xFA; break; case 0x00B4: ch = 0xA0; break; case 0x00B7: ch = 0xDD; break; case 0x00BB: ch = 0xFE; break; case 0x00BD: ch = 0xDB; break; case 0x0385: ch = 0x80; break; case 0x0386: ch = 0x71; break; case 0x0387: ch = 0xDD; break; case 0x0388: ch = 0x72; break; case 0x0389: ch = 0x73; break; case 0x038A: ch = 0x75; break; case 0x038C: ch = 0x76; break; case 0x038E: ch = 0x77; break; case 0x038F: ch = 0x78; break; case 0x0390: ch = 0xCC; break; case 0x0391: case 0x0392: case 0x0393: case 0x0394: case 0x0395: case 0x0396: case 0x0397: case 0x0398: case 0x0399: ch -= 0x0350; break; case 0x039A: case 0x039B: case 0x039C: case 0x039D: case 0x039E: case 0x039F: case 0x03A0: case 0x03A1: ch -= 0x0349; break; case 0x03A3: ch = 0x59; break; case 0x03A4: case 0x03A5: case 0x03A6: case 0x03A7: case 0x03A8: case 0x03A9: case 0x03AA: case 0x03AB: ch -= 0x0342; break; case 0x03AC: ch = 0xB1; break; case 0x03AD: ch = 0xB2; break; case 0x03AE: ch = 0xB3; break; case 0x03AF: ch = 0xB5; break; case 0x03B0: ch = 0xCD; break; case 0x03B1: case 0x03B2: case 0x03B3: case 0x03B4: case 0x03B5: case 0x03B6: ch -= 0x0327; break; case 0x03B7: case 0x03B8: case 0x03B9: case 0x03BA: case 0x03BB: case 0x03BC: ch -= 0x031D; break; case 0x03BD: case 0x03BE: case 0x03BF: case 0x03C0: case 0x03C1: ch -= 0x0313; break; case 0x03C2: ch = 0xBA; break; case 0x03C3: ch = 0xAF; break; case 0x03C4: case 0x03C5: case 0x03C6: case 0x03C7: case 0x03C8: ch -= 0x0309; break; case 0x03C9: ch = 0xCB; break; case 0x03CA: ch = 0xB4; break; case 0x03CB: ch = 0xB8; break; case 0x03CC: ch = 0xB6; break; case 0x03CD: ch = 0xB7; break; case 0x03CE: ch = 0xB9; break; case 0x03D5: ch = 0xBD; break; case 0x2015: ch = 0xCF; break; case 0x2018: ch = 0xCE; break; case 0x2019: ch = 0xDE; break; case 0xFF01: ch = 0x4F; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0x5B; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0x4A; break; case 0xFF3C: ch = 0xE0; break; case 0xFF3D: ch = 0x5A; break; case 0xFF3E: ch = 0x5F; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: ch -= 0xFEC0; break; case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: ch -= 0xFEB9; break; case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEB1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0x6A; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA1; break; default: #if NET_2_0 HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); #else ch = 0x3F; #endif break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A0: ch = 0xFF; break; case 0x00A1: ch = 0xAD; break; case 0x00A3: ch = 0x9C; break; case 0x00A4: ch = 0xAF; break; case 0x00A7: ch = 0x15; break; case 0x00AA: ch = 0xA6; break; case 0x00AB: ch = 0xAE; break; case 0x00AC: ch = 0xAA; break; case 0x00B0: ch = 0xF8; break; case 0x00B1: ch = 0xF1; break; case 0x00B2: ch = 0xFD; break; case 0x00B6: ch = 0x14; break; case 0x00B7: ch = 0xFA; break; case 0x00BA: ch = 0xA7; break; case 0x00BC: ch = 0xAC; break; case 0x00BD: ch = 0xAB; break; case 0x00BF: ch = 0xA8; break; case 0x00C4: ch = 0x8E; break; case 0x00C5: ch = 0x8F; break; case 0x00C6: ch = 0x92; break; case 0x00C7: ch = 0x80; break; case 0x00C9: ch = 0x90; break; case 0x00D1: ch = 0xA5; break; case 0x00D6: ch = 0x99; break; case 0x00D8: ch = 0x9D; break; case 0x00DC: ch = 0x9A; break; case 0x00DF: ch = 0xE1; break; case 0x00E0: ch = 0x85; break; case 0x00E1: ch = 0xA0; break; case 0x00E2: ch = 0x83; break; case 0x00E4: ch = 0x84; break; case 0x00E5: ch = 0x86; break; case 0x00E6: ch = 0x91; break; case 0x00E7: ch = 0x87; break; case 0x00E8: ch = 0x8A; break; case 0x00E9: ch = 0x82; break; case 0x00EA: ch = 0x88; break; case 0x00EB: ch = 0x89; break; case 0x00EC: ch = 0x8D; break; case 0x00ED: ch = 0xA1; break; case 0x00EE: ch = 0x8C; break; case 0x00EF: ch = 0x8B; break; case 0x00F1: ch = 0xA4; break; case 0x00F2: ch = 0x95; break; case 0x00F3: ch = 0xA2; break; case 0x00F4: ch = 0x93; break; case 0x00F6: ch = 0x94; break; case 0x00F7: ch = 0xF6; break; case 0x00F8: ch = 0x9B; break; case 0x00F9: ch = 0x97; break; case 0x00FA: ch = 0xA3; break; case 0x00FB: ch = 0x96; break; case 0x00FC: ch = 0x81; break; case 0x00FF: ch = 0x98; break; case 0x0192: ch = 0x9F; break; case 0x0393: ch = 0xE2; break; case 0x0398: ch = 0xE9; break; case 0x03A3: ch = 0xE4; break; case 0x03A6: ch = 0xE8; break; case 0x03A9: ch = 0xEA; break; case 0x03B1: ch = 0xE0; break; case 0x03B4: ch = 0xEB; break; case 0x03B5: ch = 0xEE; break; case 0x03BC: ch = 0xE6; break; case 0x03C0: ch = 0xE3; break; case 0x03C3: ch = 0xE5; break; case 0x03C4: ch = 0xE7; break; case 0x03C6: ch = 0xED; break; case 0x2022: ch = 0x07; break; case 0x203C: ch = 0x13; break; case 0x207F: ch = 0xFC; break; case 0x20A7: ch = 0x9E; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x2219: ch = 0xF9; break; case 0x221A: ch = 0xFB; break; case 0x221E: ch = 0xEC; break; case 0x221F: ch = 0x1C; break; case 0x2229: ch = 0xEF; break; case 0x2248: ch = 0xF7; break; case 0x2261: ch = 0xF0; break; case 0x2264: ch = 0xF3; break; case 0x2265: ch = 0xF2; break; case 0x2302: ch = 0x7F; break; case 0x2310: ch = 0xA9; break; case 0x2320: ch = 0xF4; break; case 0x2321: ch = 0xF5; break; case 0x2500: ch = 0xC4; break; case 0x2502: ch = 0xB3; break; case 0x250C: ch = 0xDA; break; case 0x2510: ch = 0xBF; break; case 0x2514: ch = 0xC0; break; case 0x2518: ch = 0xD9; break; case 0x251C: ch = 0xC3; break; case 0x2524: ch = 0xB4; break; case 0x252C: ch = 0xC2; break; case 0x2534: ch = 0xC1; break; case 0x253C: ch = 0xC5; break; case 0x2550: ch = 0xCD; break; case 0x2551: ch = 0xBA; break; case 0x2552: ch = 0xD5; break; case 0x2553: ch = 0xD6; break; case 0x2554: ch = 0xC9; break; case 0x2555: ch = 0xB8; break; case 0x2556: ch = 0xB7; break; case 0x2557: ch = 0xBB; break; case 0x2558: ch = 0xD4; break; case 0x2559: ch = 0xD3; break; case 0x255A: ch = 0xC8; break; case 0x255B: ch = 0xBE; break; case 0x255C: ch = 0xBD; break; case 0x255D: ch = 0xBC; break; case 0x255E: ch = 0xC6; break; case 0x255F: ch = 0xC7; break; case 0x2560: ch = 0xCC; break; case 0x2561: ch = 0xB5; break; case 0x2562: ch = 0xB6; break; case 0x2563: ch = 0xB9; break; case 0x2564: ch = 0xD1; break; case 0x2565: ch = 0xD2; break; case 0x2566: ch = 0xCB; break; case 0x2567: ch = 0xCF; break; case 0x2568: ch = 0xD0; break; case 0x2569: ch = 0xCA; break; case 0x256A: ch = 0xD8; break; case 0x256B: ch = 0xD7; break; case 0x256C: ch = 0xCE; break; case 0x2580: ch = 0xDF; break; case 0x2584: ch = 0xDC; break; case 0x2588: ch = 0xDB; break; case 0x258C: ch = 0xDD; break; case 0x2590: ch = 0xDE; break; case 0x2591: ch = 0xB0; break; case 0x2592: ch = 0xB1; break; case 0x2593: ch = 0xB2; break; case 0x25A0: ch = 0xFE; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x25CB: ch = 0x09; break; case 0x25D8: ch = 0x08; break; case 0x25D9: ch = 0x0A; break; case 0x263A: ch = 0x01; break; case 0x263B: ch = 0x02; break; case 0x263C: ch = 0x0F; break; case 0x2640: ch = 0x0C; break; case 0x2642: ch = 0x0B; break; case 0x2660: ch = 0x06; break; case 0x2663: ch = 0x05; break; case 0x2665: ch = 0x03; break; case 0x2666: ch = 0x04; break; case 0x266A: ch = 0x0D; break; case 0x266B: ch = 0x0E; break; case 0xFFE8: ch = 0xB3; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFED: ch = 0xFE; break; case 0xFFEE: ch = 0x09; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x4F; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0x5B; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0x4A; break; case 0x005C: ch = 0xE0; break; case 0x005D: ch = 0x5A; break; case 0x005E: ch = 0x5F; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: ch += 0x0020; break; case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: ch += 0x0027; break; case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x002F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0x6A; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA1; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A0: ch = 0x41; break; case 0x00A4: ch = 0x9F; break; case 0x00A7: ch = 0xB5; break; case 0x00A8: ch = 0xBD; break; case 0x00AD: ch = 0xCA; break; case 0x00B0: ch = 0x90; break; case 0x00B4: ch = 0xBE; break; case 0x00B8: ch = 0x9D; break; case 0x00C1: ch = 0x65; break; case 0x00C2: ch = 0x62; break; case 0x00C4: ch = 0x63; break; case 0x00C7: ch = 0x68; break; case 0x00C9: ch = 0x71; break; case 0x00CB: ch = 0x73; break; case 0x00CD: ch = 0x75; break; case 0x00CE: ch = 0x76; break; case 0x00D0: ch = 0xAC; break; case 0x00D3: ch = 0xEE; break; case 0x00D4: ch = 0xEB; break; case 0x00D6: ch = 0xEC; break; case 0x00D7: ch = 0xBF; break; case 0x00DA: ch = 0xFE; break; case 0x00DC: ch = 0xFC; break; case 0x00DD: ch = 0xAD; break; case 0x00DF: ch = 0x59; break; case 0x00E1: ch = 0x45; break; case 0x00E2: ch = 0x42; break; case 0x00E4: ch = 0x43; break; case 0x00E7: ch = 0x48; break; case 0x00E9: ch = 0x51; break; case 0x00EB: ch = 0x53; break; case 0x00ED: ch = 0x55; break; case 0x00EE: ch = 0x56; break; case 0x00F3: ch = 0xCE; break; case 0x00F4: ch = 0xCB; break; case 0x00F6: ch = 0xCC; break; case 0x00F7: ch = 0xE1; break; case 0x00FA: ch = 0xDE; break; case 0x00FC: ch = 0xDC; break; case 0x00FD: ch = 0x8D; break; case 0x0102: ch = 0x66; break; case 0x0103: ch = 0x46; break; case 0x0104: ch = 0xB1; break; case 0x0105: ch = 0xA0; break; case 0x0106: ch = 0x69; break; case 0x0107: ch = 0x49; break; case 0x010C: ch = 0x67; break; case 0x010D: ch = 0x47; break; case 0x010E: ch = 0xFA; break; case 0x010F: ch = 0xEA; break; case 0x0110: ch = 0xAC; break; case 0x0111: ch = 0x8C; break; case 0x0118: ch = 0x72; break; case 0x0119: ch = 0x52; break; case 0x011A: ch = 0xDA; break; case 0x011B: ch = 0xDF; break; case 0x0139: ch = 0x78; break; case 0x013A: ch = 0x58; break; case 0x013D: ch = 0x77; break; case 0x013E: ch = 0x57; break; case 0x0141: ch = 0xBA; break; case 0x0142: ch = 0x9A; break; case 0x0143: ch = 0xBB; break; case 0x0144: ch = 0x9B; break; case 0x0147: ch = 0xAB; break; case 0x0148: ch = 0x8B; break; case 0x0150: ch = 0xEF; break; case 0x0151: ch = 0xCF; break; case 0x0154: ch = 0xED; break; case 0x0155: ch = 0xCD; break; case 0x0158: ch = 0xAE; break; case 0x0159: ch = 0x8E; break; case 0x015A: ch = 0xAA; break; case 0x015B: ch = 0x8A; break; case 0x015E: ch = 0xAF; break; case 0x015F: ch = 0x8F; break; case 0x0160: ch = 0xBC; break; case 0x0161: ch = 0x9C; break; case 0x0162: ch = 0xB3; break; case 0x0163: ch = 0x44; break; case 0x0164: ch = 0xFD; break; case 0x0165: ch = 0xDD; break; case 0x016E: ch = 0x74; break; case 0x016F: ch = 0x54; break; case 0x0170: ch = 0xFB; break; case 0x0171: ch = 0xDB; break; case 0x0179: ch = 0xB9; break; case 0x017A: ch = 0xB7; break; case 0x017B: ch = 0xB4; break; case 0x017C: ch = 0xB2; break; case 0x017D: ch = 0xB8; break; case 0x017E: ch = 0xB6; break; case 0x02C7: ch = 0x70; break; case 0x02D8: ch = 0x80; break; case 0x02D9: ch = 0xB0; break; case 0x02DB: ch = 0x9E; break; case 0x02DD: ch = 0x64; break; case 0xFF01: ch = 0x4F; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0x5B; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0x4A; break; case 0xFF3C: ch = 0xE0; break; case 0xFF3D: ch = 0x5A; break; case 0xFF3E: ch = 0x5F; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: ch -= 0xFEC0; break; case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: ch -= 0xFEB9; break; case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEB1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0x6A; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA1; break; default: #if NET_2_0 HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); #else ch = 0x3F; #endif break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A0: ch = 0xFF; break; case 0x00A3: ch = 0x9C; break; case 0x00A6: ch = 0x8A; break; case 0x00A7: ch = 0xF5; break; case 0x00A8: ch = 0xF9; break; case 0x00A9: ch = 0x97; break; case 0x00AB: ch = 0xAE; break; case 0x00AC: ch = 0x89; break; case 0x00AD: ch = 0xF0; break; case 0x00B0: ch = 0xF8; break; case 0x00B1: ch = 0xF1; break; case 0x00B2: ch = 0x99; break; case 0x00B3: ch = 0x9A; break; case 0x00B4: ch = 0xEF; break; case 0x00B6: ch = 0x14; break; case 0x00B7: ch = 0x88; break; case 0x00BB: ch = 0xAF; break; case 0x00BD: ch = 0xAB; break; case 0x0385: ch = 0xF7; break; case 0x0386: ch = 0x86; break; case 0x0387: ch = 0x88; break; case 0x0388: ch = 0x8D; break; case 0x0389: ch = 0x8F; break; case 0x038A: ch = 0x90; break; case 0x038C: ch = 0x92; break; case 0x038E: ch = 0x95; break; case 0x038F: ch = 0x98; break; case 0x0390: ch = 0xA1; break; case 0x0391: case 0x0392: case 0x0393: case 0x0394: case 0x0395: case 0x0396: case 0x0397: ch -= 0x02ED; break; case 0x0398: ch = 0xAC; break; case 0x0399: ch = 0xAD; break; case 0x039A: case 0x039B: case 0x039C: case 0x039D: ch -= 0x02E5; break; case 0x039E: ch = 0xBD; break; case 0x039F: ch = 0xBE; break; case 0x03A0: ch = 0xC6; break; case 0x03A1: ch = 0xC7; break; case 0x03A3: case 0x03A4: case 0x03A5: case 0x03A6: case 0x03A7: case 0x03A8: case 0x03A9: ch -= 0x02D4; break; case 0x03AA: ch = 0x91; break; case 0x03AB: ch = 0x96; break; case 0x03AC: ch = 0x9B; break; case 0x03AD: ch = 0x9D; break; case 0x03AE: ch = 0x9E; break; case 0x03AF: ch = 0x9F; break; case 0x03B0: ch = 0xFC; break; case 0x03B1: ch = 0xD6; break; case 0x03B2: ch = 0xD7; break; case 0x03B3: ch = 0xD8; break; case 0x03B4: ch = 0xDD; break; case 0x03B5: ch = 0xDE; break; case 0x03B6: case 0x03B7: case 0x03B8: case 0x03B9: case 0x03BA: case 0x03BB: case 0x03BC: case 0x03BD: case 0x03BE: case 0x03BF: case 0x03C0: case 0x03C1: ch -= 0x02D6; break; case 0x03C2: ch = 0xED; break; case 0x03C3: ch = 0xEC; break; case 0x03C4: ch = 0xEE; break; case 0x03C5: ch = 0xF2; break; case 0x03C6: ch = 0xF3; break; case 0x03C7: ch = 0xF4; break; case 0x03C8: ch = 0xF6; break; case 0x03C9: ch = 0xFA; break; case 0x03CA: ch = 0xA0; break; case 0x03CB: ch = 0xFB; break; case 0x03CC: ch = 0xA2; break; case 0x03CD: ch = 0xA3; break; case 0x03CE: ch = 0xFD; break; case 0x03D5: ch = 0xF3; break; case 0x2015: ch = 0x8E; break; case 0x2018: ch = 0x8B; break; case 0x2019: ch = 0x8C; break; case 0x2022: ch = 0x07; break; case 0x203C: ch = 0x13; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x221F: ch = 0x1C; break; case 0x2302: ch = 0x7F; break; case 0x2500: ch = 0xC4; break; case 0x2502: ch = 0xB3; break; case 0x250C: ch = 0xDA; break; case 0x2510: ch = 0xBF; break; case 0x2514: ch = 0xC0; break; case 0x2518: ch = 0xD9; break; case 0x251C: ch = 0xC3; break; case 0x2524: ch = 0xB4; break; case 0x252C: ch = 0xC2; break; case 0x2534: ch = 0xC1; break; case 0x253C: ch = 0xC5; break; case 0x2550: ch = 0xCD; break; case 0x2551: ch = 0xBA; break; case 0x2554: ch = 0xC9; break; case 0x2557: ch = 0xBB; break; case 0x255A: ch = 0xC8; break; case 0x255D: ch = 0xBC; break; case 0x2560: ch = 0xCC; break; case 0x2563: ch = 0xB9; break; case 0x2566: ch = 0xCB; break; case 0x2569: ch = 0xCA; break; case 0x256C: ch = 0xCE; break; case 0x2580: ch = 0xDF; break; case 0x2584: ch = 0xDC; break; case 0x2588: ch = 0xDB; break; case 0x2591: ch = 0xB0; break; case 0x2592: ch = 0xB1; break; case 0x2593: ch = 0xB2; break; case 0x25A0: ch = 0xFE; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x25CB: ch = 0x09; break; case 0x25D8: ch = 0x08; break; case 0x25D9: ch = 0x0A; break; case 0x263A: ch = 0x01; break; case 0x263B: ch = 0x02; break; case 0x263C: ch = 0x0F; break; case 0x2640: ch = 0x0C; break; case 0x2642: ch = 0x0B; break; case 0x2660: ch = 0x06; break; case 0x2663: ch = 0x05; break; case 0x2665: ch = 0x03; break; case 0x2666: ch = 0x04; break; case 0x266A: ch = 0x0D; break; case 0x266B: ch = 0x0E; break; case 0xFFE8: ch = 0xB3; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFED: ch = 0xFE; break; case 0xFFEE: ch = 0x09; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 161) { switch (ch) { case 0x00A3: case 0x00A4: case 0x00A7: case 0x00A8: case 0x00AD: case 0x00B0: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B7: case 0x00B8: case 0x00BD: case 0x00C0: case 0x00C1: case 0x00C2: case 0x00C4: case 0x00C7: case 0x00C8: case 0x00C9: case 0x00CA: case 0x00CB: case 0x00CC: case 0x00CD: case 0x00CE: case 0x00CF: case 0x00D1: case 0x00D2: case 0x00D3: case 0x00D4: case 0x00D6: case 0x00D7: case 0x00D9: case 0x00DA: case 0x00DB: case 0x00DC: case 0x00DF: case 0x00E0: case 0x00E1: case 0x00E2: case 0x00E4: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00EC: case 0x00ED: case 0x00EE: case 0x00EF: case 0x00F1: case 0x00F2: case 0x00F3: case 0x00F4: case 0x00F6: case 0x00F7: case 0x00F9: case 0x00FA: case 0x00FB: case 0x00FC: break; case 0x0108: ch = 0xC6; break; case 0x0109: ch = 0xE6; break; case 0x010A: ch = 0xC5; break; case 0x010B: ch = 0xE5; break; case 0x011C: ch = 0xD8; break; case 0x011D: ch = 0xF8; break; case 0x011E: ch = 0xAB; break; case 0x011F: ch = 0xBB; break; case 0x0120: ch = 0xD5; break; case 0x0121: ch = 0xF5; break; case 0x0124: ch = 0xA6; break; case 0x0125: ch = 0xB6; break; case 0x0126: ch = 0xA1; break; case 0x0127: ch = 0xB1; break; case 0x0130: ch = 0xA9; break; case 0x0131: ch = 0xB9; break; case 0x0134: ch = 0xAC; break; case 0x0135: ch = 0xBC; break; case 0x015C: ch = 0xDE; break; case 0x015D: ch = 0xFE; break; case 0x015E: ch = 0xAA; break; case 0x015F: ch = 0xBA; break; case 0x016C: ch = 0xDD; break; case 0x016D: ch = 0xFD; break; case 0x017B: ch = 0xAF; break; case 0x017C: ch = 0xBF; break; case 0x02D8: ch = 0xA2; break; case 0x02D9: ch = 0xFF; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); --charCount; if (ch >= 128) { switch (ch) { case 0x0081: case 0x0083: case 0x0088: case 0x0090: case 0x0098: case 0x00A0: case 0x00A4: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00B0: case 0x00B1: case 0x00B4: case 0x00B5: case 0x00B6: case 0x00B7: case 0x00B8: case 0x00BB: case 0x00C1: case 0x00C2: case 0x00C4: case 0x00C7: case 0x00C9: case 0x00CB: case 0x00CD: case 0x00CE: case 0x00D3: case 0x00D4: case 0x00D6: case 0x00D7: case 0x00DA: case 0x00DC: case 0x00DD: case 0x00DF: case 0x00E1: case 0x00E2: case 0x00E4: case 0x00E7: case 0x00E9: case 0x00EB: case 0x00ED: case 0x00EE: case 0x00F3: case 0x00F4: case 0x00F6: case 0x00F7: case 0x00FA: case 0x00FC: case 0x00FD: break; case 0x0102: ch = 0xC3; break; case 0x0103: ch = 0xE3; break; case 0x0104: ch = 0xA5; break; case 0x0105: ch = 0xB9; break; case 0x0106: ch = 0xC6; break; case 0x0107: ch = 0xE6; break; case 0x010C: ch = 0xC8; break; case 0x010D: ch = 0xE8; break; case 0x010E: ch = 0xCF; break; case 0x010F: ch = 0xEF; break; case 0x0110: ch = 0xD0; break; case 0x0111: ch = 0xF0; break; case 0x0118: ch = 0xCA; break; case 0x0119: ch = 0xEA; break; case 0x011A: ch = 0xCC; break; case 0x011B: ch = 0xEC; break; case 0x0139: ch = 0xC5; break; case 0x013A: ch = 0xE5; break; case 0x013D: ch = 0xBC; break; case 0x013E: ch = 0xBE; break; case 0x0141: ch = 0xA3; break; case 0x0142: ch = 0xB3; break; case 0x0143: ch = 0xD1; break; case 0x0144: ch = 0xF1; break; case 0x0147: ch = 0xD2; break; case 0x0148: ch = 0xF2; break; case 0x0150: ch = 0xD5; break; case 0x0151: ch = 0xF5; break; case 0x0154: ch = 0xC0; break; case 0x0155: ch = 0xE0; break; case 0x0158: ch = 0xD8; break; case 0x0159: ch = 0xF8; break; case 0x015A: ch = 0x8C; break; case 0x015B: ch = 0x9C; break; case 0x015E: ch = 0xAA; break; case 0x015F: ch = 0xBA; break; case 0x0160: ch = 0x8A; break; case 0x0161: ch = 0x9A; break; case 0x0162: ch = 0xDE; break; case 0x0163: ch = 0xFE; break; case 0x0164: ch = 0x8D; break; case 0x0165: ch = 0x9D; break; case 0x016E: ch = 0xD9; break; case 0x016F: ch = 0xF9; break; case 0x0170: ch = 0xDB; break; case 0x0171: ch = 0xFB; break; case 0x0179: ch = 0x8F; break; case 0x017A: ch = 0x9F; break; case 0x017B: ch = 0xAF; break; case 0x017C: ch = 0xBF; break; case 0x017D: ch = 0x8E; break; case 0x017E: ch = 0x9E; break; case 0x02C7: ch = 0xA1; break; case 0x02D8: ch = 0xA2; break; case 0x02D9: ch = 0xFF; break; case 0x02DB: ch = 0xB2; break; case 0x02DD: ch = 0xBD; break; case 0x2013: ch = 0x96; break; case 0x2014: ch = 0x97; break; case 0x2018: ch = 0x91; break; case 0x2019: ch = 0x92; break; case 0x201A: ch = 0x82; break; case 0x201C: ch = 0x93; break; case 0x201D: ch = 0x94; break; case 0x201E: ch = 0x84; break; case 0x2020: ch = 0x86; break; case 0x2021: ch = 0x87; break; case 0x2022: ch = 0x95; break; case 0x2026: ch = 0x85; break; case 0x2030: ch = 0x89; break; case 0x2039: ch = 0x8B; break; case 0x203A: ch = 0x9B; break; case 0x20AC: ch = 0x80; break; case 0x2122: ch = 0x99; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { #if NET_2_0 HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; #else ch = 0x3F; #endif } } break; } } bytes[byteIndex++] = (byte)ch; --byteCount; } }
public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush) { if (chars == null) { throw new ArgumentNullException("chars"); } if (charIndex < 0 || charIndex > chars.Length) { throw new ArgumentOutOfRangeException("charIndex"); } if (charCount < 0) { throw new ArgumentOutOfRangeException("charCount"); } if (charIndex + charCount > chars.Length) { throw new ArgumentOutOfRangeException("chars"); } if (bytes == null) { throw new ArgumentNullException("bytes"); } if (byteIndex < 0 || byteIndex > bytes.Length) { throw new ArgumentOutOfRangeException("byteIndex"); } // The fallbackBuffer is created on-demand. The instance // FallbackBuffer isn't used because it wouldn't be thread safe. EncoderFallbackBuffer fallbackBuffer = null; // Written only on flush = false char highSurrogate = HighSurrogate; int charCount2 = charIndex + charCount; int byteIndex2 = byteIndex; for (; charIndex < charCount2; charIndex++) { char ch = chars[charIndex]; if (highSurrogate != 0) { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } // If we have a High/Low surrogates couple, we pass them // together if (char.IsLowSurrogate(ch)) { if (fallbackBuffer.Fallback(highSurrogate, ch, charIndex - 1)) { HandleFallbackWrite(fallbackBuffer, bytes, ref byteIndex2); } highSurrogate = '\0'; continue; } else { // First we pass the High surrogate to the Fallback if (fallbackBuffer.Fallback(highSurrogate, charIndex - 1)) { HandleFallbackWrite(fallbackBuffer, bytes, ref byteIndex2); } highSurrogate = '\0'; // Then we fall-through normal handling } } byte b; if (ch < VISCIIs.Length && ((b = VISCIIs[ch]) != 0 || ch == '\0')) { // Recognized character WriteByte(bytes, byteIndex2, b); byteIndex2++; } else { // High/low surrogate handling, done through buffer if (char.IsHighSurrogate(ch)) { highSurrogate = ch; } else { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } // Fallback if (fallbackBuffer.Fallback(ch, charIndex)) { HandleFallbackWrite(fallbackBuffer, bytes, ref byteIndex2); } } } } if (flush) { if (highSurrogate != 0) { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } if (fallbackBuffer.Fallback(highSurrogate, charIndex - 1)) { HandleFallbackWrite(fallbackBuffer, bytes, ref byteIndex2); } } } else { HighSurrogate = highSurrogate; } return(byteIndex2 - byteIndex); }
public override int GetByteCount(char[] chars, int index, int count, bool flush) { if (chars == null) { throw new ArgumentNullException("chars"); } if (index < 0 || index > chars.Length) { throw new ArgumentOutOfRangeException("index"); } if (count < 0) { throw new ArgumentOutOfRangeException("count"); } if (index + count > chars.Length) { throw new ArgumentOutOfRangeException("chars"); } // The fallbackBuffer is created on-demand. The instance // FallbackBuffer isn't used because it wouldn't be thread safe. EncoderFallbackBuffer fallbackBuffer = null; char highSurrogate = HighSurrogate; int ret = 0; int count2 = index + count; for (; index < count2; index++) { char ch = chars[index]; if (highSurrogate != 0) { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } // If we have a High/Low surrogates couple, we pass them // together if (char.IsLowSurrogate(ch)) { if (fallbackBuffer.Fallback(highSurrogate, ch, index - 1)) { HandleFallbackCount(fallbackBuffer, ref ret); } highSurrogate = '\0'; continue; } else { // First we pass the High surrogate to the Fallback if (fallbackBuffer.Fallback(highSurrogate, index - 1)) { HandleFallbackCount(fallbackBuffer, ref ret); } highSurrogate = '\0'; // Then we fall-through normal handling } } if (ch < VISCIIs.Length && (VISCIIs[ch] != 0 || ch == '\0')) { ret++; } else { // High/low surrogate handling, done through buffer if (char.IsHighSurrogate(ch)) { highSurrogate = ch; } else { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } // Fallback if (fallbackBuffer.Fallback(ch, index)) { HandleFallbackCount(fallbackBuffer, ref ret); } } } } if (flush) { if (highSurrogate != 0) { if (fallbackBuffer == null) { fallbackBuffer = (Fallback ?? EncoderFallback.ReplacementFallback).CreateFallbackBuffer(); } if (fallbackBuffer.Fallback(highSurrogate, index - 1)) { HandleFallbackCount(fallbackBuffer, ref ret); } } } return(ret); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 161) { switch (ch) { case 0x00A3: case 0x00A4: case 0x00A7: case 0x00A8: case 0x00AD: case 0x00B0: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B7: case 0x00B8: case 0x00BD: case 0x00C0: case 0x00C1: case 0x00C2: case 0x00C4: case 0x00C7: case 0x00C8: case 0x00C9: case 0x00CA: case 0x00CB: case 0x00CC: case 0x00CD: case 0x00CE: case 0x00CF: case 0x00D1: case 0x00D2: case 0x00D3: case 0x00D4: case 0x00D6: case 0x00D7: case 0x00D9: case 0x00DA: case 0x00DB: case 0x00DC: case 0x00DF: case 0x00E0: case 0x00E1: case 0x00E2: case 0x00E4: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00EC: case 0x00ED: case 0x00EE: case 0x00EF: case 0x00F1: case 0x00F2: case 0x00F3: case 0x00F4: case 0x00F6: case 0x00F7: case 0x00F9: case 0x00FA: case 0x00FB: case 0x00FC: break; case 0x0108: ch = 0xC6; break; case 0x0109: ch = 0xE6; break; case 0x010A: ch = 0xC5; break; case 0x010B: ch = 0xE5; break; case 0x011C: ch = 0xD8; break; case 0x011D: ch = 0xF8; break; case 0x011E: ch = 0xAB; break; case 0x011F: ch = 0xBB; break; case 0x0120: ch = 0xD5; break; case 0x0121: ch = 0xF5; break; case 0x0124: ch = 0xA6; break; case 0x0125: ch = 0xB6; break; case 0x0126: ch = 0xA1; break; case 0x0127: ch = 0xB1; break; case 0x0130: ch = 0xA9; break; case 0x0131: ch = 0xB9; break; case 0x0134: ch = 0xAC; break; case 0x0135: ch = 0xBC; break; case 0x015C: ch = 0xDE; break; case 0x015D: ch = 0xFE; break; case 0x015E: ch = 0xAA; break; case 0x015F: ch = 0xBA; break; case 0x016C: ch = 0xDD; break; case 0x016D: ch = 0xFD; break; case 0x017B: ch = 0xAF; break; case 0x017C: ch = 0xBF; break; case 0x02D8: ch = 0xA2; break; case 0x02D9: ch = 0xFF; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: case 0x00A0: case 0x00A3: case 0x00A4: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A2: ch = 0xC0; break; case 0x00A6: ch = 0xDB; break; case 0x00A7: ch = 0x15; break; case 0x00AB: ch = 0x97; break; case 0x00AC: ch = 0xDC; break; case 0x00AD: ch = 0xA1; break; case 0x00B0: ch = 0x80; break; case 0x00B1: ch = 0x93; break; case 0x00B6: ch = 0x14; break; case 0x00B7: ch = 0x81; break; case 0x00BB: ch = 0x98; break; case 0x00BC: ch = 0x95; break; case 0x00BD: ch = 0x94; break; case 0x00D7: ch = 0xDE; break; case 0x00F7: ch = 0xDD; break; case 0x03B2: ch = 0x90; break; case 0x03C6: ch = 0x92; break; case 0x060C: ch = 0xAC; break; case 0x061B: ch = 0xBB; break; case 0x061F: ch = 0xBF; break; case 0x0621: case 0x0622: case 0x0623: case 0x0624: ch -= 0x0560; break; case 0x0626: case 0x0627: case 0x0628: case 0x0629: case 0x062A: case 0x062B: case 0x062C: case 0x062D: case 0x062E: case 0x062F: case 0x0630: case 0x0631: case 0x0632: case 0x0633: case 0x0634: case 0x0635: case 0x0636: case 0x0637: case 0x0638: case 0x0639: case 0x063A: ch -= 0x0560; break; case 0x0640: case 0x0641: case 0x0642: case 0x0643: case 0x0644: case 0x0645: case 0x0646: case 0x0647: case 0x0648: case 0x0649: ch -= 0x0560; break; case 0x064A: ch = 0xFD; break; case 0x0651: ch = 0xF1; break; case 0x0660: case 0x0661: case 0x0662: case 0x0663: case 0x0664: case 0x0665: case 0x0666: case 0x0667: case 0x0668: case 0x0669: ch -= 0x05B0; break; case 0x066A: ch = 0x25; break; case 0x066B: ch = 0x2C; break; case 0x066C: ch = 0x2E; break; case 0x066D: ch = 0x2A; break; case 0x200B: ch = 0x9F; break; case 0x203C: ch = 0x13; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x2219: ch = 0x82; break; case 0x221A: ch = 0x83; break; case 0x221E: ch = 0x91; break; case 0x221F: ch = 0x1C; break; case 0x2248: ch = 0x96; break; case 0x2302: ch = 0x7F; break; case 0x2500: ch = 0x85; break; case 0x2502: ch = 0x86; break; case 0x250C: ch = 0x8D; break; case 0x2510: ch = 0x8C; break; case 0x2514: ch = 0x8E; break; case 0x2518: ch = 0x8F; break; case 0x251C: ch = 0x8A; break; case 0x2524: ch = 0x88; break; case 0x252C: ch = 0x89; break; case 0x2534: ch = 0x8B; break; case 0x253C: ch = 0x87; break; case 0x2550: ch = 0x05; break; case 0x2551: ch = 0x06; break; case 0x2554: ch = 0x0D; break; case 0x2557: ch = 0x0C; break; case 0x255A: ch = 0x0E; break; case 0x255D: ch = 0x0F; break; case 0x2560: ch = 0x0A; break; case 0x2563: ch = 0x08; break; case 0x2566: ch = 0x09; break; case 0x2569: ch = 0x0B; break; case 0x256C: ch = 0x07; break; case 0x2592: ch = 0x84; break; case 0x25A0: ch = 0xFE; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x263A: ch = 0x01; break; case 0x263C: ch = 0x04; break; case 0x266A: ch = 0x02; break; case 0x266C: ch = 0x03; break; case 0xFE7C: ch = 0xF1; break; case 0xFE7D: ch = 0xF0; break; case 0xFE80: ch = 0xC1; break; case 0xFE81: ch = 0xC2; break; case 0xFE82: ch = 0xA2; break; case 0xFE83: ch = 0xC3; break; case 0xFE84: ch = 0xA5; break; case 0xFE85: ch = 0xC4; break; case 0xFE86: ch = 0xC4; break; case 0xFE8B: ch = 0xC6; break; case 0xFE8C: ch = 0xC6; break; case 0xFE8D: ch = 0xC7; break; case 0xFE8E: ch = 0xA8; break; case 0xFE8F: ch = 0xA9; break; case 0xFE90: ch = 0xA9; break; case 0xFE91: ch = 0xC8; break; case 0xFE92: ch = 0xC8; break; case 0xFE93: ch = 0xC9; break; case 0xFE94: ch = 0xC9; break; case 0xFE95: ch = 0xAA; break; case 0xFE96: ch = 0xAA; break; case 0xFE97: ch = 0xCA; break; case 0xFE98: ch = 0xCA; break; case 0xFE99: ch = 0xAB; break; case 0xFE9A: ch = 0xAB; break; case 0xFE9B: ch = 0xCB; break; case 0xFE9C: ch = 0xCB; break; case 0xFE9D: ch = 0xAD; break; case 0xFE9E: ch = 0xAD; break; case 0xFE9F: ch = 0xCC; break; case 0xFEA0: ch = 0xCC; break; case 0xFEA1: ch = 0xAE; break; case 0xFEA2: ch = 0xAE; break; case 0xFEA3: ch = 0xCD; break; case 0xFEA4: ch = 0xCD; break; case 0xFEA5: ch = 0xAF; break; case 0xFEA6: ch = 0xAF; break; case 0xFEA7: ch = 0xCE; break; case 0xFEA8: ch = 0xCE; break; case 0xFEA9: ch = 0xCF; break; case 0xFEAA: ch = 0xCF; break; case 0xFEAB: ch = 0xD0; break; case 0xFEAC: ch = 0xD0; break; case 0xFEAD: ch = 0xD1; break; case 0xFEAE: ch = 0xD1; break; case 0xFEAF: ch = 0xD2; break; case 0xFEB0: ch = 0xD2; break; case 0xFEB1: ch = 0xBC; break; case 0xFEB2: ch = 0xBC; break; case 0xFEB3: ch = 0xD3; break; case 0xFEB4: ch = 0xD3; break; case 0xFEB5: ch = 0xBD; break; case 0xFEB6: ch = 0xBD; break; case 0xFEB7: ch = 0xD4; break; case 0xFEB8: ch = 0xD4; break; case 0xFEB9: ch = 0xBE; break; case 0xFEBA: ch = 0xBE; break; case 0xFEBB: ch = 0xD5; break; case 0xFEBC: ch = 0xD5; break; case 0xFEBD: ch = 0xEB; break; case 0xFEBE: ch = 0xEB; break; case 0xFEBF: ch = 0xD6; break; case 0xFEC0: ch = 0xD6; break; case 0xFEC1: ch = 0xD7; break; case 0xFEC2: ch = 0xD7; break; case 0xFEC3: ch = 0xD7; break; case 0xFEC4: ch = 0xD7; break; case 0xFEC5: ch = 0xD8; break; case 0xFEC6: ch = 0xD8; break; case 0xFEC7: ch = 0xD8; break; case 0xFEC8: ch = 0xD8; break; case 0xFEC9: ch = 0xDF; break; case 0xFECA: ch = 0xC5; break; case 0xFECB: ch = 0xD9; break; case 0xFECC: ch = 0xEC; break; case 0xFECD: ch = 0xEE; break; case 0xFECE: ch = 0xED; break; case 0xFECF: ch = 0xDA; break; case 0xFED0: ch = 0xF7; break; case 0xFED1: ch = 0xBA; break; case 0xFED2: ch = 0xBA; break; case 0xFED3: ch = 0xE1; break; case 0xFED4: ch = 0xE1; break; case 0xFED5: ch = 0xF8; break; case 0xFED6: ch = 0xF8; break; case 0xFED7: ch = 0xE2; break; case 0xFED8: ch = 0xE2; break; case 0xFED9: ch = 0xFC; break; case 0xFEDA: ch = 0xFC; break; case 0xFEDB: ch = 0xE3; break; case 0xFEDC: ch = 0xE3; break; case 0xFEDD: ch = 0xFB; break; case 0xFEDE: ch = 0xFB; break; case 0xFEDF: ch = 0xE4; break; case 0xFEE0: ch = 0xE4; break; case 0xFEE1: ch = 0xEF; break; case 0xFEE2: ch = 0xEF; break; case 0xFEE3: ch = 0xE5; break; case 0xFEE4: ch = 0xE5; break; case 0xFEE5: ch = 0xF2; break; case 0xFEE6: ch = 0xF2; break; case 0xFEE7: ch = 0xE6; break; case 0xFEE8: ch = 0xE6; break; case 0xFEE9: ch = 0xF3; break; case 0xFEEA: ch = 0xF3; break; case 0xFEEB: ch = 0xE7; break; case 0xFEEC: ch = 0xF4; break; case 0xFEED: ch = 0xE8; break; case 0xFEEE: ch = 0xE8; break; case 0xFEEF: ch = 0xE9; break; case 0xFEF0: ch = 0xF5; break; case 0xFEF1: ch = 0xFD; break; case 0xFEF2: ch = 0xF6; break; case 0xFEF3: ch = 0xEA; break; case 0xFEF4: ch = 0xEA; break; case 0xFEF5: ch = 0xF9; break; case 0xFEF6: ch = 0xFA; break; case 0xFEF7: ch = 0x99; break; case 0xFEF8: ch = 0x9A; break; case 0xFEFB: ch = 0x9D; break; case 0xFEFC: ch = 0x9E; break; case 0xFFE8: ch = 0x86; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFED: ch = 0xFE; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 128) { switch (ch) { case 0x0081: case 0x008A: case 0x008C: case 0x008D: case 0x008E: case 0x008F: case 0x0090: case 0x009A: case 0x009C: case 0x009D: case 0x009E: case 0x009F: case 0x00A0: case 0x00A1: case 0x00A2: case 0x00A3: case 0x00A5: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00AF: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B6: case 0x00B7: case 0x00B8: case 0x00B9: case 0x00BB: case 0x00BC: case 0x00BD: case 0x00BE: case 0x00BF: break; case 0x00D7: ch = 0xAA; break; case 0x00F7: ch = 0xBA; break; case 0x0192: ch = 0x83; break; case 0x02C6: ch = 0x88; break; case 0x02DC: ch = 0x98; break; case 0x05B0: case 0x05B1: case 0x05B2: case 0x05B3: case 0x05B4: case 0x05B5: case 0x05B6: case 0x05B7: case 0x05B8: case 0x05B9: ch -= 0x04F0; break; case 0x05BB: case 0x05BC: case 0x05BD: case 0x05BE: case 0x05BF: case 0x05C0: case 0x05C1: case 0x05C2: case 0x05C3: ch -= 0x04F0; break; case 0x05D0: case 0x05D1: case 0x05D2: case 0x05D3: case 0x05D4: case 0x05D5: case 0x05D6: case 0x05D7: case 0x05D8: case 0x05D9: case 0x05DA: case 0x05DB: case 0x05DC: case 0x05DD: case 0x05DE: case 0x05DF: case 0x05E0: case 0x05E1: case 0x05E2: case 0x05E3: case 0x05E4: case 0x05E5: case 0x05E6: case 0x05E7: case 0x05E8: case 0x05E9: case 0x05EA: ch -= 0x04F0; break; case 0x05F0: case 0x05F1: case 0x05F2: case 0x05F3: case 0x05F4: ch -= 0x051C; break; case 0x200E: ch = 0xFD; break; case 0x200F: ch = 0xFE; break; case 0x2013: ch = 0x96; break; case 0x2014: ch = 0x97; break; case 0x2018: ch = 0x91; break; case 0x2019: ch = 0x92; break; case 0x201A: ch = 0x82; break; case 0x201C: ch = 0x93; break; case 0x201D: ch = 0x94; break; case 0x201E: ch = 0x84; break; case 0x2020: ch = 0x86; break; case 0x2021: ch = 0x87; break; case 0x2022: ch = 0x95; break; case 0x2026: ch = 0x85; break; case 0x2030: ch = 0x89; break; case 0x2039: ch = 0x8B; break; case 0x203A: ch = 0x9B; break; case 0x20AA: ch = 0xA4; break; case 0x20AC: ch = 0x80; break; case 0x2122: ch = 0x99; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A0: ch = 0xFF; break; case 0x00A4: ch = 0xCF; break; case 0x00A7: ch = 0xFD; break; case 0x00AB: ch = 0xAE; break; case 0x00AD: ch = 0xF0; break; case 0x00B6: ch = 0x14; break; case 0x00BB: ch = 0xAF; break; case 0x0401: ch = 0x85; break; case 0x0402: ch = 0x81; break; case 0x0403: ch = 0x83; break; case 0x0404: ch = 0x87; break; case 0x0405: ch = 0x89; break; case 0x0406: ch = 0x8B; break; case 0x0407: ch = 0x8D; break; case 0x0408: ch = 0x8F; break; case 0x0409: ch = 0x91; break; case 0x040A: ch = 0x93; break; case 0x040B: ch = 0x95; break; case 0x040C: ch = 0x97; break; case 0x040E: ch = 0x99; break; case 0x040F: ch = 0x9B; break; case 0x0410: ch = 0xA1; break; case 0x0411: ch = 0xA3; break; case 0x0412: ch = 0xEC; break; case 0x0413: ch = 0xAD; break; case 0x0414: ch = 0xA7; break; case 0x0415: ch = 0xA9; break; case 0x0416: ch = 0xEA; break; case 0x0417: ch = 0xF4; break; case 0x0418: ch = 0xB8; break; case 0x0419: ch = 0xBE; break; case 0x041A: ch = 0xC7; break; case 0x041B: ch = 0xD1; break; case 0x041C: ch = 0xD3; break; case 0x041D: ch = 0xD5; break; case 0x041E: ch = 0xD7; break; case 0x041F: ch = 0xDD; break; case 0x0420: ch = 0xE2; break; case 0x0421: ch = 0xE4; break; case 0x0422: ch = 0xE6; break; case 0x0423: ch = 0xE8; break; case 0x0424: ch = 0xAB; break; case 0x0425: ch = 0xB6; break; case 0x0426: ch = 0xA5; break; case 0x0427: ch = 0xFC; break; case 0x0428: ch = 0xF6; break; case 0x0429: ch = 0xFA; break; case 0x042A: ch = 0x9F; break; case 0x042B: ch = 0xF2; break; case 0x042C: ch = 0xEE; break; case 0x042D: ch = 0xF8; break; case 0x042E: ch = 0x9D; break; case 0x042F: ch = 0xE0; break; case 0x0430: ch = 0xA0; break; case 0x0431: ch = 0xA2; break; case 0x0432: ch = 0xEB; break; case 0x0433: ch = 0xAC; break; case 0x0434: ch = 0xA6; break; case 0x0435: ch = 0xA8; break; case 0x0436: ch = 0xE9; break; case 0x0437: ch = 0xF3; break; case 0x0438: ch = 0xB7; break; case 0x0439: ch = 0xBD; break; case 0x043A: ch = 0xC6; break; case 0x043B: ch = 0xD0; break; case 0x043C: ch = 0xD2; break; case 0x043D: ch = 0xD4; break; case 0x043E: ch = 0xD6; break; case 0x043F: ch = 0xD8; break; case 0x0440: ch = 0xE1; break; case 0x0441: ch = 0xE3; break; case 0x0442: ch = 0xE5; break; case 0x0443: ch = 0xE7; break; case 0x0444: ch = 0xAA; break; case 0x0445: ch = 0xB5; break; case 0x0446: ch = 0xA4; break; case 0x0447: ch = 0xFB; break; case 0x0448: ch = 0xF5; break; case 0x0449: ch = 0xF9; break; case 0x044A: ch = 0x9E; break; case 0x044B: ch = 0xF1; break; case 0x044C: ch = 0xED; break; case 0x044D: ch = 0xF7; break; case 0x044E: ch = 0x9C; break; case 0x044F: ch = 0xDE; break; case 0x0451: ch = 0x84; break; case 0x0452: ch = 0x80; break; case 0x0453: ch = 0x82; break; case 0x0454: ch = 0x86; break; case 0x0455: ch = 0x88; break; case 0x0456: ch = 0x8A; break; case 0x0457: ch = 0x8C; break; case 0x0458: ch = 0x8E; break; case 0x0459: ch = 0x90; break; case 0x045A: ch = 0x92; break; case 0x045B: ch = 0x94; break; case 0x045C: ch = 0x96; break; case 0x045E: ch = 0x98; break; case 0x045F: ch = 0x9A; break; case 0x2022: ch = 0x07; break; case 0x203C: ch = 0x13; break; case 0x2116: ch = 0xEF; break; case 0x2190: ch = 0x1B; break; case 0x2191: ch = 0x18; break; case 0x2192: ch = 0x1A; break; case 0x2193: ch = 0x19; break; case 0x2194: ch = 0x1D; break; case 0x2195: ch = 0x12; break; case 0x21A8: ch = 0x17; break; case 0x221F: ch = 0x1C; break; case 0x2302: ch = 0x7F; break; case 0x2500: ch = 0xC4; break; case 0x2502: ch = 0xB3; break; case 0x250C: ch = 0xDA; break; case 0x2510: ch = 0xBF; break; case 0x2514: ch = 0xC0; break; case 0x2518: ch = 0xD9; break; case 0x251C: ch = 0xC3; break; case 0x2524: ch = 0xB4; break; case 0x252C: ch = 0xC2; break; case 0x2534: ch = 0xC1; break; case 0x253C: ch = 0xC5; break; case 0x2550: ch = 0xCD; break; case 0x2551: ch = 0xBA; break; case 0x2554: ch = 0xC9; break; case 0x2557: ch = 0xBB; break; case 0x255A: ch = 0xC8; break; case 0x255D: ch = 0xBC; break; case 0x2560: ch = 0xCC; break; case 0x2563: ch = 0xB9; break; case 0x2566: ch = 0xCB; break; case 0x2569: ch = 0xCA; break; case 0x256C: ch = 0xCE; break; case 0x2580: ch = 0xDF; break; case 0x2584: ch = 0xDC; break; case 0x2588: ch = 0xDB; break; case 0x2591: ch = 0xB0; break; case 0x2592: ch = 0xB1; break; case 0x2593: ch = 0xB2; break; case 0x25A0: ch = 0xFE; break; case 0x25AC: ch = 0x16; break; case 0x25B2: ch = 0x1E; break; case 0x25BA: ch = 0x10; break; case 0x25BC: ch = 0x1F; break; case 0x25C4: ch = 0x11; break; case 0x25CB: ch = 0x09; break; case 0x25D8: ch = 0x08; break; case 0x25D9: ch = 0x0A; break; case 0x263A: ch = 0x01; break; case 0x263B: ch = 0x02; break; case 0x263C: ch = 0x0F; break; case 0x2640: ch = 0x0C; break; case 0x2642: ch = 0x0B; break; case 0x2660: ch = 0x06; break; case 0x2663: ch = 0x05; break; case 0x2665: ch = 0x03; break; case 0x2666: ch = 0x04; break; case 0x266A: ch = 0x0D; break; case 0x266B: ch = 0x0E; break; case 0xFFE8: ch = 0xB3; break; case 0xFFE9: ch = 0x1B; break; case 0xFFEA: ch = 0x18; break; case 0xFFEB: ch = 0x1A; break; case 0xFFEC: ch = 0x19; break; case 0xFFED: ch = 0xFE; break; case 0xFFEE: ch = 0x09; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); if (ch >= 26) { switch (ch) { case 0x001B: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0021: case 0x0022: case 0x0023: case 0x0024: case 0x0025: case 0x0026: case 0x0027: case 0x0028: case 0x0029: case 0x002A: case 0x002B: case 0x002C: case 0x002D: case 0x002E: case 0x002F: case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: case 0x003A: case 0x003B: case 0x003C: case 0x003D: case 0x003E: case 0x003F: case 0x0040: case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: case 0x007B: case 0x007C: case 0x007D: case 0x007E: break; case 0x001A: ch = 0x7F; break; case 0x001C: ch = 0x1A; break; case 0x007F: ch = 0x1C; break; case 0x00A0: ch = 0xFF; break; case 0x00A2: ch = 0xFC; break; case 0x00A6: ch = 0xFE; break; case 0x00AC: ch = 0xFD; break; case 0x0E01: case 0x0E02: case 0x0E03: case 0x0E04: case 0x0E05: case 0x0E06: case 0x0E07: case 0x0E08: case 0x0E09: case 0x0E0A: case 0x0E0B: case 0x0E0C: case 0x0E0D: case 0x0E0E: case 0x0E0F: case 0x0E10: case 0x0E11: case 0x0E12: case 0x0E13: case 0x0E14: case 0x0E15: case 0x0E16: case 0x0E17: case 0x0E18: case 0x0E19: case 0x0E1A: case 0x0E1B: case 0x0E1C: case 0x0E1D: case 0x0E1E: case 0x0E1F: case 0x0E20: case 0x0E21: case 0x0E22: case 0x0E23: case 0x0E24: case 0x0E25: case 0x0E26: case 0x0E27: case 0x0E28: case 0x0E29: case 0x0E2A: case 0x0E2B: case 0x0E2C: case 0x0E2D: case 0x0E2E: case 0x0E2F: case 0x0E30: case 0x0E31: case 0x0E32: case 0x0E33: case 0x0E34: case 0x0E35: case 0x0E36: case 0x0E37: case 0x0E38: case 0x0E39: case 0x0E3A: ch -= 0x0D60; break; case 0x0E3F: case 0x0E40: case 0x0E41: case 0x0E42: case 0x0E43: case 0x0E44: case 0x0E45: case 0x0E46: case 0x0E47: case 0x0E48: case 0x0E49: case 0x0E4A: case 0x0E4B: case 0x0E4C: case 0x0E4D: case 0x0E4E: case 0x0E4F: case 0x0E50: case 0x0E51: case 0x0E52: case 0x0E53: case 0x0E54: case 0x0E55: case 0x0E56: case 0x0E57: case 0x0E58: case 0x0E59: case 0x0E5A: case 0x0E5B: ch -= 0x0D60; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); charIndex++; charCount--; continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; charIndex++; charCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 128) { switch (ch) { case 0x00A0: case 0x00A2: case 0x00A3: case 0x00A4: case 0x00A5: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00AF: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B6: case 0x00B7: case 0x00B8: case 0x00B9: case 0x00BB: case 0x00BC: case 0x00BD: case 0x00BE: case 0x00D7: case 0x00E0: case 0x00E2: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00EE: case 0x00EF: case 0x00F4: case 0x00F7: case 0x00F9: case 0x00FB: case 0x00FC: break; case 0x0152: ch = 0x8C; break; case 0x0153: ch = 0x9C; break; case 0x0192: ch = 0x83; break; case 0x02C6: ch = 0x88; break; case 0x060C: ch = 0xA1; break; case 0x061B: ch = 0xBA; break; case 0x061F: ch = 0xBF; break; case 0x0621: case 0x0622: case 0x0623: case 0x0624: case 0x0625: case 0x0626: case 0x0627: case 0x0628: case 0x0629: case 0x062A: case 0x062B: case 0x062C: case 0x062D: case 0x062E: case 0x062F: case 0x0630: case 0x0631: case 0x0632: case 0x0633: case 0x0634: case 0x0635: case 0x0636: ch -= 0x0560; break; case 0x0637: case 0x0638: case 0x0639: case 0x063A: ch -= 0x055F; break; case 0x0640: case 0x0641: case 0x0642: case 0x0643: ch -= 0x0564; break; case 0x0644: ch = 0xE1; break; case 0x0645: case 0x0646: case 0x0647: case 0x0648: ch -= 0x0562; break; case 0x0649: ch = 0xEC; break; case 0x064A: ch = 0xED; break; case 0x064B: case 0x064C: case 0x064D: case 0x064E: ch -= 0x055B; break; case 0x064F: ch = 0xF5; break; case 0x0650: ch = 0xF6; break; case 0x0651: ch = 0xF8; break; case 0x0652: ch = 0xFA; break; case 0x0660: case 0x0661: case 0x0662: case 0x0663: case 0x0664: case 0x0665: case 0x0666: case 0x0667: case 0x0668: case 0x0669: ch -= 0x0630; break; case 0x066B: ch = 0x2C; break; case 0x066C: ch = 0x2E; break; case 0x0679: ch = 0x8A; break; case 0x067E: ch = 0x81; break; case 0x0686: ch = 0x8D; break; case 0x0688: ch = 0x8F; break; case 0x0691: ch = 0x9A; break; case 0x0698: ch = 0x8E; break; case 0x06A9: ch = 0x98; break; case 0x06AF: ch = 0x90; break; case 0x06BA: ch = 0x9F; break; case 0x06BE: ch = 0xAA; break; case 0x06C1: ch = 0xC0; break; case 0x06D2: ch = 0xFF; break; case 0x06F0: case 0x06F1: case 0x06F2: case 0x06F3: case 0x06F4: case 0x06F5: case 0x06F6: case 0x06F7: case 0x06F8: case 0x06F9: ch -= 0x06C0; break; case 0x200C: ch = 0x9D; break; case 0x200D: ch = 0x9E; break; case 0x200E: ch = 0xFD; break; case 0x200F: ch = 0xFE; break; case 0x2013: ch = 0x96; break; case 0x2014: ch = 0x97; break; case 0x2018: ch = 0x91; break; case 0x2019: ch = 0x92; break; case 0x201A: ch = 0x82; break; case 0x201C: ch = 0x93; break; case 0x201D: ch = 0x94; break; case 0x201E: ch = 0x84; break; case 0x2020: ch = 0x86; break; case 0x2021: ch = 0x87; break; case 0x2022: ch = 0x95; break; case 0x2026: ch = 0x85; break; case 0x2030: ch = 0x89; break; case 0x2039: ch = 0x8B; break; case 0x203A: ch = 0x9B; break; case 0x20AC: ch = 0x80; break; case 0x2122: ch = 0x99; break; case 0xFB56: ch = 0x81; break; case 0xFB58: ch = 0x81; break; case 0xFB66: ch = 0x8A; break; case 0xFB68: ch = 0x8A; break; case 0xFB7A: ch = 0x8D; break; case 0xFB7C: ch = 0x8D; break; case 0xFB88: ch = 0x8F; break; case 0xFB8A: ch = 0x8E; break; case 0xFB8C: ch = 0x9A; break; case 0xFB8E: ch = 0x98; break; case 0xFB90: ch = 0x98; break; case 0xFB92: ch = 0x90; break; case 0xFB94: ch = 0x90; break; case 0xFB9E: ch = 0x9F; break; case 0xFBA6: ch = 0xC0; break; case 0xFBA8: ch = 0xC0; break; case 0xFBAA: ch = 0xAA; break; case 0xFBAC: ch = 0xAA; break; case 0xFBAE: ch = 0xFF; break; case 0xFE70: ch = 0xF0; break; case 0xFE71: ch = 0xF0; break; case 0xFE72: ch = 0xF1; break; case 0xFE74: ch = 0xF2; break; case 0xFE76: ch = 0xF3; break; case 0xFE77: ch = 0xF3; break; case 0xFE78: ch = 0xF5; break; case 0xFE79: ch = 0xF5; break; case 0xFE7A: ch = 0xF6; break; case 0xFE7B: ch = 0xF6; break; case 0xFE7C: ch = 0xF8; break; case 0xFE7D: ch = 0xF8; break; case 0xFE7E: ch = 0xFA; break; case 0xFE7F: ch = 0xFA; break; case 0xFE80: ch = 0xC1; break; case 0xFE81: ch = 0xC2; break; case 0xFE82: ch = 0xC2; break; case 0xFE83: ch = 0xC3; break; case 0xFE84: ch = 0xC3; break; case 0xFE85: ch = 0xC4; break; case 0xFE86: ch = 0xC4; break; case 0xFE87: ch = 0xC5; break; case 0xFE88: ch = 0xC5; break; case 0xFE89: ch = 0xC6; break; case 0xFE8A: ch = 0xC6; break; case 0xFE8B: ch = 0xC6; break; case 0xFE8C: ch = 0xC6; break; case 0xFE8D: ch = 0xC7; break; case 0xFE8E: ch = 0xC7; break; case 0xFE8F: ch = 0xC8; break; case 0xFE90: ch = 0xC8; break; case 0xFE91: ch = 0xC8; break; case 0xFE92: ch = 0xC8; break; case 0xFE93: ch = 0xC9; break; case 0xFE94: ch = 0xC9; break; case 0xFE95: ch = 0xCA; break; case 0xFE96: ch = 0xCA; break; case 0xFE97: ch = 0xCA; break; case 0xFE98: ch = 0xCA; break; case 0xFE99: ch = 0xCB; break; case 0xFE9A: ch = 0xCB; break; case 0xFE9B: ch = 0xCB; break; case 0xFE9C: ch = 0xCB; break; case 0xFE9D: ch = 0xCC; break; case 0xFE9E: ch = 0xCC; break; case 0xFE9F: ch = 0xCC; break; case 0xFEA0: ch = 0xCC; break; case 0xFEA1: ch = 0xCD; break; case 0xFEA2: ch = 0xCD; break; case 0xFEA3: ch = 0xCD; break; case 0xFEA4: ch = 0xCD; break; case 0xFEA5: ch = 0xCE; break; case 0xFEA6: ch = 0xCE; break; case 0xFEA7: ch = 0xCE; break; case 0xFEA8: ch = 0xCE; break; case 0xFEA9: ch = 0xCF; break; case 0xFEAA: ch = 0xCF; break; case 0xFEAB: ch = 0xD0; break; case 0xFEAC: ch = 0xD0; break; case 0xFEAD: ch = 0xD1; break; case 0xFEAE: ch = 0xD1; break; case 0xFEAF: ch = 0xD2; break; case 0xFEB0: ch = 0xD2; break; case 0xFEB1: ch = 0xD3; break; case 0xFEB2: ch = 0xD3; break; case 0xFEB3: ch = 0xD3; break; case 0xFEB4: ch = 0xD3; break; case 0xFEB5: ch = 0xD4; break; case 0xFEB6: ch = 0xD4; break; case 0xFEB7: ch = 0xD4; break; case 0xFEB8: ch = 0xD4; break; case 0xFEB9: ch = 0xD5; break; case 0xFEBA: ch = 0xD5; break; case 0xFEBB: ch = 0xD5; break; case 0xFEBC: ch = 0xD5; break; case 0xFEBD: ch = 0xD6; break; case 0xFEBE: ch = 0xD6; break; case 0xFEBF: ch = 0xD6; break; case 0xFEC0: ch = 0xD6; break; case 0xFEC1: ch = 0xD8; break; case 0xFEC2: ch = 0xD8; break; case 0xFEC3: ch = 0xD8; break; case 0xFEC4: ch = 0xD8; break; case 0xFEC5: ch = 0xD9; break; case 0xFEC6: ch = 0xD9; break; case 0xFEC7: ch = 0xD9; break; case 0xFEC8: ch = 0xD9; break; case 0xFEC9: ch = 0xDA; break; case 0xFECA: ch = 0xDA; break; case 0xFECB: ch = 0xDA; break; case 0xFECC: ch = 0xDA; break; case 0xFECD: ch = 0xDB; break; case 0xFECE: ch = 0xDB; break; case 0xFECF: ch = 0xDB; break; case 0xFED0: ch = 0xDB; break; case 0xFED1: ch = 0xDD; break; case 0xFED2: ch = 0xDD; break; case 0xFED3: ch = 0xDD; break; case 0xFED4: ch = 0xDD; break; case 0xFED5: ch = 0xDE; break; case 0xFED6: ch = 0xDE; break; case 0xFED7: ch = 0xDE; break; case 0xFED8: ch = 0xDE; break; case 0xFED9: ch = 0xDF; break; case 0xFEDA: ch = 0xDF; break; case 0xFEDB: ch = 0xDF; break; case 0xFEDC: ch = 0xDF; break; case 0xFEDD: ch = 0xE1; break; case 0xFEDE: ch = 0xE1; break; case 0xFEDF: ch = 0xE1; break; case 0xFEE0: ch = 0xE1; break; case 0xFEE1: ch = 0xE3; break; case 0xFEE2: ch = 0xE3; break; case 0xFEE3: ch = 0xE3; break; case 0xFEE4: ch = 0xE3; break; case 0xFEE5: ch = 0xE4; break; case 0xFEE6: ch = 0xE4; break; case 0xFEE7: ch = 0xE4; break; case 0xFEE8: ch = 0xE4; break; case 0xFEE9: ch = 0xE5; break; case 0xFEEA: ch = 0xE5; break; case 0xFEEB: ch = 0xE5; break; case 0xFEEC: ch = 0xE5; break; case 0xFEED: ch = 0xE6; break; case 0xFEEE: ch = 0xE6; break; case 0xFEEF: ch = 0xEC; break; case 0xFEF0: ch = 0xEC; break; case 0xFEF1: ch = 0xED; break; case 0xFEF2: ch = 0xED; break; case 0xFEF3: ch = 0xED; break; case 0xFEF4: ch = 0xED; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 208) { switch (ch) { case 0x00D1: case 0x00D2: case 0x00D3: case 0x00D4: case 0x00D5: case 0x00D6: case 0x00D7: case 0x00D8: case 0x00D9: case 0x00DA: case 0x00DB: case 0x00DC: case 0x00DF: case 0x00E0: case 0x00E1: case 0x00E2: case 0x00E3: case 0x00E4: case 0x00E5: case 0x00E6: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00EC: case 0x00ED: case 0x00EE: case 0x00EF: case 0x00F1: case 0x00F2: case 0x00F3: case 0x00F4: case 0x00F5: case 0x00F6: case 0x00F7: case 0x00F8: case 0x00F9: case 0x00FA: case 0x00FB: case 0x00FC: case 0x00FF: break; case 0x011E: ch = 0xD0; break; case 0x011F: ch = 0xF0; break; case 0x0130: ch = 0xDD; break; case 0x0131: ch = 0xFD; break; case 0x015E: ch = 0xDE; break; case 0x015F: ch = 0xFE; break; case 0x203E: ch = 0xAF; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x5A; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0xE0; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0x70; break; case 0x005C: ch = 0xB2; break; case 0x005D: ch = 0x80; break; case 0x005E: ch = 0xB0; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: ch += 0x0001; break; case 0x0069: case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: ch += 0x0008; break; case 0x0071: ch = 0x8B; break; case 0x0072: ch = 0x9B; break; case 0x0073: ch = 0xAB; break; case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x003F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0x4F; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA0; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A2: ch = 0xB1; break; case 0x00A3: ch = 0x4A; break; case 0x00A5: ch = 0x5B; break; case 0x00AC: ch = 0x5F; break; case 0x203E: ch = 0xA1; break; case 0xFF01: ch = 0x5A; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0xE0; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0x70; break; case 0xFF3C: ch = 0xB2; break; case 0xFF3D: ch = 0x80; break; case 0xFF3E: ch = 0xB0; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: ch -= 0xFEDF; break; case 0xFF49: case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: ch -= 0xFED8; break; case 0xFF51: ch = 0x8B; break; case 0xFF52: ch = 0x9B; break; case 0xFF53: ch = 0xAB; break; case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEA1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0x4F; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA0; break; case 0xFF61: case 0xFF62: case 0xFF63: case 0xFF64: case 0xFF65: case 0xFF66: case 0xFF67: case 0xFF68: case 0xFF69: ch -= 0xFF20; break; case 0xFF6A: case 0xFF6B: case 0xFF6C: case 0xFF6D: case 0xFF6E: case 0xFF6F: ch -= 0xFF19; break; case 0xFF70: ch = 0x58; break; case 0xFF71: case 0xFF72: case 0xFF73: case 0xFF74: case 0xFF75: case 0xFF76: case 0xFF77: case 0xFF78: case 0xFF79: case 0xFF7A: ch -= 0xFEF0; break; case 0xFF7B: case 0xFF7C: case 0xFF7D: case 0xFF7E: case 0xFF7F: case 0xFF80: case 0xFF81: case 0xFF82: case 0xFF83: case 0xFF84: case 0xFF85: case 0xFF86: case 0xFF87: case 0xFF88: case 0xFF89: ch -= 0xFEEF; break; case 0xFF8A: ch = 0x9D; break; case 0xFF8B: ch = 0x9E; break; case 0xFF8C: ch = 0x9F; break; case 0xFF8D: case 0xFF8E: case 0xFF8F: case 0xFF90: case 0xFF91: case 0xFF92: case 0xFF93: case 0xFF94: case 0xFF95: ch -= 0xFEEB; break; case 0xFF96: case 0xFF97: case 0xFF98: case 0xFF99: ch -= 0xFEEA; break; case 0xFF9A: case 0xFF9B: case 0xFF9C: case 0xFF9D: case 0xFF9E: case 0xFF9F: ch -= 0xFEE0; break; default: HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 128) { switch (ch) { case 0x0081: case 0x008A: case 0x008D: case 0x008E: case 0x008F: case 0x0090: case 0x009A: case 0x009D: case 0x009E: case 0x00A0: case 0x00A1: case 0x00A2: case 0x00A3: case 0x00A4: case 0x00A5: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AA: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00AF: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B6: case 0x00B7: case 0x00B8: case 0x00B9: case 0x00BA: case 0x00BB: case 0x00BC: case 0x00BD: case 0x00BE: case 0x00BF: case 0x00C0: case 0x00C1: case 0x00C2: case 0x00C4: case 0x00C5: case 0x00C6: case 0x00C7: case 0x00C8: case 0x00C9: case 0x00CA: case 0x00CB: case 0x00CD: case 0x00CE: case 0x00CF: case 0x00D1: case 0x00D3: case 0x00D4: case 0x00D6: case 0x00D7: case 0x00D8: case 0x00D9: case 0x00DA: case 0x00DB: case 0x00DC: case 0x00DF: case 0x00E0: case 0x00E1: case 0x00E2: case 0x00E4: case 0x00E5: case 0x00E6: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00ED: case 0x00EE: case 0x00EF: case 0x00F1: case 0x00F3: case 0x00F4: case 0x00F6: case 0x00F7: case 0x00F8: case 0x00F9: case 0x00FA: case 0x00FB: case 0x00FC: case 0x00FF: break; case 0x0102: ch = 0xC3; break; case 0x0103: ch = 0xE3; break; case 0x0110: ch = 0xD0; break; case 0x0111: ch = 0xF0; break; case 0x0152: ch = 0x8C; break; case 0x0153: ch = 0x9C; break; case 0x0178: ch = 0x9F; break; case 0x0192: ch = 0x83; break; case 0x01A0: ch = 0xD5; break; case 0x01A1: ch = 0xF5; break; case 0x01AF: ch = 0xDD; break; case 0x01B0: ch = 0xFD; break; case 0x02C6: ch = 0x88; break; case 0x02DC: ch = 0x98; break; case 0x0300: ch = 0xCC; break; case 0x0301: ch = 0xEC; break; case 0x0303: ch = 0xDE; break; case 0x0309: ch = 0xD2; break; case 0x0323: ch = 0xF2; break; case 0x2013: ch = 0x96; break; case 0x2014: ch = 0x97; break; case 0x2018: ch = 0x91; break; case 0x2019: ch = 0x92; break; case 0x201A: ch = 0x82; break; case 0x201C: ch = 0x93; break; case 0x201D: ch = 0x94; break; case 0x201E: ch = 0x84; break; case 0x2020: ch = 0x86; break; case 0x2021: ch = 0x87; break; case 0x2022: ch = 0x95; break; case 0x2026: ch = 0x85; break; case 0x2030: ch = 0x89; break; case 0x2039: ch = 0x8B; break; case 0x203A: ch = 0x9B; break; case 0x20AB: ch = 0xFE; break; case 0x20AC: ch = 0x80; break; case 0x2122: ch = 0x99; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
private int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, EncoderFallbackBuffer efb) { int charEnd = charIndex + charCount; int outputBytes = 0; while (charIndex < charEnd) { char c = chars[charIndex]; if (c > 0x7f) { if (efb == null) { efb = EncoderFallback.CreateFallbackBuffer(); } if (efb.Fallback(c, charIndex)) { while (efb.Remaining != 0) { bytes[byteIndex++] = (byte)efb.GetNextChar(); outputBytes++; } } } else { bytes[byteIndex++] = (byte)c; outputBytes++; } charIndex++; } return(outputBytes); }
public GSMBestFitEncoderFallbackBuffer(EncoderFallback caller, EncoderFallback lastResortFallback) { LastResortEncoderFallbackBuffer = lastResortFallback.CreateFallbackBuffer(); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); if (ch >= 161) { switch (ch) { case 0x00A2: case 0x00A3: case 0x00A4: case 0x00A5: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B5: case 0x00B6: case 0x00B8: case 0x00B9: case 0x00BB: case 0x00BC: case 0x00BD: case 0x00BE: break; case 0x00D7: ch = 0xAA; break; case 0x00F7: ch = 0xBA; break; case 0x05D0: case 0x05D1: case 0x05D2: case 0x05D3: case 0x05D4: case 0x05D5: case 0x05D6: case 0x05D7: case 0x05D8: case 0x05D9: case 0x05DA: case 0x05DB: case 0x05DC: case 0x05DD: case 0x05DE: case 0x05DF: case 0x05E0: case 0x05E1: case 0x05E2: case 0x05E3: case 0x05E4: case 0x05E5: case 0x05E6: case 0x05E7: case 0x05E8: case 0x05E9: case 0x05EA: ch -= 0x04F0; break; case 0x2017: ch = 0xDF; break; case 0x2022: ch = 0xB7; break; case 0x203E: ch = 0xAF; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); charIndex++; charCount--; continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; charIndex++; charCount--; } return(byteIndex); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 128) { switch (ch) { case 0x00A2: case 0x00A3: case 0x00A9: case 0x00B1: case 0x00B5: break; case 0x00A0: ch = 0xCA; break; case 0x00A1: ch = 0xC1; break; case 0x00A4: ch = 0xDB; break; case 0x00A5: ch = 0xB4; break; case 0x00A7: ch = 0xA4; break; case 0x00A8: ch = 0xAC; break; case 0x00AA: ch = 0xBB; break; case 0x00AB: ch = 0xC7; break; case 0x00AC: ch = 0xC2; break; case 0x00AE: ch = 0xA8; break; case 0x00AF: ch = 0xF8; break; case 0x00B0: ch = 0xA1; break; case 0x00B4: ch = 0xAB; break; case 0x00B6: ch = 0xA6; break; case 0x00B7: ch = 0xE1; break; case 0x00B8: ch = 0xFC; break; case 0x00BA: ch = 0xBC; break; case 0x00BB: ch = 0xC8; break; case 0x00BF: ch = 0xC0; break; case 0x00C0: ch = 0xCB; break; case 0x00C1: ch = 0xE7; break; case 0x00C2: ch = 0xE5; break; case 0x00C3: ch = 0xCC; break; case 0x00C4: ch = 0x80; break; case 0x00C5: ch = 0x81; break; case 0x00C6: ch = 0xAE; break; case 0x00C7: ch = 0x82; break; case 0x00C8: ch = 0xE9; break; case 0x00C9: ch = 0x83; break; case 0x00CA: ch = 0xE6; break; case 0x00CB: ch = 0xE8; break; case 0x00CC: ch = 0xED; break; case 0x00CD: ch = 0xEA; break; case 0x00CE: ch = 0xEB; break; case 0x00CF: ch = 0xEC; break; case 0x00D1: ch = 0x84; break; case 0x00D2: ch = 0xF1; break; case 0x00D3: ch = 0xEE; break; case 0x00D4: ch = 0xEF; break; case 0x00D5: ch = 0xCD; break; case 0x00D6: ch = 0x85; break; case 0x00D8: ch = 0xAF; break; case 0x00D9: ch = 0xF4; break; case 0x00DA: ch = 0xF2; break; case 0x00DB: ch = 0xF3; break; case 0x00DC: ch = 0x86; break; case 0x00DF: ch = 0xA7; break; case 0x00E0: ch = 0x88; break; case 0x00E1: ch = 0x87; break; case 0x00E2: ch = 0x89; break; case 0x00E3: ch = 0x8B; break; case 0x00E4: ch = 0x8A; break; case 0x00E5: ch = 0x8C; break; case 0x00E6: ch = 0xBE; break; case 0x00E7: ch = 0x8D; break; case 0x00E8: ch = 0x8F; break; case 0x00E9: ch = 0x8E; break; case 0x00EA: ch = 0x90; break; case 0x00EB: ch = 0x91; break; case 0x00EC: ch = 0x93; break; case 0x00ED: ch = 0x92; break; case 0x00EE: ch = 0x94; break; case 0x00EF: ch = 0x95; break; case 0x00F1: ch = 0x96; break; case 0x00F2: ch = 0x98; break; case 0x00F3: ch = 0x97; break; case 0x00F4: ch = 0x99; break; case 0x00F5: ch = 0x9B; break; case 0x00F6: ch = 0x9A; break; case 0x00F7: ch = 0xD6; break; case 0x00F8: ch = 0xBF; break; case 0x00F9: ch = 0x9D; break; case 0x00FA: ch = 0x9C; break; case 0x00FB: ch = 0x9E; break; case 0x00FC: ch = 0x9F; break; case 0x00FF: ch = 0xD8; break; case 0x0131: ch = 0xF5; break; case 0x0152: ch = 0xCE; break; case 0x0153: ch = 0xCF; break; case 0x0178: ch = 0xD9; break; case 0x0192: ch = 0xC4; break; case 0x02C6: ch = 0xF6; break; case 0x02C7: ch = 0xFF; break; case 0x02D8: ch = 0xF9; break; case 0x02D9: ch = 0xFA; break; case 0x02DA: ch = 0xFB; break; case 0x02DB: ch = 0xFE; break; case 0x02DC: ch = 0xF7; break; case 0x02DD: ch = 0xFD; break; case 0x03C0: ch = 0xB9; break; case 0x2013: ch = 0xD0; break; case 0x2014: ch = 0xD1; break; case 0x2018: ch = 0xD4; break; case 0x2019: ch = 0xD5; break; case 0x201A: ch = 0xE2; break; case 0x201C: ch = 0xD2; break; case 0x201D: ch = 0xD3; break; case 0x201E: ch = 0xE3; break; case 0x2020: ch = 0xA0; break; case 0x2021: ch = 0xE0; break; case 0x2022: ch = 0xA5; break; case 0x2026: ch = 0xC9; break; case 0x2030: ch = 0xE4; break; case 0x2039: ch = 0xDC; break; case 0x203A: ch = 0xDD; break; case 0x2044: ch = 0xDA; break; case 0x2122: ch = 0xAA; break; case 0x2126: ch = 0xBD; break; case 0x2202: ch = 0xB6; break; case 0x2206: ch = 0xC6; break; case 0x220F: ch = 0xB8; break; case 0x2211: ch = 0xB7; break; case 0x221A: ch = 0xC3; break; case 0x221E: ch = 0xB0; break; case 0x222B: ch = 0xBA; break; case 0x2248: ch = 0xC5; break; case 0x2260: ch = 0xAD; break; case 0x2264: ch = 0xB2; break; case 0x2265: ch = 0xB3; break; case 0x2318: ch = 0x11; break; case 0x25CA: ch = 0xD7; break; case 0x2666: ch = 0x13; break; case 0x2713: ch = 0x12; break; case 0xF8FF: ch = 0xF0; break; case 0xFB01: ch = 0xDE; break; case 0xFB02: ch = 0xDF; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } break; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); charIndex++; charCount--; if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: case 0x00B6: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x4F; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0x5B; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0x4A; break; case 0x005C: ch = 0xE0; break; case 0x005D: ch = 0x5A; break; case 0x005E: ch = 0x5F; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: ch += 0x0020; break; case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: ch += 0x0027; break; case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x002F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0xBB; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA1; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A0: ch = 0x41; break; case 0x00A1: ch = 0xAA; break; case 0x00A2: ch = 0xB0; break; case 0x00A3: ch = 0xB1; break; case 0x00A4: ch = 0x9F; break; case 0x00A5: ch = 0xB2; break; case 0x00A6: ch = 0x6A; break; case 0x00A7: ch = 0xB5; break; case 0x00A8: ch = 0xBD; break; case 0x00A9: ch = 0xB4; break; case 0x00AA: ch = 0x9A; break; case 0x00AB: ch = 0x8A; break; case 0x00AC: ch = 0xBA; break; case 0x00AD: ch = 0xCA; break; case 0x00AE: ch = 0xAF; break; case 0x00AF: ch = 0xBC; break; case 0x00B0: ch = 0x90; break; case 0x00B1: ch = 0x8F; break; case 0x00B2: ch = 0xEA; break; case 0x00B3: ch = 0xFA; break; case 0x00B4: ch = 0xBE; break; case 0x00B5: ch = 0xA0; break; case 0x00B7: ch = 0xB3; break; case 0x00B8: ch = 0x9D; break; case 0x00B9: ch = 0xDA; break; case 0x00BA: ch = 0x9B; break; case 0x00BB: ch = 0x8B; break; case 0x00BC: ch = 0xB7; break; case 0x00BD: ch = 0xB8; break; case 0x00BE: ch = 0xB9; break; case 0x00BF: ch = 0xAB; break; case 0x00C0: ch = 0x64; break; case 0x00C1: ch = 0x65; break; case 0x00C2: ch = 0x62; break; case 0x00C3: ch = 0x66; break; case 0x00C4: ch = 0x63; break; case 0x00C5: ch = 0x67; break; case 0x00C6: ch = 0x9E; break; case 0x00C7: ch = 0x68; break; case 0x00C8: ch = 0x74; break; case 0x00C9: ch = 0x71; break; case 0x00CA: ch = 0x72; break; case 0x00CB: ch = 0x73; break; case 0x00CC: ch = 0x78; break; case 0x00CD: ch = 0x75; break; case 0x00CE: ch = 0x76; break; case 0x00CF: ch = 0x77; break; case 0x00D0: ch = 0xAC; break; case 0x00D1: ch = 0x69; break; case 0x00D2: ch = 0xED; break; case 0x00D3: ch = 0xEE; break; case 0x00D4: ch = 0xEB; break; case 0x00D5: ch = 0xEF; break; case 0x00D6: ch = 0xEC; break; case 0x00D7: ch = 0xBF; break; case 0x00D8: ch = 0x80; break; case 0x00D9: ch = 0xFD; break; case 0x00DA: ch = 0xFE; break; case 0x00DB: ch = 0xFB; break; case 0x00DC: ch = 0xFC; break; case 0x00DD: ch = 0xAD; break; case 0x00DE: ch = 0xAE; break; case 0x00DF: ch = 0x59; break; case 0x00E0: ch = 0x44; break; case 0x00E1: ch = 0x45; break; case 0x00E2: ch = 0x42; break; case 0x00E3: ch = 0x46; break; case 0x00E4: ch = 0x43; break; case 0x00E5: ch = 0x47; break; case 0x00E6: ch = 0x9C; break; case 0x00E7: ch = 0x48; break; case 0x00E8: ch = 0x54; break; case 0x00E9: ch = 0x51; break; case 0x00EA: ch = 0x52; break; case 0x00EB: ch = 0x53; break; case 0x00EC: ch = 0x58; break; case 0x00ED: ch = 0x55; break; case 0x00EE: ch = 0x56; break; case 0x00EF: ch = 0x57; break; case 0x00F0: ch = 0x8C; break; case 0x00F1: ch = 0x49; break; case 0x00F2: ch = 0xCD; break; case 0x00F3: ch = 0xCE; break; case 0x00F4: ch = 0xCB; break; case 0x00F5: ch = 0xCF; break; case 0x00F6: ch = 0xCC; break; case 0x00F7: ch = 0xE1; break; case 0x00F8: ch = 0x70; break; case 0x00F9: ch = 0xDD; break; case 0x00FA: ch = 0xDE; break; case 0x00FB: ch = 0xDB; break; case 0x00FC: ch = 0xDC; break; case 0x00FD: ch = 0x8D; break; case 0x00FE: ch = 0x8E; break; case 0x00FF: ch = 0xDF; break; case 0x0110: ch = 0xAC; break; case 0x203E: ch = 0xBC; break; case 0xFF01: ch = 0x4F; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0x5B; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0x4A; break; case 0xFF3C: ch = 0xE0; break; case 0xFF3D: ch = 0x5A; break; case 0xFF3E: ch = 0x5F; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: ch -= 0xFEC0; break; case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: ch -= 0xFEB9; break; case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEB1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0xBB; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA1; break; default: HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); continue; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 161) { switch (ch) { case 0x00A3: case 0x00A6: case 0x00A7: case 0x00A8: case 0x00A9: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B4: case 0x00B7: case 0x00BB: case 0x00BD: break; case 0x0385: case 0x0386: case 0x0387: case 0x0388: case 0x0389: case 0x038A: ch -= 0x02D0; break; case 0x038C: ch = 0xBC; break; case 0x038E: case 0x038F: case 0x0390: case 0x0391: case 0x0392: case 0x0393: case 0x0394: case 0x0395: case 0x0396: case 0x0397: case 0x0398: case 0x0399: case 0x039A: case 0x039B: case 0x039C: case 0x039D: case 0x039E: case 0x039F: case 0x03A0: case 0x03A1: ch -= 0x02D0; break; case 0x03A3: case 0x03A4: case 0x03A5: case 0x03A6: case 0x03A7: case 0x03A8: case 0x03A9: case 0x03AA: case 0x03AB: case 0x03AC: case 0x03AD: case 0x03AE: case 0x03AF: case 0x03B0: case 0x03B1: case 0x03B2: case 0x03B3: case 0x03B4: case 0x03B5: case 0x03B6: case 0x03B7: case 0x03B8: case 0x03B9: case 0x03BA: case 0x03BB: case 0x03BC: case 0x03BD: case 0x03BE: case 0x03BF: case 0x03C0: case 0x03C1: case 0x03C2: case 0x03C3: case 0x03C4: case 0x03C5: case 0x03C6: case 0x03C7: case 0x03C8: case 0x03C9: case 0x03CA: case 0x03CB: case 0x03CC: case 0x03CD: case 0x03CE: ch -= 0x02D0; break; case 0x03D5: ch = 0xF6; break; case 0x2015: ch = 0xAF; break; case 0x2018: ch = 0xA1; break; case 0x2019: ch = 0xA2; break; case 0x20AC: ch = 0xA4; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
public unsafe override int GetBytesImpl(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; EncoderFallbackBuffer buffer = null; while (charCount > 0) { ch = (int)(chars[charIndex]); if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x4F; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0x5B; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0x4A; break; case 0x005C: ch = 0xE0; break; case 0x005D: ch = 0x5A; break; case 0x005E: ch = 0x5F; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: ch += 0x0020; break; case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: ch += 0x0027; break; case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x002F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0x6A; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA1; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A0: ch = 0x41; break; case 0x00A7: ch = 0xE1; break; case 0x00AD: ch = 0x73; break; case 0x0401: ch = 0x63; break; case 0x0402: ch = 0x59; break; case 0x0403: ch = 0x62; break; case 0x0404: case 0x0405: case 0x0406: case 0x0407: case 0x0408: case 0x0409: ch -= 0x03A0; break; case 0x040A: ch = 0x70; break; case 0x040B: ch = 0x71; break; case 0x040C: ch = 0x72; break; case 0x040E: ch = 0x74; break; case 0x040F: ch = 0x75; break; case 0x0410: ch = 0xB9; break; case 0x0411: ch = 0xBA; break; case 0x0412: ch = 0xED; break; case 0x0413: ch = 0xBF; break; case 0x0414: ch = 0xBC; break; case 0x0415: ch = 0xBD; break; case 0x0416: ch = 0xEC; break; case 0x0417: ch = 0xFA; break; case 0x0418: case 0x0419: case 0x041A: case 0x041B: case 0x041C: ch -= 0x034D; break; case 0x041D: ch = 0xDA; break; case 0x041E: ch = 0xDB; break; case 0x041F: ch = 0xDC; break; case 0x0420: ch = 0xDE; break; case 0x0421: ch = 0xDF; break; case 0x0422: ch = 0xEA; break; case 0x0423: ch = 0xEB; break; case 0x0424: ch = 0xBE; break; case 0x0425: ch = 0xCA; break; case 0x0426: ch = 0xBB; break; case 0x0427: ch = 0xFE; break; case 0x0428: ch = 0xFB; break; case 0x0429: ch = 0xFD; break; case 0x042A: ch = 0x57; break; case 0x042B: ch = 0xEF; break; case 0x042C: ch = 0xEE; break; case 0x042D: ch = 0xFC; break; case 0x042E: ch = 0xB8; break; case 0x042F: ch = 0xDD; break; case 0x0430: ch = 0x77; break; case 0x0431: ch = 0x78; break; case 0x0432: ch = 0xAF; break; case 0x0433: ch = 0x8D; break; case 0x0434: ch = 0x8A; break; case 0x0435: ch = 0x8B; break; case 0x0436: ch = 0xAE; break; case 0x0437: ch = 0xB2; break; case 0x0438: ch = 0x8F; break; case 0x0439: ch = 0x90; break; case 0x043A: case 0x043B: case 0x043C: case 0x043D: case 0x043E: case 0x043F: ch -= 0x03A0; break; case 0x0440: case 0x0441: case 0x0442: case 0x0443: ch -= 0x0396; break; case 0x0444: ch = 0x8C; break; case 0x0445: ch = 0x8E; break; case 0x0446: ch = 0x80; break; case 0x0447: ch = 0xB6; break; case 0x0448: ch = 0xB3; break; case 0x0449: ch = 0xB5; break; case 0x044A: ch = 0xB7; break; case 0x044B: ch = 0xB1; break; case 0x044C: ch = 0xB0; break; case 0x044D: ch = 0xB4; break; case 0x044E: ch = 0x76; break; case 0x044F: ch = 0xA0; break; case 0x0451: ch = 0x44; break; case 0x0452: ch = 0x42; break; case 0x0453: ch = 0x43; break; case 0x0454: case 0x0455: case 0x0456: case 0x0457: case 0x0458: ch -= 0x040F; break; case 0x0459: case 0x045A: case 0x045B: case 0x045C: ch -= 0x0408; break; case 0x045E: ch = 0x55; break; case 0x045F: ch = 0x56; break; case 0x2116: ch = 0x58; break; case 0xFF01: ch = 0x4F; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0x5B; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0x4A; break; case 0xFF3C: ch = 0xE0; break; case 0xFF3D: ch = 0x5A; break; case 0xFF3E: ch = 0x5F; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: ch -= 0xFEC0; break; case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: ch -= 0xFEB9; break; case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEB1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0x6A; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA1; break; default: HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); charIndex++; charCount--; continue; } } //Write encoded byte to buffer, if buffer is defined and fallback was not used if (bytes != null) { bytes[byteIndex] = (byte)ch; } byteIndex++; byteCount--; charIndex++; charCount--; } return(byteIndex); }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 164) { switch (ch) { case 0x00A5: case 0x00A7: case 0x00A9: case 0x00AA: case 0x00AB: case 0x00AC: case 0x00AD: case 0x00AE: case 0x00AF: case 0x00B0: case 0x00B1: case 0x00B2: case 0x00B3: case 0x00B5: case 0x00B6: case 0x00B7: case 0x00B9: case 0x00BA: case 0x00BB: case 0x00BF: case 0x00C0: case 0x00C1: case 0x00C2: case 0x00C3: case 0x00C4: case 0x00C5: case 0x00C6: case 0x00C7: case 0x00C8: case 0x00C9: case 0x00CA: case 0x00CB: case 0x00CC: case 0x00CD: case 0x00CE: case 0x00CF: case 0x00D0: case 0x00D1: case 0x00D2: case 0x00D3: case 0x00D4: case 0x00D5: case 0x00D6: case 0x00D7: case 0x00D8: case 0x00D9: case 0x00DA: case 0x00DB: case 0x00DC: case 0x00DD: case 0x00DE: case 0x00DF: case 0x00E0: case 0x00E1: case 0x00E2: case 0x00E3: case 0x00E4: case 0x00E5: case 0x00E6: case 0x00E7: case 0x00E8: case 0x00E9: case 0x00EA: case 0x00EB: case 0x00EC: case 0x00ED: case 0x00EE: case 0x00EF: case 0x00F0: case 0x00F1: case 0x00F2: case 0x00F3: case 0x00F4: case 0x00F5: case 0x00F6: case 0x00F7: case 0x00F8: case 0x00F9: case 0x00FA: case 0x00FB: case 0x00FC: case 0x00FD: case 0x00FE: case 0x00FF: break; case 0x0152: ch = 0xBC; break; case 0x0153: ch = 0xBD; break; case 0x0160: ch = 0xA6; break; case 0x0161: ch = 0xA8; break; case 0x0178: ch = 0xBE; break; case 0x017D: ch = 0xB4; break; case 0x017E: ch = 0xB8; break; case 0x20AC: ch = 0xA4; break; default: { if (ch >= 0xFF01 && ch <= 0xFF5E) { ch -= 0xFEE0; } else #if NET_2_0 { HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); } #else { ch = 0x3F; } #endif } break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }
int InternalGetBytes(IEnumerable<char> chars, int charLength, int charIndex, int charCount, byte[] bytes, int byteIndex, ref EncoderFallbackBuffer buffer, ref char[] fallback_chars) { if (bytes == null) throw new ArgumentNullException("bytes"); if (charIndex < 0 || charIndex > charLength) throw new ArgumentOutOfRangeException("charIndex"); if (charCount < 0 || charCount > (charLength - charIndex)) throw new ArgumentOutOfRangeException("charCount"); if (byteIndex < 0 || byteIndex > bytes.Length) throw new ArgumentOutOfRangeException("byteIndex"); if ((bytes.Length - byteIndex) < charCount) throw new ArgumentException("InsufficientSpace"); using (var charIter = chars.GetEnumerator()) { for (var i = 0; i <= charIndex; ++i) charIter.MoveNext(); var count = charCount; while (count-- > 0) { var ch = charIter.Current; ++charIndex; charIter.MoveNext(); if (ch < (char) 0x80) { bytes[byteIndex++] = (byte) ch; } else { if (buffer == null) buffer = EncoderFallback.CreateFallbackBuffer(); if (Char.IsSurrogate(ch) && count > 1 && Char.IsSurrogate(charIter.Current)) buffer.Fallback(ch, charIter.Current, charIndex++ - 1); else buffer.Fallback(ch, charIndex - 1); if (fallback_chars == null || fallback_chars.Length < buffer.Remaining) fallback_chars = new char[buffer.Remaining]; for (var i = 0; i < fallback_chars.Length; i++) fallback_chars[i] = buffer.GetNextChar(); byteIndex += GetBytes(fallback_chars, 0, fallback_chars.Length, bytes, byteIndex, ref buffer, ref fallback_chars); } } } return charCount; }
protected unsafe override void ToBytes(char *chars, int charCount, byte *bytes, int byteCount) { int ch; int charIndex = 0; int byteIndex = 0; #if NET_2_0 EncoderFallbackBuffer buffer = null; #endif while (charCount > 0) { ch = (int)(chars[charIndex++]); if (ch >= 4) { switch (ch) { case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0018: case 0x0019: case 0x001C: case 0x001D: case 0x001E: case 0x001F: case 0x00B6: break; case 0x0004: ch = 0x37; break; case 0x0005: ch = 0x2D; break; case 0x0006: ch = 0x2E; break; case 0x0007: ch = 0x2F; break; case 0x0008: ch = 0x16; break; case 0x0009: ch = 0x05; break; case 0x000A: ch = 0x25; break; case 0x0014: ch = 0x3C; break; case 0x0015: ch = 0x3D; break; case 0x0016: ch = 0x32; break; case 0x0017: ch = 0x26; break; case 0x001A: ch = 0x3F; break; case 0x001B: ch = 0x27; break; case 0x0020: ch = 0x40; break; case 0x0021: ch = 0x5A; break; case 0x0022: ch = 0x7F; break; case 0x0023: ch = 0x7B; break; case 0x0024: ch = 0x5B; break; case 0x0025: ch = 0x6C; break; case 0x0026: ch = 0x50; break; case 0x0027: ch = 0x7D; break; case 0x0028: ch = 0x4D; break; case 0x0029: ch = 0x5D; break; case 0x002A: ch = 0x5C; break; case 0x002B: ch = 0x4E; break; case 0x002C: ch = 0x6B; break; case 0x002D: ch = 0x60; break; case 0x002E: ch = 0x4B; break; case 0x002F: ch = 0x61; break; case 0x0030: case 0x0031: case 0x0032: case 0x0033: case 0x0034: case 0x0035: case 0x0036: case 0x0037: case 0x0038: case 0x0039: ch += 0x00C0; break; case 0x003A: ch = 0x7A; break; case 0x003B: ch = 0x5E; break; case 0x003C: ch = 0x4C; break; case 0x003D: ch = 0x7E; break; case 0x003E: ch = 0x6E; break; case 0x003F: ch = 0x6F; break; case 0x0040: ch = 0x7C; break; case 0x0041: case 0x0042: case 0x0043: case 0x0044: case 0x0045: case 0x0046: case 0x0047: case 0x0048: case 0x0049: ch += 0x0080; break; case 0x004A: case 0x004B: case 0x004C: case 0x004D: case 0x004E: case 0x004F: case 0x0050: case 0x0051: case 0x0052: ch += 0x0087; break; case 0x0053: case 0x0054: case 0x0055: case 0x0056: case 0x0057: case 0x0058: case 0x0059: case 0x005A: ch += 0x008F; break; case 0x005B: ch = 0xBA; break; case 0x005C: ch = 0xE0; break; case 0x005D: ch = 0xBB; break; case 0x005E: ch = 0xB0; break; case 0x005F: ch = 0x6D; break; case 0x0060: ch = 0x79; break; case 0x0061: case 0x0062: case 0x0063: case 0x0064: case 0x0065: case 0x0066: case 0x0067: case 0x0068: case 0x0069: ch += 0x0020; break; case 0x006A: case 0x006B: case 0x006C: case 0x006D: case 0x006E: case 0x006F: case 0x0070: case 0x0071: case 0x0072: ch += 0x0027; break; case 0x0073: case 0x0074: case 0x0075: case 0x0076: case 0x0077: case 0x0078: case 0x0079: case 0x007A: ch += 0x002F; break; case 0x007B: ch = 0xC0; break; case 0x007C: ch = 0x4F; break; case 0x007D: ch = 0xD0; break; case 0x007E: ch = 0xA1; break; case 0x007F: ch = 0x07; break; case 0x0080: case 0x0081: case 0x0082: case 0x0083: case 0x0084: ch -= 0x0060; break; case 0x0085: ch = 0x15; break; case 0x0086: ch = 0x06; break; case 0x0087: ch = 0x17; break; case 0x0088: case 0x0089: case 0x008A: case 0x008B: case 0x008C: ch -= 0x0060; break; case 0x008D: ch = 0x09; break; case 0x008E: ch = 0x0A; break; case 0x008F: ch = 0x1B; break; case 0x0090: ch = 0x30; break; case 0x0091: ch = 0x31; break; case 0x0092: ch = 0x1A; break; case 0x0093: case 0x0094: case 0x0095: case 0x0096: ch -= 0x0060; break; case 0x0097: ch = 0x08; break; case 0x0098: case 0x0099: case 0x009A: case 0x009B: ch -= 0x0060; break; case 0x009C: ch = 0x04; break; case 0x009D: ch = 0x14; break; case 0x009E: ch = 0x3E; break; case 0x009F: ch = 0xFF; break; case 0x00A0: ch = 0x74; break; case 0x00A2: ch = 0x4A; break; case 0x00A3: ch = 0xB1; break; case 0x00A4: ch = 0x9F; break; case 0x00A5: ch = 0xB2; break; case 0x00A6: ch = 0x6A; break; case 0x00A7: ch = 0xB5; break; case 0x00A8: ch = 0xBD; break; case 0x00A9: ch = 0xB4; break; case 0x00AB: ch = 0x8A; break; case 0x00AC: ch = 0x5F; break; case 0x00AD: ch = 0xCA; break; case 0x00AE: ch = 0xAF; break; case 0x00B0: ch = 0x90; break; case 0x00B1: ch = 0x8F; break; case 0x00B2: ch = 0xEA; break; case 0x00B3: ch = 0xFA; break; case 0x00B4: ch = 0xBE; break; case 0x00B5: ch = 0xA0; break; case 0x00B8: ch = 0x9D; break; case 0x00B9: ch = 0xDA; break; case 0x00BB: ch = 0x8B; break; case 0x00BC: ch = 0xB7; break; case 0x00BD: ch = 0xB8; break; case 0x00BE: ch = 0xB9; break; case 0x00D7: ch = 0xBF; break; case 0x00F7: ch = 0xE1; break; case 0x05D0: case 0x05D1: case 0x05D2: case 0x05D3: case 0x05D4: case 0x05D5: case 0x05D6: case 0x05D7: case 0x05D8: ch -= 0x058F; break; case 0x05D9: case 0x05DA: case 0x05DB: case 0x05DC: case 0x05DD: case 0x05DE: case 0x05DF: case 0x05E0: case 0x05E1: ch -= 0x0588; break; case 0x05E2: case 0x05E3: case 0x05E4: case 0x05E5: case 0x05E6: case 0x05E7: case 0x05E8: case 0x05E9: ch -= 0x0580; break; case 0x05EA: ch = 0x71; break; case 0x2017: ch = 0x78; break; case 0x2022: ch = 0xB3; break; case 0x203E: ch = 0xBC; break; case 0xFF01: ch = 0x5A; break; case 0xFF02: ch = 0x7F; break; case 0xFF03: ch = 0x7B; break; case 0xFF04: ch = 0x5B; break; case 0xFF05: ch = 0x6C; break; case 0xFF06: ch = 0x50; break; case 0xFF07: ch = 0x7D; break; case 0xFF08: ch = 0x4D; break; case 0xFF09: ch = 0x5D; break; case 0xFF0A: ch = 0x5C; break; case 0xFF0B: ch = 0x4E; break; case 0xFF0C: ch = 0x6B; break; case 0xFF0D: ch = 0x60; break; case 0xFF0E: ch = 0x4B; break; case 0xFF0F: ch = 0x61; break; case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14: case 0xFF15: case 0xFF16: case 0xFF17: case 0xFF18: case 0xFF19: ch -= 0xFE20; break; case 0xFF1A: ch = 0x7A; break; case 0xFF1B: ch = 0x5E; break; case 0xFF1C: ch = 0x4C; break; case 0xFF1D: ch = 0x7E; break; case 0xFF1E: ch = 0x6E; break; case 0xFF1F: ch = 0x6F; break; case 0xFF20: ch = 0x7C; break; case 0xFF21: case 0xFF22: case 0xFF23: case 0xFF24: case 0xFF25: case 0xFF26: case 0xFF27: case 0xFF28: case 0xFF29: ch -= 0xFE60; break; case 0xFF2A: case 0xFF2B: case 0xFF2C: case 0xFF2D: case 0xFF2E: case 0xFF2F: case 0xFF30: case 0xFF31: case 0xFF32: ch -= 0xFE59; break; case 0xFF33: case 0xFF34: case 0xFF35: case 0xFF36: case 0xFF37: case 0xFF38: case 0xFF39: case 0xFF3A: ch -= 0xFE51; break; case 0xFF3B: ch = 0xBA; break; case 0xFF3C: ch = 0xE0; break; case 0xFF3D: ch = 0xBB; break; case 0xFF3E: ch = 0xB0; break; case 0xFF3F: ch = 0x6D; break; case 0xFF40: ch = 0x79; break; case 0xFF41: case 0xFF42: case 0xFF43: case 0xFF44: case 0xFF45: case 0xFF46: case 0xFF47: case 0xFF48: case 0xFF49: ch -= 0xFEC0; break; case 0xFF4A: case 0xFF4B: case 0xFF4C: case 0xFF4D: case 0xFF4E: case 0xFF4F: case 0xFF50: case 0xFF51: case 0xFF52: ch -= 0xFEB9; break; case 0xFF53: case 0xFF54: case 0xFF55: case 0xFF56: case 0xFF57: case 0xFF58: case 0xFF59: case 0xFF5A: ch -= 0xFEB1; break; case 0xFF5B: ch = 0xC0; break; case 0xFF5C: ch = 0x4F; break; case 0xFF5D: ch = 0xD0; break; case 0xFF5E: ch = 0xA1; break; default: #if NET_2_0 HandleFallback(ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount); #else ch = 0x3F; #endif break; } } bytes[byteIndex++] = (byte)ch; --charCount; --byteCount; } }