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;
		}
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
		// 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;
		}
Esempio n. 4
0
        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;
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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;
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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;
            }
        }
Esempio n. 12
0
        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;
            }
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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;
            }
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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;
            }
        }
Esempio n. 21
0
        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;
            }
        }
Esempio n. 22
0
        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);
        }
Esempio n. 23
0
        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);
        }
Esempio n. 24
0
    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);
    }
Esempio n. 25
0
 public GSMBestFitEncoderFallbackBuffer(EncoderFallback caller, EncoderFallback lastResortFallback)
 {
     LastResortEncoderFallbackBuffer = lastResortFallback.CreateFallbackBuffer();
 }
Esempio n. 26
0
        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);
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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;
            }
        }
Esempio n. 30
0
        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;
            }
        }
Esempio n. 32
0
        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;
            }
        }