mod constants {
pub const LETTER_A: char = '𑠀';
pub const LETTER_AA: char = '𑠁';
pub const LETTER_I: char = '𑠂';
pub const LETTER_II: char = '𑠃';
pub const LETTER_U: char = '𑠄';
pub const LETTER_UU: char = '𑠅';
pub const LETTER_E: char = '𑠆';
pub const LETTER_AI: char = '𑠇';
pub const LETTER_O: char = '𑠈';
pub const LETTER_AU: char = '𑠉';
pub const LETTER_KA: char = '𑠊';
pub const LETTER_KHA: char = '𑠋';
pub const LETTER_GA: char = '𑠌';
pub const LETTER_GHA: char = '𑠍';
pub const LETTER_NGA: char = '𑠎';
pub const LETTER_CA: char = '𑠏';
pub const LETTER_CHA: char = '𑠐';
pub const LETTER_JA: char = '𑠑';
pub const LETTER_JHA: char = '𑠒';
pub const LETTER_NYA: char = '𑠓';
pub const LETTER_TTA: char = '𑠔';
pub const LETTER_TTHA: char = '𑠕';
pub const LETTER_DDA: char = '𑠖';
pub const LETTER_DDHA: char = '𑠗';
pub const LETTER_NNA: char = '𑠘';
pub const LETTER_TA: char = '𑠙';
pub const LETTER_THA: char = '𑠚';
pub const LETTER_DA: char = '𑠛';
pub const LETTER_DHA: char = '𑠜';
pub const LETTER_NA: char = '𑠝';
pub const LETTER_PA: char = '𑠞';
pub const LETTER_PHA: char = '𑠟';
pub const LETTER_BA: char = '𑠠';
pub const LETTER_BHA: char = '𑠡';
pub const LETTER_MA: char = '𑠢';
pub const LETTER_YA: char = '𑠣';
pub const LETTER_RA: char = '𑠤';
pub const LETTER_LA: char = '𑠥';
pub const LETTER_VA: char = '𑠦';
pub const LETTER_SHA: char = '𑠧';
pub const LETTER_SSA: char = '𑠨';
pub const LETTER_SA: char = '𑠩';
pub const LETTER_HA: char = '𑠪';
pub const LETTER_RRA: char = '𑠫';
pub const VOWEL_SIGN_AA: char = '𑠬';
pub const VOWEL_SIGN_I: char = '𑠭';
pub const VOWEL_SIGN_II: char = '𑠮';
pub const VOWEL_SIGN_U: char = '𑠯';
pub const VOWEL_SIGN_UU: char = '𑠰';
pub const VOWEL_SIGN_VOCALIC_R: char = '𑠱';
pub const VOWEL_SIGN_VOCALIC_RR: char = '𑠲';
pub const VOWEL_SIGN_E: char = '𑠳';
pub const VOWEL_SIGN_AI: char = '𑠴';
pub const VOWEL_SIGN_O: char = '𑠵';
pub const VOWEL_SIGN_AU: char = '𑠶';
pub const SIGN_ANUSVARA: char = '𑠷';
pub const SIGN_VISARGA: char = '𑠸';
pub const SIGN_VIRAMA: char = '𑠹';
pub const SIGN_NUKTA: char = '𑠺';
pub const ABBREVIATION_SIGN: char = '𑠻';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Dogra {
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterE,
LetterAi,
LetterO,
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,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterRra,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignAnusvara,
SignVisarga,
SignVirama,
SignNukta,
AbbreviationSign,
}
impl Into<char> for Dogra {
fn into(self) -> char {
use constants::*;
match self {
Dogra::LetterA => LETTER_A,
Dogra::LetterAa => LETTER_AA,
Dogra::LetterI => LETTER_I,
Dogra::LetterIi => LETTER_II,
Dogra::LetterU => LETTER_U,
Dogra::LetterUu => LETTER_UU,
Dogra::LetterE => LETTER_E,
Dogra::LetterAi => LETTER_AI,
Dogra::LetterO => LETTER_O,
Dogra::LetterAu => LETTER_AU,
Dogra::LetterKa => LETTER_KA,
Dogra::LetterKha => LETTER_KHA,
Dogra::LetterGa => LETTER_GA,
Dogra::LetterGha => LETTER_GHA,
Dogra::LetterNga => LETTER_NGA,
Dogra::LetterCa => LETTER_CA,
Dogra::LetterCha => LETTER_CHA,
Dogra::LetterJa => LETTER_JA,
Dogra::LetterJha => LETTER_JHA,
Dogra::LetterNya => LETTER_NYA,
Dogra::LetterTta => LETTER_TTA,
Dogra::LetterTtha => LETTER_TTHA,
Dogra::LetterDda => LETTER_DDA,
Dogra::LetterDdha => LETTER_DDHA,
Dogra::LetterNna => LETTER_NNA,
Dogra::LetterTa => LETTER_TA,
Dogra::LetterTha => LETTER_THA,
Dogra::LetterDa => LETTER_DA,
Dogra::LetterDha => LETTER_DHA,
Dogra::LetterNa => LETTER_NA,
Dogra::LetterPa => LETTER_PA,
Dogra::LetterPha => LETTER_PHA,
Dogra::LetterBa => LETTER_BA,
Dogra::LetterBha => LETTER_BHA,
Dogra::LetterMa => LETTER_MA,
Dogra::LetterYa => LETTER_YA,
Dogra::LetterRa => LETTER_RA,
Dogra::LetterLa => LETTER_LA,
Dogra::LetterVa => LETTER_VA,
Dogra::LetterSha => LETTER_SHA,
Dogra::LetterSsa => LETTER_SSA,
Dogra::LetterSa => LETTER_SA,
Dogra::LetterHa => LETTER_HA,
Dogra::LetterRra => LETTER_RRA,
Dogra::VowelSignAa => VOWEL_SIGN_AA,
Dogra::VowelSignI => VOWEL_SIGN_I,
Dogra::VowelSignIi => VOWEL_SIGN_II,
Dogra::VowelSignU => VOWEL_SIGN_U,
Dogra::VowelSignUu => VOWEL_SIGN_UU,
Dogra::VowelSignVocalicR => VOWEL_SIGN_VOCALIC_R,
Dogra::VowelSignVocalicRr => VOWEL_SIGN_VOCALIC_RR,
Dogra::VowelSignE => VOWEL_SIGN_E,
Dogra::VowelSignAi => VOWEL_SIGN_AI,
Dogra::VowelSignO => VOWEL_SIGN_O,
Dogra::VowelSignAu => VOWEL_SIGN_AU,
Dogra::SignAnusvara => SIGN_ANUSVARA,
Dogra::SignVisarga => SIGN_VISARGA,
Dogra::SignVirama => SIGN_VIRAMA,
Dogra::SignNukta => SIGN_NUKTA,
Dogra::AbbreviationSign => ABBREVIATION_SIGN,
}
}
}
impl std::convert::TryFrom<char> for Dogra {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Dogra::LetterA),
LETTER_AA => Ok(Dogra::LetterAa),
LETTER_I => Ok(Dogra::LetterI),
LETTER_II => Ok(Dogra::LetterIi),
LETTER_U => Ok(Dogra::LetterU),
LETTER_UU => Ok(Dogra::LetterUu),
LETTER_E => Ok(Dogra::LetterE),
LETTER_AI => Ok(Dogra::LetterAi),
LETTER_O => Ok(Dogra::LetterO),
LETTER_AU => Ok(Dogra::LetterAu),
LETTER_KA => Ok(Dogra::LetterKa),
LETTER_KHA => Ok(Dogra::LetterKha),
LETTER_GA => Ok(Dogra::LetterGa),
LETTER_GHA => Ok(Dogra::LetterGha),
LETTER_NGA => Ok(Dogra::LetterNga),
LETTER_CA => Ok(Dogra::LetterCa),
LETTER_CHA => Ok(Dogra::LetterCha),
LETTER_JA => Ok(Dogra::LetterJa),
LETTER_JHA => Ok(Dogra::LetterJha),
LETTER_NYA => Ok(Dogra::LetterNya),
LETTER_TTA => Ok(Dogra::LetterTta),
LETTER_TTHA => Ok(Dogra::LetterTtha),
LETTER_DDA => Ok(Dogra::LetterDda),
LETTER_DDHA => Ok(Dogra::LetterDdha),
LETTER_NNA => Ok(Dogra::LetterNna),
LETTER_TA => Ok(Dogra::LetterTa),
LETTER_THA => Ok(Dogra::LetterTha),
LETTER_DA => Ok(Dogra::LetterDa),
LETTER_DHA => Ok(Dogra::LetterDha),
LETTER_NA => Ok(Dogra::LetterNa),
LETTER_PA => Ok(Dogra::LetterPa),
LETTER_PHA => Ok(Dogra::LetterPha),
LETTER_BA => Ok(Dogra::LetterBa),
LETTER_BHA => Ok(Dogra::LetterBha),
LETTER_MA => Ok(Dogra::LetterMa),
LETTER_YA => Ok(Dogra::LetterYa),
LETTER_RA => Ok(Dogra::LetterRa),
LETTER_LA => Ok(Dogra::LetterLa),
LETTER_VA => Ok(Dogra::LetterVa),
LETTER_SHA => Ok(Dogra::LetterSha),
LETTER_SSA => Ok(Dogra::LetterSsa),
LETTER_SA => Ok(Dogra::LetterSa),
LETTER_HA => Ok(Dogra::LetterHa),
LETTER_RRA => Ok(Dogra::LetterRra),
VOWEL_SIGN_AA => Ok(Dogra::VowelSignAa),
VOWEL_SIGN_I => Ok(Dogra::VowelSignI),
VOWEL_SIGN_II => Ok(Dogra::VowelSignIi),
VOWEL_SIGN_U => Ok(Dogra::VowelSignU),
VOWEL_SIGN_UU => Ok(Dogra::VowelSignUu),
VOWEL_SIGN_VOCALIC_R => Ok(Dogra::VowelSignVocalicR),
VOWEL_SIGN_VOCALIC_RR => Ok(Dogra::VowelSignVocalicRr),
VOWEL_SIGN_E => Ok(Dogra::VowelSignE),
VOWEL_SIGN_AI => Ok(Dogra::VowelSignAi),
VOWEL_SIGN_O => Ok(Dogra::VowelSignO),
VOWEL_SIGN_AU => Ok(Dogra::VowelSignAu),
SIGN_ANUSVARA => Ok(Dogra::SignAnusvara),
SIGN_VISARGA => Ok(Dogra::SignVisarga),
SIGN_VIRAMA => Ok(Dogra::SignVirama),
SIGN_NUKTA => Ok(Dogra::SignNukta),
ABBREVIATION_SIGN => Ok(Dogra::AbbreviationSign),
_ => Err(()),
}
}
}
impl Into<u32> for Dogra {
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 Dogra {
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 Dogra {
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 Dogra {
pub fn new() -> Self {
Dogra::LetterA
}
pub fn name(&self) -> &str {
match self {
Dogra::LetterA => "dogra letter a",
Dogra::LetterAa => "dogra letter aa",
Dogra::LetterI => "dogra letter i",
Dogra::LetterIi => "dogra letter ii",
Dogra::LetterU => "dogra letter u",
Dogra::LetterUu => "dogra letter uu",
Dogra::LetterE => "dogra letter e",
Dogra::LetterAi => "dogra letter ai",
Dogra::LetterO => "dogra letter o",
Dogra::LetterAu => "dogra letter au",
Dogra::LetterKa => "dogra letter ka",
Dogra::LetterKha => "dogra letter kha",
Dogra::LetterGa => "dogra letter ga",
Dogra::LetterGha => "dogra letter gha",
Dogra::LetterNga => "dogra letter nga",
Dogra::LetterCa => "dogra letter ca",
Dogra::LetterCha => "dogra letter cha",
Dogra::LetterJa => "dogra letter ja",
Dogra::LetterJha => "dogra letter jha",
Dogra::LetterNya => "dogra letter nya",
Dogra::LetterTta => "dogra letter tta",
Dogra::LetterTtha => "dogra letter ttha",
Dogra::LetterDda => "dogra letter dda",
Dogra::LetterDdha => "dogra letter ddha",
Dogra::LetterNna => "dogra letter nna",
Dogra::LetterTa => "dogra letter ta",
Dogra::LetterTha => "dogra letter tha",
Dogra::LetterDa => "dogra letter da",
Dogra::LetterDha => "dogra letter dha",
Dogra::LetterNa => "dogra letter na",
Dogra::LetterPa => "dogra letter pa",
Dogra::LetterPha => "dogra letter pha",
Dogra::LetterBa => "dogra letter ba",
Dogra::LetterBha => "dogra letter bha",
Dogra::LetterMa => "dogra letter ma",
Dogra::LetterYa => "dogra letter ya",
Dogra::LetterRa => "dogra letter ra",
Dogra::LetterLa => "dogra letter la",
Dogra::LetterVa => "dogra letter va",
Dogra::LetterSha => "dogra letter sha",
Dogra::LetterSsa => "dogra letter ssa",
Dogra::LetterSa => "dogra letter sa",
Dogra::LetterHa => "dogra letter ha",
Dogra::LetterRra => "dogra letter rra",
Dogra::VowelSignAa => "dogra vowel sign aa",
Dogra::VowelSignI => "dogra vowel sign i",
Dogra::VowelSignIi => "dogra vowel sign ii",
Dogra::VowelSignU => "dogra vowel sign u",
Dogra::VowelSignUu => "dogra vowel sign uu",
Dogra::VowelSignVocalicR => "dogra vowel sign vocalic r",
Dogra::VowelSignVocalicRr => "dogra vowel sign vocalic rr",
Dogra::VowelSignE => "dogra vowel sign e",
Dogra::VowelSignAi => "dogra vowel sign ai",
Dogra::VowelSignO => "dogra vowel sign o",
Dogra::VowelSignAu => "dogra vowel sign au",
Dogra::SignAnusvara => "dogra sign anusvara",
Dogra::SignVisarga => "dogra sign visarga",
Dogra::SignVirama => "dogra sign virama",
Dogra::SignNukta => "dogra sign nukta",
Dogra::AbbreviationSign => "dogra abbreviation sign",
}
}
}