mod constants {
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 COMBINING_KATAKANA_DASH_VOICED_SOUND_MARK: char = '゙';
pub const COMBINING_KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK: char = '゚';
pub const KATAKANA_DASH_VOICED_SOUND_MARK: char = '゛';
pub const KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK: char = '゜';
pub const ITERATION_MARK: char = 'ゝ';
pub const VOICED_ITERATION_MARK: char = 'ゞ';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Hiragana {
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,
CombiningKatakanaDashVoicedSoundMark,
CombiningKatakanaDashSemiDashVoicedSoundMark,
KatakanaDashVoicedSoundMark,
KatakanaDashSemiDashVoicedSoundMark,
IterationMark,
VoicedIterationMark,
}
impl Into<char> for Hiragana {
fn into(self) -> char {
use constants::*;
match self {
Hiragana::LetterSmallA => LETTER_SMALL_A,
Hiragana::LetterA => LETTER_A,
Hiragana::LetterSmallI => LETTER_SMALL_I,
Hiragana::LetterI => LETTER_I,
Hiragana::LetterSmallU => LETTER_SMALL_U,
Hiragana::LetterU => LETTER_U,
Hiragana::LetterSmallE => LETTER_SMALL_E,
Hiragana::LetterE => LETTER_E,
Hiragana::LetterSmallO => LETTER_SMALL_O,
Hiragana::LetterO => LETTER_O,
Hiragana::LetterKa => LETTER_KA,
Hiragana::LetterGa => LETTER_GA,
Hiragana::LetterKi => LETTER_KI,
Hiragana::LetterGi => LETTER_GI,
Hiragana::LetterKu => LETTER_KU,
Hiragana::LetterGu => LETTER_GU,
Hiragana::LetterKe => LETTER_KE,
Hiragana::LetterGe => LETTER_GE,
Hiragana::LetterKo => LETTER_KO,
Hiragana::LetterGo => LETTER_GO,
Hiragana::LetterSa => LETTER_SA,
Hiragana::LetterZa => LETTER_ZA,
Hiragana::LetterSi => LETTER_SI,
Hiragana::LetterZi => LETTER_ZI,
Hiragana::LetterSu => LETTER_SU,
Hiragana::LetterZu => LETTER_ZU,
Hiragana::LetterSe => LETTER_SE,
Hiragana::LetterZe => LETTER_ZE,
Hiragana::LetterSo => LETTER_SO,
Hiragana::LetterZo => LETTER_ZO,
Hiragana::LetterTa => LETTER_TA,
Hiragana::LetterDa => LETTER_DA,
Hiragana::LetterTi => LETTER_TI,
Hiragana::LetterDi => LETTER_DI,
Hiragana::LetterSmallTu => LETTER_SMALL_TU,
Hiragana::LetterTu => LETTER_TU,
Hiragana::LetterDu => LETTER_DU,
Hiragana::LetterTe => LETTER_TE,
Hiragana::LetterDe => LETTER_DE,
Hiragana::LetterTo => LETTER_TO,
Hiragana::LetterDo => LETTER_DO,
Hiragana::LetterNa => LETTER_NA,
Hiragana::LetterNi => LETTER_NI,
Hiragana::LetterNu => LETTER_NU,
Hiragana::LetterNe => LETTER_NE,
Hiragana::LetterNo => LETTER_NO,
Hiragana::LetterHa => LETTER_HA,
Hiragana::LetterBa => LETTER_BA,
Hiragana::LetterPa => LETTER_PA,
Hiragana::LetterHi => LETTER_HI,
Hiragana::LetterBi => LETTER_BI,
Hiragana::LetterPi => LETTER_PI,
Hiragana::LetterHu => LETTER_HU,
Hiragana::LetterBu => LETTER_BU,
Hiragana::LetterPu => LETTER_PU,
Hiragana::LetterHe => LETTER_HE,
Hiragana::LetterBe => LETTER_BE,
Hiragana::LetterPe => LETTER_PE,
Hiragana::LetterHo => LETTER_HO,
Hiragana::LetterBo => LETTER_BO,
Hiragana::LetterPo => LETTER_PO,
Hiragana::LetterMa => LETTER_MA,
Hiragana::LetterMi => LETTER_MI,
Hiragana::LetterMu => LETTER_MU,
Hiragana::LetterMe => LETTER_ME,
Hiragana::LetterMo => LETTER_MO,
Hiragana::LetterSmallYa => LETTER_SMALL_YA,
Hiragana::LetterYa => LETTER_YA,
Hiragana::LetterSmallYu => LETTER_SMALL_YU,
Hiragana::LetterYu => LETTER_YU,
Hiragana::LetterSmallYo => LETTER_SMALL_YO,
Hiragana::LetterYo => LETTER_YO,
Hiragana::LetterRa => LETTER_RA,
Hiragana::LetterRi => LETTER_RI,
Hiragana::LetterRu => LETTER_RU,
Hiragana::LetterRe => LETTER_RE,
Hiragana::LetterRo => LETTER_RO,
Hiragana::LetterSmallWa => LETTER_SMALL_WA,
Hiragana::LetterWa => LETTER_WA,
Hiragana::LetterWi => LETTER_WI,
Hiragana::LetterWe => LETTER_WE,
Hiragana::LetterWo => LETTER_WO,
Hiragana::LetterN => LETTER_N,
Hiragana::LetterVu => LETTER_VU,
Hiragana::LetterSmallKa => LETTER_SMALL_KA,
Hiragana::LetterSmallKe => LETTER_SMALL_KE,
Hiragana::CombiningKatakanaDashVoicedSoundMark => COMBINING_KATAKANA_DASH_VOICED_SOUND_MARK,
Hiragana::CombiningKatakanaDashSemiDashVoicedSoundMark => COMBINING_KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK,
Hiragana::KatakanaDashVoicedSoundMark => KATAKANA_DASH_VOICED_SOUND_MARK,
Hiragana::KatakanaDashSemiDashVoicedSoundMark => KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK,
Hiragana::IterationMark => ITERATION_MARK,
Hiragana::VoicedIterationMark => VOICED_ITERATION_MARK,
}
}
}
impl std::convert::TryFrom<char> for Hiragana {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_SMALL_A => Ok(Hiragana::LetterSmallA),
LETTER_A => Ok(Hiragana::LetterA),
LETTER_SMALL_I => Ok(Hiragana::LetterSmallI),
LETTER_I => Ok(Hiragana::LetterI),
LETTER_SMALL_U => Ok(Hiragana::LetterSmallU),
LETTER_U => Ok(Hiragana::LetterU),
LETTER_SMALL_E => Ok(Hiragana::LetterSmallE),
LETTER_E => Ok(Hiragana::LetterE),
LETTER_SMALL_O => Ok(Hiragana::LetterSmallO),
LETTER_O => Ok(Hiragana::LetterO),
LETTER_KA => Ok(Hiragana::LetterKa),
LETTER_GA => Ok(Hiragana::LetterGa),
LETTER_KI => Ok(Hiragana::LetterKi),
LETTER_GI => Ok(Hiragana::LetterGi),
LETTER_KU => Ok(Hiragana::LetterKu),
LETTER_GU => Ok(Hiragana::LetterGu),
LETTER_KE => Ok(Hiragana::LetterKe),
LETTER_GE => Ok(Hiragana::LetterGe),
LETTER_KO => Ok(Hiragana::LetterKo),
LETTER_GO => Ok(Hiragana::LetterGo),
LETTER_SA => Ok(Hiragana::LetterSa),
LETTER_ZA => Ok(Hiragana::LetterZa),
LETTER_SI => Ok(Hiragana::LetterSi),
LETTER_ZI => Ok(Hiragana::LetterZi),
LETTER_SU => Ok(Hiragana::LetterSu),
LETTER_ZU => Ok(Hiragana::LetterZu),
LETTER_SE => Ok(Hiragana::LetterSe),
LETTER_ZE => Ok(Hiragana::LetterZe),
LETTER_SO => Ok(Hiragana::LetterSo),
LETTER_ZO => Ok(Hiragana::LetterZo),
LETTER_TA => Ok(Hiragana::LetterTa),
LETTER_DA => Ok(Hiragana::LetterDa),
LETTER_TI => Ok(Hiragana::LetterTi),
LETTER_DI => Ok(Hiragana::LetterDi),
LETTER_SMALL_TU => Ok(Hiragana::LetterSmallTu),
LETTER_TU => Ok(Hiragana::LetterTu),
LETTER_DU => Ok(Hiragana::LetterDu),
LETTER_TE => Ok(Hiragana::LetterTe),
LETTER_DE => Ok(Hiragana::LetterDe),
LETTER_TO => Ok(Hiragana::LetterTo),
LETTER_DO => Ok(Hiragana::LetterDo),
LETTER_NA => Ok(Hiragana::LetterNa),
LETTER_NI => Ok(Hiragana::LetterNi),
LETTER_NU => Ok(Hiragana::LetterNu),
LETTER_NE => Ok(Hiragana::LetterNe),
LETTER_NO => Ok(Hiragana::LetterNo),
LETTER_HA => Ok(Hiragana::LetterHa),
LETTER_BA => Ok(Hiragana::LetterBa),
LETTER_PA => Ok(Hiragana::LetterPa),
LETTER_HI => Ok(Hiragana::LetterHi),
LETTER_BI => Ok(Hiragana::LetterBi),
LETTER_PI => Ok(Hiragana::LetterPi),
LETTER_HU => Ok(Hiragana::LetterHu),
LETTER_BU => Ok(Hiragana::LetterBu),
LETTER_PU => Ok(Hiragana::LetterPu),
LETTER_HE => Ok(Hiragana::LetterHe),
LETTER_BE => Ok(Hiragana::LetterBe),
LETTER_PE => Ok(Hiragana::LetterPe),
LETTER_HO => Ok(Hiragana::LetterHo),
LETTER_BO => Ok(Hiragana::LetterBo),
LETTER_PO => Ok(Hiragana::LetterPo),
LETTER_MA => Ok(Hiragana::LetterMa),
LETTER_MI => Ok(Hiragana::LetterMi),
LETTER_MU => Ok(Hiragana::LetterMu),
LETTER_ME => Ok(Hiragana::LetterMe),
LETTER_MO => Ok(Hiragana::LetterMo),
LETTER_SMALL_YA => Ok(Hiragana::LetterSmallYa),
LETTER_YA => Ok(Hiragana::LetterYa),
LETTER_SMALL_YU => Ok(Hiragana::LetterSmallYu),
LETTER_YU => Ok(Hiragana::LetterYu),
LETTER_SMALL_YO => Ok(Hiragana::LetterSmallYo),
LETTER_YO => Ok(Hiragana::LetterYo),
LETTER_RA => Ok(Hiragana::LetterRa),
LETTER_RI => Ok(Hiragana::LetterRi),
LETTER_RU => Ok(Hiragana::LetterRu),
LETTER_RE => Ok(Hiragana::LetterRe),
LETTER_RO => Ok(Hiragana::LetterRo),
LETTER_SMALL_WA => Ok(Hiragana::LetterSmallWa),
LETTER_WA => Ok(Hiragana::LetterWa),
LETTER_WI => Ok(Hiragana::LetterWi),
LETTER_WE => Ok(Hiragana::LetterWe),
LETTER_WO => Ok(Hiragana::LetterWo),
LETTER_N => Ok(Hiragana::LetterN),
LETTER_VU => Ok(Hiragana::LetterVu),
LETTER_SMALL_KA => Ok(Hiragana::LetterSmallKa),
LETTER_SMALL_KE => Ok(Hiragana::LetterSmallKe),
COMBINING_KATAKANA_DASH_VOICED_SOUND_MARK => Ok(Hiragana::CombiningKatakanaDashVoicedSoundMark),
COMBINING_KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK => Ok(Hiragana::CombiningKatakanaDashSemiDashVoicedSoundMark),
KATAKANA_DASH_VOICED_SOUND_MARK => Ok(Hiragana::KatakanaDashVoicedSoundMark),
KATAKANA_DASH_SEMI_DASH_VOICED_SOUND_MARK => Ok(Hiragana::KatakanaDashSemiDashVoicedSoundMark),
ITERATION_MARK => Ok(Hiragana::IterationMark),
VOICED_ITERATION_MARK => Ok(Hiragana::VoicedIterationMark),
_ => Err(()),
}
}
}
impl Into<u32> for Hiragana {
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 Hiragana {
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 Hiragana {
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 Hiragana {
pub fn new() -> Self {
Hiragana::LetterSmallA
}
pub fn name(&self) -> &str {
match self {
Hiragana::LetterSmallA => "hiragana letter small a",
Hiragana::LetterA => "hiragana letter a",
Hiragana::LetterSmallI => "hiragana letter small i",
Hiragana::LetterI => "hiragana letter i",
Hiragana::LetterSmallU => "hiragana letter small u",
Hiragana::LetterU => "hiragana letter u",
Hiragana::LetterSmallE => "hiragana letter small e",
Hiragana::LetterE => "hiragana letter e",
Hiragana::LetterSmallO => "hiragana letter small o",
Hiragana::LetterO => "hiragana letter o",
Hiragana::LetterKa => "hiragana letter ka",
Hiragana::LetterGa => "hiragana letter ga",
Hiragana::LetterKi => "hiragana letter ki",
Hiragana::LetterGi => "hiragana letter gi",
Hiragana::LetterKu => "hiragana letter ku",
Hiragana::LetterGu => "hiragana letter gu",
Hiragana::LetterKe => "hiragana letter ke",
Hiragana::LetterGe => "hiragana letter ge",
Hiragana::LetterKo => "hiragana letter ko",
Hiragana::LetterGo => "hiragana letter go",
Hiragana::LetterSa => "hiragana letter sa",
Hiragana::LetterZa => "hiragana letter za",
Hiragana::LetterSi => "hiragana letter si",
Hiragana::LetterZi => "hiragana letter zi",
Hiragana::LetterSu => "hiragana letter su",
Hiragana::LetterZu => "hiragana letter zu",
Hiragana::LetterSe => "hiragana letter se",
Hiragana::LetterZe => "hiragana letter ze",
Hiragana::LetterSo => "hiragana letter so",
Hiragana::LetterZo => "hiragana letter zo",
Hiragana::LetterTa => "hiragana letter ta",
Hiragana::LetterDa => "hiragana letter da",
Hiragana::LetterTi => "hiragana letter ti",
Hiragana::LetterDi => "hiragana letter di",
Hiragana::LetterSmallTu => "hiragana letter small tu",
Hiragana::LetterTu => "hiragana letter tu",
Hiragana::LetterDu => "hiragana letter du",
Hiragana::LetterTe => "hiragana letter te",
Hiragana::LetterDe => "hiragana letter de",
Hiragana::LetterTo => "hiragana letter to",
Hiragana::LetterDo => "hiragana letter do",
Hiragana::LetterNa => "hiragana letter na",
Hiragana::LetterNi => "hiragana letter ni",
Hiragana::LetterNu => "hiragana letter nu",
Hiragana::LetterNe => "hiragana letter ne",
Hiragana::LetterNo => "hiragana letter no",
Hiragana::LetterHa => "hiragana letter ha",
Hiragana::LetterBa => "hiragana letter ba",
Hiragana::LetterPa => "hiragana letter pa",
Hiragana::LetterHi => "hiragana letter hi",
Hiragana::LetterBi => "hiragana letter bi",
Hiragana::LetterPi => "hiragana letter pi",
Hiragana::LetterHu => "hiragana letter hu",
Hiragana::LetterBu => "hiragana letter bu",
Hiragana::LetterPu => "hiragana letter pu",
Hiragana::LetterHe => "hiragana letter he",
Hiragana::LetterBe => "hiragana letter be",
Hiragana::LetterPe => "hiragana letter pe",
Hiragana::LetterHo => "hiragana letter ho",
Hiragana::LetterBo => "hiragana letter bo",
Hiragana::LetterPo => "hiragana letter po",
Hiragana::LetterMa => "hiragana letter ma",
Hiragana::LetterMi => "hiragana letter mi",
Hiragana::LetterMu => "hiragana letter mu",
Hiragana::LetterMe => "hiragana letter me",
Hiragana::LetterMo => "hiragana letter mo",
Hiragana::LetterSmallYa => "hiragana letter small ya",
Hiragana::LetterYa => "hiragana letter ya",
Hiragana::LetterSmallYu => "hiragana letter small yu",
Hiragana::LetterYu => "hiragana letter yu",
Hiragana::LetterSmallYo => "hiragana letter small yo",
Hiragana::LetterYo => "hiragana letter yo",
Hiragana::LetterRa => "hiragana letter ra",
Hiragana::LetterRi => "hiragana letter ri",
Hiragana::LetterRu => "hiragana letter ru",
Hiragana::LetterRe => "hiragana letter re",
Hiragana::LetterRo => "hiragana letter ro",
Hiragana::LetterSmallWa => "hiragana letter small wa",
Hiragana::LetterWa => "hiragana letter wa",
Hiragana::LetterWi => "hiragana letter wi",
Hiragana::LetterWe => "hiragana letter we",
Hiragana::LetterWo => "hiragana letter wo",
Hiragana::LetterN => "hiragana letter n",
Hiragana::LetterVu => "hiragana letter vu",
Hiragana::LetterSmallKa => "hiragana letter small ka",
Hiragana::LetterSmallKe => "hiragana letter small ke",
Hiragana::CombiningKatakanaDashVoicedSoundMark => "combining katakana-hiragana voiced sound mark",
Hiragana::CombiningKatakanaDashSemiDashVoicedSoundMark => "combining katakana-hiragana semi-voiced sound mark",
Hiragana::KatakanaDashVoicedSoundMark => "katakana-hiragana voiced sound mark",
Hiragana::KatakanaDashSemiDashVoicedSoundMark => "katakana-hiragana semi-voiced sound mark",
Hiragana::IterationMark => "hiragana iteration mark",
Hiragana::VoicedIterationMark => "hiragana voiced iteration mark",
}
}
}