System.Text.ISO2022Encoding.CheckEscapeSequenceJP C# (CSharp) Method

CheckEscapeSequenceJP() private method

private CheckEscapeSequenceJP ( byte bytes, int escapeCount ) : ISO2022Modes
bytes byte
escapeCount int
return ISO2022Modes
        private ISO2022Modes CheckEscapeSequenceJP(byte[] bytes, int escapeCount)
        {
            // Have an escape sequence
            if (bytes[0] != ESCAPE)
                return ISO2022Modes.ModeInvalidEscape;

            if (escapeCount < 3)
                return ISO2022Modes.ModeIncompleteEscape;

            if (bytes[1] == '(')
            {
                if (bytes[2] == 'B')       // <esc>(B
                {
                    return ISO2022Modes.ModeASCII;
                }
                else if (bytes[2] == 'H')  // <esc>(H
                {
                    // Actually this is supposed to be Swedish
                    // We treat it like ASCII though.
                    return ISO2022Modes.ModeASCII;
                }
                else if (bytes[2] == 'J')  // <esc>(J
                {
                    // Actually this is supposed to be Roman
                    // 2 characters are different, but historically we treat it as ascii
                    return ISO2022Modes.ModeASCII;
                }
                else if (bytes[2] == 'I')  // <esc>(I
                {
                    return ISO2022Modes.ModeHalfwidthKatakana;
                }
            }
            else if (bytes[1] == '$')
            {
                if (bytes[2] == '@' ||   // <esc>$@
                    bytes[2] == 'B')     // <esc>$B
                {
                    return ISO2022Modes.ModeJIS0208;
                }
                else
                {
                    // Looking for <esc>$(D
                    if (escapeCount < 4)
                        return ISO2022Modes.ModeIncompleteEscape;

                    if (bytes[2] == '(' && bytes[3] == 'D') // <esc>$(D
                    {
                        // Mlang treated 0208 like 0212 even though that's wrong
                        return ISO2022Modes.ModeJIS0208;
                    }
                }
            }
            else if (bytes[1] == '&')
            {
                if (bytes[2] == '@')            // <esc>&@
                {
                    // Ignore ESC & @ (prefix to <esc>$B)
                    return ISO2022Modes.ModeNOOP;
                }
            }

            // If we get here we fell through and have an invalid/unknown escape sequence
            return ISO2022Modes.ModeInvalidEscape;
        }