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;
}