#[derive(Clone, Copy)]
pub enum ExclCharSet {
End = 0,
Symbol = 1,
Numeric = 2,
Alpha = 3,
KanjiHi1 = 4,
KanjiHi2 = 5,
KanjiHi3 = 6,
KanjiLo1 = 7,
KanjiLo2 = 8,
Byte = 9,
}
impl ExclCharSet {
pub const fn from_u8(c: u8) -> Self {
match c {
0x20 | 0x24 | 0x25 | 0x2A | 0x2B | 0x2D..=0x2F | 0x3A => Self::Symbol,
0x30..=0x39 => Self::Numeric,
0x41..=0x5A => Self::Alpha,
0x81..=0x9F => Self::KanjiHi1,
0xE0..=0xEA => Self::KanjiHi2,
0xEB => Self::KanjiHi3,
0x40 | 0x5B..=0x7E | 0x80 | 0xA0..=0xBF => Self::KanjiLo1,
0xC0..=0xDF | 0xEC..=0xFC => Self::KanjiLo2,
_ => Self::Byte,
}
}
}
#[derive(Clone, Copy, Debug)]
pub enum State {
Init = 0,
Numeric = 10,
Alpha = 20,
Byte = 30,
KanjiHi12 = 40,
KanjiHi3 = 50,
Kanji = 60,
}
#[derive(Clone, Copy)]
pub enum Action {
Idle,
Numeric,
Alpha,
Byte,
Kanji,
KanjiAndSingleByte,
}
pub static STATE_TRANSITION: [(State, Action); 70] = [
(State::Init, Action::Idle),
(State::Alpha, Action::Idle),
(State::Numeric, Action::Idle),
(State::Alpha, Action::Idle),
(State::KanjiHi12, Action::Idle),
(State::KanjiHi12, Action::Idle),
(State::KanjiHi3, Action::Idle),
(State::Byte, Action::Idle),
(State::Byte, Action::Idle),
(State::Byte, Action::Idle),
(State::Init, Action::Numeric),
(State::Alpha, Action::Numeric),
(State::Numeric, Action::Idle),
(State::Alpha, Action::Numeric),
(State::KanjiHi12, Action::Numeric),
(State::KanjiHi12, Action::Numeric),
(State::KanjiHi3, Action::Numeric),
(State::Byte, Action::Numeric),
(State::Byte, Action::Numeric),
(State::Byte, Action::Numeric),
(State::Init, Action::Alpha),
(State::Alpha, Action::Idle),
(State::Numeric, Action::Alpha),
(State::Alpha, Action::Idle),
(State::KanjiHi12, Action::Alpha),
(State::KanjiHi12, Action::Alpha),
(State::KanjiHi3, Action::Alpha),
(State::Byte, Action::Alpha),
(State::Byte, Action::Alpha),
(State::Byte, Action::Alpha),
(State::Init, Action::Byte),
(State::Alpha, Action::Byte),
(State::Numeric, Action::Byte),
(State::Alpha, Action::Byte),
(State::KanjiHi12, Action::Byte),
(State::KanjiHi12, Action::Byte),
(State::KanjiHi3, Action::Byte),
(State::Byte, Action::Idle),
(State::Byte, Action::Idle),
(State::Byte, Action::Idle),
(State::Init, Action::KanjiAndSingleByte),
(State::Alpha, Action::KanjiAndSingleByte),
(State::Numeric, Action::KanjiAndSingleByte),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::Byte, Action::KanjiAndSingleByte),
(State::Init, Action::KanjiAndSingleByte),
(State::Alpha, Action::KanjiAndSingleByte),
(State::Numeric, Action::KanjiAndSingleByte),
(State::Kanji, Action::Idle),
(State::Kanji, Action::Idle),
(State::KanjiHi12, Action::KanjiAndSingleByte),
(State::KanjiHi3, Action::KanjiAndSingleByte),
(State::Kanji, Action::Idle),
(State::Byte, Action::KanjiAndSingleByte),
(State::Byte, Action::KanjiAndSingleByte),
(State::Init, Action::Kanji),
(State::Alpha, Action::Kanji),
(State::Numeric, Action::Kanji),
(State::Alpha, Action::Kanji),
(State::KanjiHi12, Action::Idle),
(State::KanjiHi12, Action::Idle),
(State::KanjiHi3, Action::Idle),
(State::Byte, Action::Kanji),
(State::Byte, Action::Kanji),
(State::Byte, Action::Kanji),
];