macro_rules! symbol_map {
($($k:expr => $v:expr),* $(,)?) => {{
[$(($k, $v),)*]
}};
}
static SPECIAL_SYMBOLS: [(char, char); 29] = symbol_map! {
'[' => '「', ']' => '」', '{' => '『', '}' => '』',
'\'' => '、', '<' => ',', ':' => ':', '\"' => ';',
'>' => '。', '~' => '~', '!' => '!', '@' => '@',
'#' => '#', '$' => '$', '%' => '%', '^' => '︿',
'&' => '&', '*' => '*', '(' => '(', ')' => ')',
'_' => '—', '+' => '+', '=' => '=', '\\' => '\',
'|' => '|', '?' => '?', ',' => ',', '.' => '。',
';' => ';',
};
static FULL_WIDTH_SYMBOLS: [(char, char); 75] = symbol_map! {
'0' => '0', '1' => '1', '2' => '2', '3' => '3',
'4' => '4', '5' => '5', '6' => '6', '7' => '7',
'8' => '8', '9' => '9', 'a' => 'a', 'b' => 'b',
'c' => 'c', 'd' => 'd', 'e' => 'e', 'f' => 'f',
'g' => 'g', 'h' => 'h', 'i' => 'i', 'j' => 'j',
'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r',
's' => 's', 't' => 't', 'u' => 'u', 'v' => 'v',
'w' => 'w', 'x' => 'x', 'y' => 'y', 'z' => 'z',
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D',
'E' => 'E', 'F' => 'F', 'G' => 'G', 'H' => 'H',
'I' => 'I', 'J' => 'J', 'K' => 'K', 'L' => 'L',
'M' => 'M', 'N' => 'N', 'O' => 'O', 'P' => 'P',
'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X',
'Y' => 'Y', 'Z' => 'Z', ' ' => ' ', '\"' => '”',
'\'' => '’', '/' => '/', '<' => '<', '>' => '>',
'`' => '‵', '[' => '〔', ']' =>'〕', '{' => '{',
'}' => '}', '+' => '+', '-' => '-',
};
pub(crate) fn special_symbol_input(key: char) -> Option<char> {
SPECIAL_SYMBOLS
.iter()
.find(|item| item.0 == key)
.map(|item| item.1)
}
pub(crate) fn full_width_symbol_input(key: char) -> Option<char> {
FULL_WIDTH_SYMBOLS
.iter()
.find(|item| item.0 == key)
.map(|item| item.1)
.or_else(|| special_symbol_input(key))
}