mod constants {
pub const DASH_HIRAGANA_DOUBLE_HYPHEN: char = '゠';
pub const LETTER_SMALL_A: char = 'ァ';
pub const LETTER_A: char = 'ア';
pub const LETTER_SMALL_I: char = 'ィ';
pub const LETTER_I: char = 'イ';
pub const LETTER_SMALL_U: char = 'ゥ';
pub const LETTER_U: char = 'ウ';
pub const LETTER_SMALL_E: char = 'ェ';
pub const LETTER_E: char = 'エ';
pub const LETTER_SMALL_O: char = 'ォ';
pub const LETTER_O: char = 'オ';
pub const LETTER_KA: char = 'カ';
pub const LETTER_GA: char = 'ガ';
pub const LETTER_KI: char = 'キ';
pub const LETTER_GI: char = 'ギ';
pub const LETTER_KU: char = 'ク';
pub const LETTER_GU: char = 'グ';
pub const LETTER_KE: char = 'ケ';
pub const LETTER_GE: char = 'ゲ';
pub const LETTER_KO: char = 'コ';
pub const LETTER_GO: char = 'ゴ';
pub const LETTER_SA: char = 'サ';
pub const LETTER_ZA: char = 'ザ';
pub const LETTER_SI: char = 'シ';
pub const LETTER_ZI: char = 'ジ';
pub const LETTER_SU: char = 'ス';
pub const LETTER_ZU: char = 'ズ';
pub const LETTER_SE: char = 'セ';
pub const LETTER_ZE: char = 'ゼ';
pub const LETTER_SO: char = 'ソ';
pub const LETTER_ZO: char = 'ゾ';
pub const LETTER_TA: char = 'タ';
pub const LETTER_DA: char = 'ダ';
pub const LETTER_TI: char = 'チ';
pub const LETTER_DI: char = 'ヂ';
pub const LETTER_SMALL_TU: char = 'ッ';
pub const LETTER_TU: char = 'ツ';
pub const LETTER_DU: char = 'ヅ';
pub const LETTER_TE: char = 'テ';
pub const LETTER_DE: char = 'デ';
pub const LETTER_TO: char = 'ト';
pub const LETTER_DO: char = 'ド';
pub const LETTER_NA: char = 'ナ';
pub const LETTER_NI: char = 'ニ';
pub const LETTER_NU: char = 'ヌ';
pub const LETTER_NE: char = 'ネ';
pub const LETTER_NO: char = 'ノ';
pub const LETTER_HA: char = 'ハ';
pub const LETTER_BA: char = 'バ';
pub const LETTER_PA: char = 'パ';
pub const LETTER_HI: char = 'ヒ';
pub const LETTER_BI: char = 'ビ';
pub const LETTER_PI: char = 'ピ';
pub const LETTER_HU: char = 'フ';
pub const LETTER_BU: char = 'ブ';
pub const LETTER_PU: char = 'プ';
pub const LETTER_HE: char = 'ヘ';
pub const LETTER_BE: char = 'ベ';
pub const LETTER_PE: char = 'ペ';
pub const LETTER_HO: char = 'ホ';
pub const LETTER_BO: char = 'ボ';
pub const LETTER_PO: char = 'ポ';
pub const LETTER_MA: char = 'マ';
pub const LETTER_MI: char = 'ミ';
pub const LETTER_MU: char = 'ム';
pub const LETTER_ME: char = 'メ';
pub const LETTER_MO: char = 'モ';
pub const LETTER_SMALL_YA: char = 'ャ';
pub const LETTER_YA: char = 'ヤ';
pub const LETTER_SMALL_YU: char = 'ュ';
pub const LETTER_YU: char = 'ユ';
pub const LETTER_SMALL_YO: char = 'ョ';
pub const LETTER_YO: char = 'ヨ';
pub const LETTER_RA: char = 'ラ';
pub const LETTER_RI: char = 'リ';
pub const LETTER_RU: char = 'ル';
pub const LETTER_RE: char = 'レ';
pub const LETTER_RO: char = 'ロ';
pub const LETTER_SMALL_WA: char = 'ヮ';
pub const LETTER_WA: char = 'ワ';
pub const LETTER_WI: char = 'ヰ';
pub const LETTER_WE: char = 'ヱ';
pub const LETTER_WO: char = 'ヲ';
pub const LETTER_N: char = 'ン';
pub const LETTER_VU: char = 'ヴ';
pub const LETTER_SMALL_KA: char = 'ヵ';
pub const LETTER_SMALL_KE: char = 'ヶ';
pub const LETTER_VA: char = 'ヷ';
pub const LETTER_VI: char = 'ヸ';
pub const LETTER_VE: char = 'ヹ';
pub const LETTER_VO: char = 'ヺ';
pub const MIDDLE_DOT: char = '・';
pub const DASH_HIRAGANA_PROLONGED_SOUND_MARK: char = 'ー';
pub const ITERATION_MARK: char = 'ヽ';
pub const VOICED_ITERATION_MARK: char = 'ヾ';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Katakana {
DashHiraganaDoubleHyphen,
LetterSmallA,
LetterA,
LetterSmallI,
LetterI,
LetterSmallU,
LetterU,
LetterSmallE,
LetterE,
LetterSmallO,
LetterO,
LetterKa,
LetterGa,
LetterKi,
LetterGi,
LetterKu,
LetterGu,
LetterKe,
LetterGe,
LetterKo,
LetterGo,
LetterSa,
LetterZa,
LetterSi,
LetterZi,
LetterSu,
LetterZu,
LetterSe,
LetterZe,
LetterSo,
LetterZo,
LetterTa,
LetterDa,
LetterTi,
LetterDi,
LetterSmallTu,
LetterTu,
LetterDu,
LetterTe,
LetterDe,
LetterTo,
LetterDo,
LetterNa,
LetterNi,
LetterNu,
LetterNe,
LetterNo,
LetterHa,
LetterBa,
LetterPa,
LetterHi,
LetterBi,
LetterPi,
LetterHu,
LetterBu,
LetterPu,
LetterHe,
LetterBe,
LetterPe,
LetterHo,
LetterBo,
LetterPo,
LetterMa,
LetterMi,
LetterMu,
LetterMe,
LetterMo,
LetterSmallYa,
LetterYa,
LetterSmallYu,
LetterYu,
LetterSmallYo,
LetterYo,
LetterRa,
LetterRi,
LetterRu,
LetterRe,
LetterRo,
LetterSmallWa,
LetterWa,
LetterWi,
LetterWe,
LetterWo,
LetterN,
LetterVu,
LetterSmallKa,
LetterSmallKe,
LetterVa,
LetterVi,
LetterVe,
LetterVo,
MiddleDot,
DashHiraganaProlongedSoundMark,
IterationMark,
VoicedIterationMark,
}
impl Into<char> for Katakana {
fn into(self) -> char {
use constants::*;
match self {
Katakana::DashHiraganaDoubleHyphen => DASH_HIRAGANA_DOUBLE_HYPHEN,
Katakana::LetterSmallA => LETTER_SMALL_A,
Katakana::LetterA => LETTER_A,
Katakana::LetterSmallI => LETTER_SMALL_I,
Katakana::LetterI => LETTER_I,
Katakana::LetterSmallU => LETTER_SMALL_U,
Katakana::LetterU => LETTER_U,
Katakana::LetterSmallE => LETTER_SMALL_E,
Katakana::LetterE => LETTER_E,
Katakana::LetterSmallO => LETTER_SMALL_O,
Katakana::LetterO => LETTER_O,
Katakana::LetterKa => LETTER_KA,
Katakana::LetterGa => LETTER_GA,
Katakana::LetterKi => LETTER_KI,
Katakana::LetterGi => LETTER_GI,
Katakana::LetterKu => LETTER_KU,
Katakana::LetterGu => LETTER_GU,
Katakana::LetterKe => LETTER_KE,
Katakana::LetterGe => LETTER_GE,
Katakana::LetterKo => LETTER_KO,
Katakana::LetterGo => LETTER_GO,
Katakana::LetterSa => LETTER_SA,
Katakana::LetterZa => LETTER_ZA,
Katakana::LetterSi => LETTER_SI,
Katakana::LetterZi => LETTER_ZI,
Katakana::LetterSu => LETTER_SU,
Katakana::LetterZu => LETTER_ZU,
Katakana::LetterSe => LETTER_SE,
Katakana::LetterZe => LETTER_ZE,
Katakana::LetterSo => LETTER_SO,
Katakana::LetterZo => LETTER_ZO,
Katakana::LetterTa => LETTER_TA,
Katakana::LetterDa => LETTER_DA,
Katakana::LetterTi => LETTER_TI,
Katakana::LetterDi => LETTER_DI,
Katakana::LetterSmallTu => LETTER_SMALL_TU,
Katakana::LetterTu => LETTER_TU,
Katakana::LetterDu => LETTER_DU,
Katakana::LetterTe => LETTER_TE,
Katakana::LetterDe => LETTER_DE,
Katakana::LetterTo => LETTER_TO,
Katakana::LetterDo => LETTER_DO,
Katakana::LetterNa => LETTER_NA,
Katakana::LetterNi => LETTER_NI,
Katakana::LetterNu => LETTER_NU,
Katakana::LetterNe => LETTER_NE,
Katakana::LetterNo => LETTER_NO,
Katakana::LetterHa => LETTER_HA,
Katakana::LetterBa => LETTER_BA,
Katakana::LetterPa => LETTER_PA,
Katakana::LetterHi => LETTER_HI,
Katakana::LetterBi => LETTER_BI,
Katakana::LetterPi => LETTER_PI,
Katakana::LetterHu => LETTER_HU,
Katakana::LetterBu => LETTER_BU,
Katakana::LetterPu => LETTER_PU,
Katakana::LetterHe => LETTER_HE,
Katakana::LetterBe => LETTER_BE,
Katakana::LetterPe => LETTER_PE,
Katakana::LetterHo => LETTER_HO,
Katakana::LetterBo => LETTER_BO,
Katakana::LetterPo => LETTER_PO,
Katakana::LetterMa => LETTER_MA,
Katakana::LetterMi => LETTER_MI,
Katakana::LetterMu => LETTER_MU,
Katakana::LetterMe => LETTER_ME,
Katakana::LetterMo => LETTER_MO,
Katakana::LetterSmallYa => LETTER_SMALL_YA,
Katakana::LetterYa => LETTER_YA,
Katakana::LetterSmallYu => LETTER_SMALL_YU,
Katakana::LetterYu => LETTER_YU,
Katakana::LetterSmallYo => LETTER_SMALL_YO,
Katakana::LetterYo => LETTER_YO,
Katakana::LetterRa => LETTER_RA,
Katakana::LetterRi => LETTER_RI,
Katakana::LetterRu => LETTER_RU,
Katakana::LetterRe => LETTER_RE,
Katakana::LetterRo => LETTER_RO,
Katakana::LetterSmallWa => LETTER_SMALL_WA,
Katakana::LetterWa => LETTER_WA,
Katakana::LetterWi => LETTER_WI,
Katakana::LetterWe => LETTER_WE,
Katakana::LetterWo => LETTER_WO,
Katakana::LetterN => LETTER_N,
Katakana::LetterVu => LETTER_VU,
Katakana::LetterSmallKa => LETTER_SMALL_KA,
Katakana::LetterSmallKe => LETTER_SMALL_KE,
Katakana::LetterVa => LETTER_VA,
Katakana::LetterVi => LETTER_VI,
Katakana::LetterVe => LETTER_VE,
Katakana::LetterVo => LETTER_VO,
Katakana::MiddleDot => MIDDLE_DOT,
Katakana::DashHiraganaProlongedSoundMark => DASH_HIRAGANA_PROLONGED_SOUND_MARK,
Katakana::IterationMark => ITERATION_MARK,
Katakana::VoicedIterationMark => VOICED_ITERATION_MARK,
}
}
}
impl std::convert::TryFrom<char> for Katakana {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
DASH_HIRAGANA_DOUBLE_HYPHEN => Ok(Katakana::DashHiraganaDoubleHyphen),
LETTER_SMALL_A => Ok(Katakana::LetterSmallA),
LETTER_A => Ok(Katakana::LetterA),
LETTER_SMALL_I => Ok(Katakana::LetterSmallI),
LETTER_I => Ok(Katakana::LetterI),
LETTER_SMALL_U => Ok(Katakana::LetterSmallU),
LETTER_U => Ok(Katakana::LetterU),
LETTER_SMALL_E => Ok(Katakana::LetterSmallE),
LETTER_E => Ok(Katakana::LetterE),
LETTER_SMALL_O => Ok(Katakana::LetterSmallO),
LETTER_O => Ok(Katakana::LetterO),
LETTER_KA => Ok(Katakana::LetterKa),
LETTER_GA => Ok(Katakana::LetterGa),
LETTER_KI => Ok(Katakana::LetterKi),
LETTER_GI => Ok(Katakana::LetterGi),
LETTER_KU => Ok(Katakana::LetterKu),
LETTER_GU => Ok(Katakana::LetterGu),
LETTER_KE => Ok(Katakana::LetterKe),
LETTER_GE => Ok(Katakana::LetterGe),
LETTER_KO => Ok(Katakana::LetterKo),
LETTER_GO => Ok(Katakana::LetterGo),
LETTER_SA => Ok(Katakana::LetterSa),
LETTER_ZA => Ok(Katakana::LetterZa),
LETTER_SI => Ok(Katakana::LetterSi),
LETTER_ZI => Ok(Katakana::LetterZi),
LETTER_SU => Ok(Katakana::LetterSu),
LETTER_ZU => Ok(Katakana::LetterZu),
LETTER_SE => Ok(Katakana::LetterSe),
LETTER_ZE => Ok(Katakana::LetterZe),
LETTER_SO => Ok(Katakana::LetterSo),
LETTER_ZO => Ok(Katakana::LetterZo),
LETTER_TA => Ok(Katakana::LetterTa),
LETTER_DA => Ok(Katakana::LetterDa),
LETTER_TI => Ok(Katakana::LetterTi),
LETTER_DI => Ok(Katakana::LetterDi),
LETTER_SMALL_TU => Ok(Katakana::LetterSmallTu),
LETTER_TU => Ok(Katakana::LetterTu),
LETTER_DU => Ok(Katakana::LetterDu),
LETTER_TE => Ok(Katakana::LetterTe),
LETTER_DE => Ok(Katakana::LetterDe),
LETTER_TO => Ok(Katakana::LetterTo),
LETTER_DO => Ok(Katakana::LetterDo),
LETTER_NA => Ok(Katakana::LetterNa),
LETTER_NI => Ok(Katakana::LetterNi),
LETTER_NU => Ok(Katakana::LetterNu),
LETTER_NE => Ok(Katakana::LetterNe),
LETTER_NO => Ok(Katakana::LetterNo),
LETTER_HA => Ok(Katakana::LetterHa),
LETTER_BA => Ok(Katakana::LetterBa),
LETTER_PA => Ok(Katakana::LetterPa),
LETTER_HI => Ok(Katakana::LetterHi),
LETTER_BI => Ok(Katakana::LetterBi),
LETTER_PI => Ok(Katakana::LetterPi),
LETTER_HU => Ok(Katakana::LetterHu),
LETTER_BU => Ok(Katakana::LetterBu),
LETTER_PU => Ok(Katakana::LetterPu),
LETTER_HE => Ok(Katakana::LetterHe),
LETTER_BE => Ok(Katakana::LetterBe),
LETTER_PE => Ok(Katakana::LetterPe),
LETTER_HO => Ok(Katakana::LetterHo),
LETTER_BO => Ok(Katakana::LetterBo),
LETTER_PO => Ok(Katakana::LetterPo),
LETTER_MA => Ok(Katakana::LetterMa),
LETTER_MI => Ok(Katakana::LetterMi),
LETTER_MU => Ok(Katakana::LetterMu),
LETTER_ME => Ok(Katakana::LetterMe),
LETTER_MO => Ok(Katakana::LetterMo),
LETTER_SMALL_YA => Ok(Katakana::LetterSmallYa),
LETTER_YA => Ok(Katakana::LetterYa),
LETTER_SMALL_YU => Ok(Katakana::LetterSmallYu),
LETTER_YU => Ok(Katakana::LetterYu),
LETTER_SMALL_YO => Ok(Katakana::LetterSmallYo),
LETTER_YO => Ok(Katakana::LetterYo),
LETTER_RA => Ok(Katakana::LetterRa),
LETTER_RI => Ok(Katakana::LetterRi),
LETTER_RU => Ok(Katakana::LetterRu),
LETTER_RE => Ok(Katakana::LetterRe),
LETTER_RO => Ok(Katakana::LetterRo),
LETTER_SMALL_WA => Ok(Katakana::LetterSmallWa),
LETTER_WA => Ok(Katakana::LetterWa),
LETTER_WI => Ok(Katakana::LetterWi),
LETTER_WE => Ok(Katakana::LetterWe),
LETTER_WO => Ok(Katakana::LetterWo),
LETTER_N => Ok(Katakana::LetterN),
LETTER_VU => Ok(Katakana::LetterVu),
LETTER_SMALL_KA => Ok(Katakana::LetterSmallKa),
LETTER_SMALL_KE => Ok(Katakana::LetterSmallKe),
LETTER_VA => Ok(Katakana::LetterVa),
LETTER_VI => Ok(Katakana::LetterVi),
LETTER_VE => Ok(Katakana::LetterVe),
LETTER_VO => Ok(Katakana::LetterVo),
MIDDLE_DOT => Ok(Katakana::MiddleDot),
DASH_HIRAGANA_PROLONGED_SOUND_MARK => Ok(Katakana::DashHiraganaProlongedSoundMark),
ITERATION_MARK => Ok(Katakana::IterationMark),
VOICED_ITERATION_MARK => Ok(Katakana::VoicedIterationMark),
_ => Err(()),
}
}
}
impl Into<u32> for Katakana {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for Katakana {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for Katakana {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl Katakana {
pub fn new() -> Self {
Katakana::DashHiraganaDoubleHyphen
}
pub fn name(&self) -> &str {
match self {
Katakana::DashHiraganaDoubleHyphen => "katakana-hiragana double hyphen",
Katakana::LetterSmallA => "katakana letter small a",
Katakana::LetterA => "katakana letter a",
Katakana::LetterSmallI => "katakana letter small i",
Katakana::LetterI => "katakana letter i",
Katakana::LetterSmallU => "katakana letter small u",
Katakana::LetterU => "katakana letter u",
Katakana::LetterSmallE => "katakana letter small e",
Katakana::LetterE => "katakana letter e",
Katakana::LetterSmallO => "katakana letter small o",
Katakana::LetterO => "katakana letter o",
Katakana::LetterKa => "katakana letter ka",
Katakana::LetterGa => "katakana letter ga",
Katakana::LetterKi => "katakana letter ki",
Katakana::LetterGi => "katakana letter gi",
Katakana::LetterKu => "katakana letter ku",
Katakana::LetterGu => "katakana letter gu",
Katakana::LetterKe => "katakana letter ke",
Katakana::LetterGe => "katakana letter ge",
Katakana::LetterKo => "katakana letter ko",
Katakana::LetterGo => "katakana letter go",
Katakana::LetterSa => "katakana letter sa",
Katakana::LetterZa => "katakana letter za",
Katakana::LetterSi => "katakana letter si",
Katakana::LetterZi => "katakana letter zi",
Katakana::LetterSu => "katakana letter su",
Katakana::LetterZu => "katakana letter zu",
Katakana::LetterSe => "katakana letter se",
Katakana::LetterZe => "katakana letter ze",
Katakana::LetterSo => "katakana letter so",
Katakana::LetterZo => "katakana letter zo",
Katakana::LetterTa => "katakana letter ta",
Katakana::LetterDa => "katakana letter da",
Katakana::LetterTi => "katakana letter ti",
Katakana::LetterDi => "katakana letter di",
Katakana::LetterSmallTu => "katakana letter small tu",
Katakana::LetterTu => "katakana letter tu",
Katakana::LetterDu => "katakana letter du",
Katakana::LetterTe => "katakana letter te",
Katakana::LetterDe => "katakana letter de",
Katakana::LetterTo => "katakana letter to",
Katakana::LetterDo => "katakana letter do",
Katakana::LetterNa => "katakana letter na",
Katakana::LetterNi => "katakana letter ni",
Katakana::LetterNu => "katakana letter nu",
Katakana::LetterNe => "katakana letter ne",
Katakana::LetterNo => "katakana letter no",
Katakana::LetterHa => "katakana letter ha",
Katakana::LetterBa => "katakana letter ba",
Katakana::LetterPa => "katakana letter pa",
Katakana::LetterHi => "katakana letter hi",
Katakana::LetterBi => "katakana letter bi",
Katakana::LetterPi => "katakana letter pi",
Katakana::LetterHu => "katakana letter hu",
Katakana::LetterBu => "katakana letter bu",
Katakana::LetterPu => "katakana letter pu",
Katakana::LetterHe => "katakana letter he",
Katakana::LetterBe => "katakana letter be",
Katakana::LetterPe => "katakana letter pe",
Katakana::LetterHo => "katakana letter ho",
Katakana::LetterBo => "katakana letter bo",
Katakana::LetterPo => "katakana letter po",
Katakana::LetterMa => "katakana letter ma",
Katakana::LetterMi => "katakana letter mi",
Katakana::LetterMu => "katakana letter mu",
Katakana::LetterMe => "katakana letter me",
Katakana::LetterMo => "katakana letter mo",
Katakana::LetterSmallYa => "katakana letter small ya",
Katakana::LetterYa => "katakana letter ya",
Katakana::LetterSmallYu => "katakana letter small yu",
Katakana::LetterYu => "katakana letter yu",
Katakana::LetterSmallYo => "katakana letter small yo",
Katakana::LetterYo => "katakana letter yo",
Katakana::LetterRa => "katakana letter ra",
Katakana::LetterRi => "katakana letter ri",
Katakana::LetterRu => "katakana letter ru",
Katakana::LetterRe => "katakana letter re",
Katakana::LetterRo => "katakana letter ro",
Katakana::LetterSmallWa => "katakana letter small wa",
Katakana::LetterWa => "katakana letter wa",
Katakana::LetterWi => "katakana letter wi",
Katakana::LetterWe => "katakana letter we",
Katakana::LetterWo => "katakana letter wo",
Katakana::LetterN => "katakana letter n",
Katakana::LetterVu => "katakana letter vu",
Katakana::LetterSmallKa => "katakana letter small ka",
Katakana::LetterSmallKe => "katakana letter small ke",
Katakana::LetterVa => "katakana letter va",
Katakana::LetterVi => "katakana letter vi",
Katakana::LetterVe => "katakana letter ve",
Katakana::LetterVo => "katakana letter vo",
Katakana::MiddleDot => "katakana middle dot",
Katakana::DashHiraganaProlongedSoundMark => "katakana-hiragana prolonged sound mark",
Katakana::IterationMark => "katakana iteration mark",
Katakana::VoicedIterationMark => "katakana voiced iteration mark",
}
}
}