#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Devanagari {
SignInvertedCandrabindu,
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterShortA,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicL,
LetterCandraE,
LetterShortE,
LetterE,
LetterAi,
LetterCandraO,
LetterShortO,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterNnna,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterRra,
LetterLa,
LetterLla,
LetterLlla,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
VowelSignOe,
VowelSignOoe,
SignNukta,
SignAvagraha,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignCandraE,
VowelSignShortE,
VowelSignE,
VowelSignAi,
VowelSignCandraO,
VowelSignShortO,
VowelSignO,
VowelSignAu,
SignVirama,
VowelSignPrishthamatraE,
VowelSignAw,
Om,
StressSignUdatta,
StressSignAnudatta,
GraveAccent,
AcuteAccent,
VowelSignCandraLongE,
VowelSignUe,
VowelSignUue,
LetterQa,
LetterKhha,
LetterGhha,
LetterZa,
LetterDddha,
LetterRha,
LetterFa,
LetterYya,
LetterVocalicRr,
LetterVocalicLl,
VowelSignVocalicL,
VowelSignVocalicLl,
Danda,
DoubleDanda,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
AbbreviationSign,
SignHighSpacingDot,
LetterCandraA,
LetterOe,
LetterOoe,
LetterAw,
LetterUe,
LetterUue,
LetterMarwariDda,
LetterZha,
LetterHeavyYa,
LetterGga,
LetterJja,
LetterGlottalStop,
LetterDdda,
}
impl Into<char> for Devanagari {
fn into(self) -> char {
match self {
Devanagari::SignInvertedCandrabindu => 'ऀ',
Devanagari::SignCandrabindu => 'ँ',
Devanagari::SignAnusvara => 'ं',
Devanagari::SignVisarga => 'ः',
Devanagari::LetterShortA => 'ऄ',
Devanagari::LetterA => 'अ',
Devanagari::LetterAa => 'आ',
Devanagari::LetterI => 'इ',
Devanagari::LetterIi => 'ई',
Devanagari::LetterU => 'उ',
Devanagari::LetterUu => 'ऊ',
Devanagari::LetterVocalicR => 'ऋ',
Devanagari::LetterVocalicL => 'ऌ',
Devanagari::LetterCandraE => 'ऍ',
Devanagari::LetterShortE => 'ऎ',
Devanagari::LetterE => 'ए',
Devanagari::LetterAi => 'ऐ',
Devanagari::LetterCandraO => 'ऑ',
Devanagari::LetterShortO => 'ऒ',
Devanagari::LetterO => 'ओ',
Devanagari::LetterAu => 'औ',
Devanagari::LetterKa => 'क',
Devanagari::LetterKha => 'ख',
Devanagari::LetterGa => 'ग',
Devanagari::LetterGha => 'घ',
Devanagari::LetterNga => 'ङ',
Devanagari::LetterCa => 'च',
Devanagari::LetterCha => 'छ',
Devanagari::LetterJa => 'ज',
Devanagari::LetterJha => 'झ',
Devanagari::LetterNya => 'ञ',
Devanagari::LetterTta => 'ट',
Devanagari::LetterTtha => 'ठ',
Devanagari::LetterDda => 'ड',
Devanagari::LetterDdha => 'ढ',
Devanagari::LetterNna => 'ण',
Devanagari::LetterTa => 'त',
Devanagari::LetterTha => 'थ',
Devanagari::LetterDa => 'द',
Devanagari::LetterDha => 'ध',
Devanagari::LetterNa => 'न',
Devanagari::LetterNnna => 'ऩ',
Devanagari::LetterPa => 'प',
Devanagari::LetterPha => 'फ',
Devanagari::LetterBa => 'ब',
Devanagari::LetterBha => 'भ',
Devanagari::LetterMa => 'म',
Devanagari::LetterYa => 'य',
Devanagari::LetterRa => 'र',
Devanagari::LetterRra => 'ऱ',
Devanagari::LetterLa => 'ल',
Devanagari::LetterLla => 'ळ',
Devanagari::LetterLlla => 'ऴ',
Devanagari::LetterVa => 'व',
Devanagari::LetterSha => 'श',
Devanagari::LetterSsa => 'ष',
Devanagari::LetterSa => 'स',
Devanagari::LetterHa => 'ह',
Devanagari::VowelSignOe => 'ऺ',
Devanagari::VowelSignOoe => 'ऻ',
Devanagari::SignNukta => '़',
Devanagari::SignAvagraha => 'ऽ',
Devanagari::VowelSignAa => 'ा',
Devanagari::VowelSignI => 'ि',
Devanagari::VowelSignIi => 'ी',
Devanagari::VowelSignU => 'ु',
Devanagari::VowelSignUu => 'ू',
Devanagari::VowelSignVocalicR => 'ृ',
Devanagari::VowelSignVocalicRr => 'ॄ',
Devanagari::VowelSignCandraE => 'ॅ',
Devanagari::VowelSignShortE => 'ॆ',
Devanagari::VowelSignE => 'े',
Devanagari::VowelSignAi => 'ै',
Devanagari::VowelSignCandraO => 'ॉ',
Devanagari::VowelSignShortO => 'ॊ',
Devanagari::VowelSignO => 'ो',
Devanagari::VowelSignAu => 'ौ',
Devanagari::SignVirama => '्',
Devanagari::VowelSignPrishthamatraE => 'ॎ',
Devanagari::VowelSignAw => 'ॏ',
Devanagari::Om => 'ॐ',
Devanagari::StressSignUdatta => '॑',
Devanagari::StressSignAnudatta => '॒',
Devanagari::GraveAccent => '॓',
Devanagari::AcuteAccent => '॔',
Devanagari::VowelSignCandraLongE => 'ॕ',
Devanagari::VowelSignUe => 'ॖ',
Devanagari::VowelSignUue => 'ॗ',
Devanagari::LetterQa => 'क़',
Devanagari::LetterKhha => 'ख़',
Devanagari::LetterGhha => 'ग़',
Devanagari::LetterZa => 'ज़',
Devanagari::LetterDddha => 'ड़',
Devanagari::LetterRha => 'ढ़',
Devanagari::LetterFa => 'फ़',
Devanagari::LetterYya => 'य़',
Devanagari::LetterVocalicRr => 'ॠ',
Devanagari::LetterVocalicLl => 'ॡ',
Devanagari::VowelSignVocalicL => 'ॢ',
Devanagari::VowelSignVocalicLl => 'ॣ',
Devanagari::Danda => '।',
Devanagari::DoubleDanda => '॥',
Devanagari::DigitZero => '०',
Devanagari::DigitOne => '१',
Devanagari::DigitTwo => '२',
Devanagari::DigitThree => '३',
Devanagari::DigitFour => '४',
Devanagari::DigitFive => '५',
Devanagari::DigitSix => '६',
Devanagari::DigitSeven => '७',
Devanagari::DigitEight => '८',
Devanagari::DigitNine => '९',
Devanagari::AbbreviationSign => '॰',
Devanagari::SignHighSpacingDot => 'ॱ',
Devanagari::LetterCandraA => 'ॲ',
Devanagari::LetterOe => 'ॳ',
Devanagari::LetterOoe => 'ॴ',
Devanagari::LetterAw => 'ॵ',
Devanagari::LetterUe => 'ॶ',
Devanagari::LetterUue => 'ॷ',
Devanagari::LetterMarwariDda => 'ॸ',
Devanagari::LetterZha => 'ॹ',
Devanagari::LetterHeavyYa => 'ॺ',
Devanagari::LetterGga => 'ॻ',
Devanagari::LetterJja => 'ॼ',
Devanagari::LetterGlottalStop => 'ॽ',
Devanagari::LetterDdda => 'ॾ',
}
}
}
impl std::convert::TryFrom<char> for Devanagari {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ऀ' => Ok(Devanagari::SignInvertedCandrabindu),
'ँ' => Ok(Devanagari::SignCandrabindu),
'ं' => Ok(Devanagari::SignAnusvara),
'ः' => Ok(Devanagari::SignVisarga),
'ऄ' => Ok(Devanagari::LetterShortA),
'अ' => Ok(Devanagari::LetterA),
'आ' => Ok(Devanagari::LetterAa),
'इ' => Ok(Devanagari::LetterI),
'ई' => Ok(Devanagari::LetterIi),
'उ' => Ok(Devanagari::LetterU),
'ऊ' => Ok(Devanagari::LetterUu),
'ऋ' => Ok(Devanagari::LetterVocalicR),
'ऌ' => Ok(Devanagari::LetterVocalicL),
'ऍ' => Ok(Devanagari::LetterCandraE),
'ऎ' => Ok(Devanagari::LetterShortE),
'ए' => Ok(Devanagari::LetterE),
'ऐ' => Ok(Devanagari::LetterAi),
'ऑ' => Ok(Devanagari::LetterCandraO),
'ऒ' => Ok(Devanagari::LetterShortO),
'ओ' => Ok(Devanagari::LetterO),
'औ' => Ok(Devanagari::LetterAu),
'क' => Ok(Devanagari::LetterKa),
'ख' => Ok(Devanagari::LetterKha),
'ग' => Ok(Devanagari::LetterGa),
'घ' => Ok(Devanagari::LetterGha),
'ङ' => Ok(Devanagari::LetterNga),
'च' => Ok(Devanagari::LetterCa),
'छ' => Ok(Devanagari::LetterCha),
'ज' => Ok(Devanagari::LetterJa),
'झ' => Ok(Devanagari::LetterJha),
'ञ' => Ok(Devanagari::LetterNya),
'ट' => Ok(Devanagari::LetterTta),
'ठ' => Ok(Devanagari::LetterTtha),
'ड' => Ok(Devanagari::LetterDda),
'ढ' => Ok(Devanagari::LetterDdha),
'ण' => Ok(Devanagari::LetterNna),
'त' => Ok(Devanagari::LetterTa),
'थ' => Ok(Devanagari::LetterTha),
'द' => Ok(Devanagari::LetterDa),
'ध' => Ok(Devanagari::LetterDha),
'न' => Ok(Devanagari::LetterNa),
'ऩ' => Ok(Devanagari::LetterNnna),
'प' => Ok(Devanagari::LetterPa),
'फ' => Ok(Devanagari::LetterPha),
'ब' => Ok(Devanagari::LetterBa),
'भ' => Ok(Devanagari::LetterBha),
'म' => Ok(Devanagari::LetterMa),
'य' => Ok(Devanagari::LetterYa),
'र' => Ok(Devanagari::LetterRa),
'ऱ' => Ok(Devanagari::LetterRra),
'ल' => Ok(Devanagari::LetterLa),
'ळ' => Ok(Devanagari::LetterLla),
'ऴ' => Ok(Devanagari::LetterLlla),
'व' => Ok(Devanagari::LetterVa),
'श' => Ok(Devanagari::LetterSha),
'ष' => Ok(Devanagari::LetterSsa),
'स' => Ok(Devanagari::LetterSa),
'ह' => Ok(Devanagari::LetterHa),
'ऺ' => Ok(Devanagari::VowelSignOe),
'ऻ' => Ok(Devanagari::VowelSignOoe),
'़' => Ok(Devanagari::SignNukta),
'ऽ' => Ok(Devanagari::SignAvagraha),
'ा' => Ok(Devanagari::VowelSignAa),
'ि' => Ok(Devanagari::VowelSignI),
'ी' => Ok(Devanagari::VowelSignIi),
'ु' => Ok(Devanagari::VowelSignU),
'ू' => Ok(Devanagari::VowelSignUu),
'ृ' => Ok(Devanagari::VowelSignVocalicR),
'ॄ' => Ok(Devanagari::VowelSignVocalicRr),
'ॅ' => Ok(Devanagari::VowelSignCandraE),
'ॆ' => Ok(Devanagari::VowelSignShortE),
'े' => Ok(Devanagari::VowelSignE),
'ै' => Ok(Devanagari::VowelSignAi),
'ॉ' => Ok(Devanagari::VowelSignCandraO),
'ॊ' => Ok(Devanagari::VowelSignShortO),
'ो' => Ok(Devanagari::VowelSignO),
'ौ' => Ok(Devanagari::VowelSignAu),
'्' => Ok(Devanagari::SignVirama),
'ॎ' => Ok(Devanagari::VowelSignPrishthamatraE),
'ॏ' => Ok(Devanagari::VowelSignAw),
'ॐ' => Ok(Devanagari::Om),
'॑' => Ok(Devanagari::StressSignUdatta),
'॒' => Ok(Devanagari::StressSignAnudatta),
'॓' => Ok(Devanagari::GraveAccent),
'॔' => Ok(Devanagari::AcuteAccent),
'ॕ' => Ok(Devanagari::VowelSignCandraLongE),
'ॖ' => Ok(Devanagari::VowelSignUe),
'ॗ' => Ok(Devanagari::VowelSignUue),
'क़' => Ok(Devanagari::LetterQa),
'ख़' => Ok(Devanagari::LetterKhha),
'ग़' => Ok(Devanagari::LetterGhha),
'ज़' => Ok(Devanagari::LetterZa),
'ड़' => Ok(Devanagari::LetterDddha),
'ढ़' => Ok(Devanagari::LetterRha),
'फ़' => Ok(Devanagari::LetterFa),
'य़' => Ok(Devanagari::LetterYya),
'ॠ' => Ok(Devanagari::LetterVocalicRr),
'ॡ' => Ok(Devanagari::LetterVocalicLl),
'ॢ' => Ok(Devanagari::VowelSignVocalicL),
'ॣ' => Ok(Devanagari::VowelSignVocalicLl),
'।' => Ok(Devanagari::Danda),
'॥' => Ok(Devanagari::DoubleDanda),
'०' => Ok(Devanagari::DigitZero),
'१' => Ok(Devanagari::DigitOne),
'२' => Ok(Devanagari::DigitTwo),
'३' => Ok(Devanagari::DigitThree),
'४' => Ok(Devanagari::DigitFour),
'५' => Ok(Devanagari::DigitFive),
'६' => Ok(Devanagari::DigitSix),
'७' => Ok(Devanagari::DigitSeven),
'८' => Ok(Devanagari::DigitEight),
'९' => Ok(Devanagari::DigitNine),
'॰' => Ok(Devanagari::AbbreviationSign),
'ॱ' => Ok(Devanagari::SignHighSpacingDot),
'ॲ' => Ok(Devanagari::LetterCandraA),
'ॳ' => Ok(Devanagari::LetterOe),
'ॴ' => Ok(Devanagari::LetterOoe),
'ॵ' => Ok(Devanagari::LetterAw),
'ॶ' => Ok(Devanagari::LetterUe),
'ॷ' => Ok(Devanagari::LetterUue),
'ॸ' => Ok(Devanagari::LetterMarwariDda),
'ॹ' => Ok(Devanagari::LetterZha),
'ॺ' => Ok(Devanagari::LetterHeavyYa),
'ॻ' => Ok(Devanagari::LetterGga),
'ॼ' => Ok(Devanagari::LetterJja),
'ॽ' => Ok(Devanagari::LetterGlottalStop),
'ॾ' => Ok(Devanagari::LetterDdda),
_ => Err(()),
}
}
}
impl Into<u32> for Devanagari {
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 Devanagari {
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 Devanagari {
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 Devanagari {
pub fn new() -> Self {
Devanagari::SignInvertedCandrabindu
}
pub fn name(&self) -> String {
let s = std::format!("Devanagari{:#?}", self);
string_morph::to_sentence_case(&s)
}
}