#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Gurmukhi {
SignAdakBindi,
SignBindi,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterEe,
LetterAi,
LetterOo,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterLla,
LetterVa,
LetterSha,
LetterSa,
LetterHa,
SignNukta,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignEe,
VowelSignAi,
VowelSignOo,
VowelSignAu,
SignVirama,
SignUdaat,
LetterKhha,
LetterGhha,
LetterZa,
LetterRra,
LetterFa,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
Tippi,
Addak,
Iri,
Ura,
EkOnkar,
SignYakash,
AbbreviationSign,
}
impl Into<char> for Gurmukhi {
fn into(self) -> char {
match self {
Gurmukhi::SignAdakBindi => 'ਁ',
Gurmukhi::SignBindi => 'ਂ',
Gurmukhi::SignVisarga => 'ਃ',
Gurmukhi::LetterA => 'ਅ',
Gurmukhi::LetterAa => 'ਆ',
Gurmukhi::LetterI => 'ਇ',
Gurmukhi::LetterIi => 'ਈ',
Gurmukhi::LetterU => 'ਉ',
Gurmukhi::LetterUu => 'ਊ',
Gurmukhi::LetterEe => 'ਏ',
Gurmukhi::LetterAi => 'ਐ',
Gurmukhi::LetterOo => 'ਓ',
Gurmukhi::LetterAu => 'ਔ',
Gurmukhi::LetterKa => 'ਕ',
Gurmukhi::LetterKha => 'ਖ',
Gurmukhi::LetterGa => 'ਗ',
Gurmukhi::LetterGha => 'ਘ',
Gurmukhi::LetterNga => 'ਙ',
Gurmukhi::LetterCa => 'ਚ',
Gurmukhi::LetterCha => 'ਛ',
Gurmukhi::LetterJa => 'ਜ',
Gurmukhi::LetterJha => 'ਝ',
Gurmukhi::LetterNya => 'ਞ',
Gurmukhi::LetterTta => 'ਟ',
Gurmukhi::LetterTtha => 'ਠ',
Gurmukhi::LetterDda => 'ਡ',
Gurmukhi::LetterDdha => 'ਢ',
Gurmukhi::LetterNna => 'ਣ',
Gurmukhi::LetterTa => 'ਤ',
Gurmukhi::LetterTha => 'ਥ',
Gurmukhi::LetterDa => 'ਦ',
Gurmukhi::LetterDha => 'ਧ',
Gurmukhi::LetterNa => 'ਨ',
Gurmukhi::LetterPa => 'ਪ',
Gurmukhi::LetterPha => 'ਫ',
Gurmukhi::LetterBa => 'ਬ',
Gurmukhi::LetterBha => 'ਭ',
Gurmukhi::LetterMa => 'ਮ',
Gurmukhi::LetterYa => 'ਯ',
Gurmukhi::LetterRa => 'ਰ',
Gurmukhi::LetterLa => 'ਲ',
Gurmukhi::LetterLla => 'ਲ਼',
Gurmukhi::LetterVa => 'ਵ',
Gurmukhi::LetterSha => 'ਸ਼',
Gurmukhi::LetterSa => 'ਸ',
Gurmukhi::LetterHa => 'ਹ',
Gurmukhi::SignNukta => '਼',
Gurmukhi::VowelSignAa => 'ਾ',
Gurmukhi::VowelSignI => 'ਿ',
Gurmukhi::VowelSignIi => 'ੀ',
Gurmukhi::VowelSignU => 'ੁ',
Gurmukhi::VowelSignUu => 'ੂ',
Gurmukhi::VowelSignEe => 'ੇ',
Gurmukhi::VowelSignAi => 'ੈ',
Gurmukhi::VowelSignOo => 'ੋ',
Gurmukhi::VowelSignAu => 'ੌ',
Gurmukhi::SignVirama => '੍',
Gurmukhi::SignUdaat => 'ੑ',
Gurmukhi::LetterKhha => 'ਖ਼',
Gurmukhi::LetterGhha => 'ਗ਼',
Gurmukhi::LetterZa => 'ਜ਼',
Gurmukhi::LetterRra => 'ੜ',
Gurmukhi::LetterFa => 'ਫ਼',
Gurmukhi::DigitZero => '੦',
Gurmukhi::DigitOne => '੧',
Gurmukhi::DigitTwo => '੨',
Gurmukhi::DigitThree => '੩',
Gurmukhi::DigitFour => '੪',
Gurmukhi::DigitFive => '੫',
Gurmukhi::DigitSix => '੬',
Gurmukhi::DigitSeven => '੭',
Gurmukhi::DigitEight => '੮',
Gurmukhi::DigitNine => '੯',
Gurmukhi::Tippi => 'ੰ',
Gurmukhi::Addak => 'ੱ',
Gurmukhi::Iri => 'ੲ',
Gurmukhi::Ura => 'ੳ',
Gurmukhi::EkOnkar => 'ੴ',
Gurmukhi::SignYakash => 'ੵ',
Gurmukhi::AbbreviationSign => '੶',
}
}
}
impl std::convert::TryFrom<char> for Gurmukhi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ਁ' => Ok(Gurmukhi::SignAdakBindi),
'ਂ' => Ok(Gurmukhi::SignBindi),
'ਃ' => Ok(Gurmukhi::SignVisarga),
'ਅ' => Ok(Gurmukhi::LetterA),
'ਆ' => Ok(Gurmukhi::LetterAa),
'ਇ' => Ok(Gurmukhi::LetterI),
'ਈ' => Ok(Gurmukhi::LetterIi),
'ਉ' => Ok(Gurmukhi::LetterU),
'ਊ' => Ok(Gurmukhi::LetterUu),
'ਏ' => Ok(Gurmukhi::LetterEe),
'ਐ' => Ok(Gurmukhi::LetterAi),
'ਓ' => Ok(Gurmukhi::LetterOo),
'ਔ' => Ok(Gurmukhi::LetterAu),
'ਕ' => Ok(Gurmukhi::LetterKa),
'ਖ' => Ok(Gurmukhi::LetterKha),
'ਗ' => Ok(Gurmukhi::LetterGa),
'ਘ' => Ok(Gurmukhi::LetterGha),
'ਙ' => Ok(Gurmukhi::LetterNga),
'ਚ' => Ok(Gurmukhi::LetterCa),
'ਛ' => Ok(Gurmukhi::LetterCha),
'ਜ' => Ok(Gurmukhi::LetterJa),
'ਝ' => Ok(Gurmukhi::LetterJha),
'ਞ' => Ok(Gurmukhi::LetterNya),
'ਟ' => Ok(Gurmukhi::LetterTta),
'ਠ' => Ok(Gurmukhi::LetterTtha),
'ਡ' => Ok(Gurmukhi::LetterDda),
'ਢ' => Ok(Gurmukhi::LetterDdha),
'ਣ' => Ok(Gurmukhi::LetterNna),
'ਤ' => Ok(Gurmukhi::LetterTa),
'ਥ' => Ok(Gurmukhi::LetterTha),
'ਦ' => Ok(Gurmukhi::LetterDa),
'ਧ' => Ok(Gurmukhi::LetterDha),
'ਨ' => Ok(Gurmukhi::LetterNa),
'ਪ' => Ok(Gurmukhi::LetterPa),
'ਫ' => Ok(Gurmukhi::LetterPha),
'ਬ' => Ok(Gurmukhi::LetterBa),
'ਭ' => Ok(Gurmukhi::LetterBha),
'ਮ' => Ok(Gurmukhi::LetterMa),
'ਯ' => Ok(Gurmukhi::LetterYa),
'ਰ' => Ok(Gurmukhi::LetterRa),
'ਲ' => Ok(Gurmukhi::LetterLa),
'ਲ਼' => Ok(Gurmukhi::LetterLla),
'ਵ' => Ok(Gurmukhi::LetterVa),
'ਸ਼' => Ok(Gurmukhi::LetterSha),
'ਸ' => Ok(Gurmukhi::LetterSa),
'ਹ' => Ok(Gurmukhi::LetterHa),
'਼' => Ok(Gurmukhi::SignNukta),
'ਾ' => Ok(Gurmukhi::VowelSignAa),
'ਿ' => Ok(Gurmukhi::VowelSignI),
'ੀ' => Ok(Gurmukhi::VowelSignIi),
'ੁ' => Ok(Gurmukhi::VowelSignU),
'ੂ' => Ok(Gurmukhi::VowelSignUu),
'ੇ' => Ok(Gurmukhi::VowelSignEe),
'ੈ' => Ok(Gurmukhi::VowelSignAi),
'ੋ' => Ok(Gurmukhi::VowelSignOo),
'ੌ' => Ok(Gurmukhi::VowelSignAu),
'੍' => Ok(Gurmukhi::SignVirama),
'ੑ' => Ok(Gurmukhi::SignUdaat),
'ਖ਼' => Ok(Gurmukhi::LetterKhha),
'ਗ਼' => Ok(Gurmukhi::LetterGhha),
'ਜ਼' => Ok(Gurmukhi::LetterZa),
'ੜ' => Ok(Gurmukhi::LetterRra),
'ਫ਼' => Ok(Gurmukhi::LetterFa),
'੦' => Ok(Gurmukhi::DigitZero),
'੧' => Ok(Gurmukhi::DigitOne),
'੨' => Ok(Gurmukhi::DigitTwo),
'੩' => Ok(Gurmukhi::DigitThree),
'੪' => Ok(Gurmukhi::DigitFour),
'੫' => Ok(Gurmukhi::DigitFive),
'੬' => Ok(Gurmukhi::DigitSix),
'੭' => Ok(Gurmukhi::DigitSeven),
'੮' => Ok(Gurmukhi::DigitEight),
'੯' => Ok(Gurmukhi::DigitNine),
'ੰ' => Ok(Gurmukhi::Tippi),
'ੱ' => Ok(Gurmukhi::Addak),
'ੲ' => Ok(Gurmukhi::Iri),
'ੳ' => Ok(Gurmukhi::Ura),
'ੴ' => Ok(Gurmukhi::EkOnkar),
'ੵ' => Ok(Gurmukhi::SignYakash),
'੶' => Ok(Gurmukhi::AbbreviationSign),
_ => Err(()),
}
}
}
impl Into<u32> for Gurmukhi {
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 Gurmukhi {
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 Gurmukhi {
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 Gurmukhi {
pub fn new() -> Self {
Gurmukhi::SignAdakBindi
}
pub fn name(&self) -> String {
let s = std::format!("Gurmukhi{:#?}", self);
string_morph::to_sentence_case(&s)
}
}