mod constants {
pub const SIGN_COMBINING_ANUSVARA_ABOVE: char = '𑌀';
pub const SIGN_CANDRABINDU: char = '𑌁';
pub const SIGN_ANUSVARA: char = '𑌂';
pub const SIGN_VISARGA: char = '𑌃';
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_VOCALIC_R: char = '𑌋';
pub const LETTER_VOCALIC_L: char = '𑌌';
pub const LETTER_EE: char = '𑌏';
pub const LETTER_AI: char = '𑌐';
pub const LETTER_OO: 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_LLA: 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 COMBINING_BINDU_BELOW: char = '𑌻';
pub const SIGN_NUKTA: char = '𑌼';
pub const SIGN_AVAGRAHA: 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_EE: char = '𑍇';
pub const VOWEL_SIGN_AI: char = '𑍈';
pub const VOWEL_SIGN_OO: char = '𑍋';
pub const VOWEL_SIGN_AU: char = '𑍌';
pub const SIGN_VIRAMA: char = '𑍍';
pub const OM: char = '𑍐';
pub const AU_LENGTH_MARK: char = '𑍗';
pub const SIGN_PLUTA: char = '𑍝';
pub const LETTER_VEDIC_ANUSVARA: char = '𑍞';
pub const LETTER_VEDIC_DOUBLE_ANUSVARA: char = '𑍟';
pub const LETTER_VOCALIC_RR: char = '𑍠';
pub const LETTER_VOCALIC_LL: char = '𑍡';
pub const VOWEL_SIGN_VOCALIC_L: char = '𑍢';
pub const VOWEL_SIGN_VOCALIC_LL: char = '𑍣';
pub const COMBINING_DIGIT_ZERO: char = '𑍦';
pub const COMBINING_DIGIT_ONE: char = '𑍧';
pub const COMBINING_DIGIT_TWO: char = '𑍨';
pub const COMBINING_DIGIT_THREE: char = '𑍩';
pub const COMBINING_DIGIT_FOUR: char = '𑍪';
pub const COMBINING_DIGIT_FIVE: char = '𑍫';
pub const COMBINING_DIGIT_SIX: char = '𑍬';
pub const COMBINING_LETTER_A: char = '𑍰';
pub const COMBINING_LETTER_KA: char = '𑍱';
pub const COMBINING_LETTER_NA: char = '𑍲';
pub const COMBINING_LETTER_VI: char = '𑍳';
pub const COMBINING_LETTER_PA: char = '𑍴';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Grantha {
SignCombiningAnusvaraAbove,
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicL,
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,
LetterSsa,
LetterSa,
LetterHa,
CombiningBinduBelow,
SignNukta,
SignAvagraha,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignEe,
VowelSignAi,
VowelSignOo,
VowelSignAu,
SignVirama,
Om,
AuLengthMark,
SignPluta,
LetterVedicAnusvara,
LetterVedicDoubleAnusvara,
LetterVocalicRr,
LetterVocalicLl,
VowelSignVocalicL,
VowelSignVocalicLl,
CombiningDigitZero,
CombiningDigitOne,
CombiningDigitTwo,
CombiningDigitThree,
CombiningDigitFour,
CombiningDigitFive,
CombiningDigitSix,
CombiningLetterA,
CombiningLetterKa,
CombiningLetterNa,
CombiningLetterVi,
CombiningLetterPa,
}
impl Into<char> for Grantha {
fn into(self) -> char {
use constants::*;
match self {
Grantha::SignCombiningAnusvaraAbove => SIGN_COMBINING_ANUSVARA_ABOVE,
Grantha::SignCandrabindu => SIGN_CANDRABINDU,
Grantha::SignAnusvara => SIGN_ANUSVARA,
Grantha::SignVisarga => SIGN_VISARGA,
Grantha::LetterA => LETTER_A,
Grantha::LetterAa => LETTER_AA,
Grantha::LetterI => LETTER_I,
Grantha::LetterIi => LETTER_II,
Grantha::LetterU => LETTER_U,
Grantha::LetterUu => LETTER_UU,
Grantha::LetterVocalicR => LETTER_VOCALIC_R,
Grantha::LetterVocalicL => LETTER_VOCALIC_L,
Grantha::LetterEe => LETTER_EE,
Grantha::LetterAi => LETTER_AI,
Grantha::LetterOo => LETTER_OO,
Grantha::LetterAu => LETTER_AU,
Grantha::LetterKa => LETTER_KA,
Grantha::LetterKha => LETTER_KHA,
Grantha::LetterGa => LETTER_GA,
Grantha::LetterGha => LETTER_GHA,
Grantha::LetterNga => LETTER_NGA,
Grantha::LetterCa => LETTER_CA,
Grantha::LetterCha => LETTER_CHA,
Grantha::LetterJa => LETTER_JA,
Grantha::LetterJha => LETTER_JHA,
Grantha::LetterNya => LETTER_NYA,
Grantha::LetterTta => LETTER_TTA,
Grantha::LetterTtha => LETTER_TTHA,
Grantha::LetterDda => LETTER_DDA,
Grantha::LetterDdha => LETTER_DDHA,
Grantha::LetterNna => LETTER_NNA,
Grantha::LetterTa => LETTER_TA,
Grantha::LetterTha => LETTER_THA,
Grantha::LetterDa => LETTER_DA,
Grantha::LetterDha => LETTER_DHA,
Grantha::LetterNa => LETTER_NA,
Grantha::LetterPa => LETTER_PA,
Grantha::LetterPha => LETTER_PHA,
Grantha::LetterBa => LETTER_BA,
Grantha::LetterBha => LETTER_BHA,
Grantha::LetterMa => LETTER_MA,
Grantha::LetterYa => LETTER_YA,
Grantha::LetterRa => LETTER_RA,
Grantha::LetterLa => LETTER_LA,
Grantha::LetterLla => LETTER_LLA,
Grantha::LetterVa => LETTER_VA,
Grantha::LetterSha => LETTER_SHA,
Grantha::LetterSsa => LETTER_SSA,
Grantha::LetterSa => LETTER_SA,
Grantha::LetterHa => LETTER_HA,
Grantha::CombiningBinduBelow => COMBINING_BINDU_BELOW,
Grantha::SignNukta => SIGN_NUKTA,
Grantha::SignAvagraha => SIGN_AVAGRAHA,
Grantha::VowelSignAa => VOWEL_SIGN_AA,
Grantha::VowelSignI => VOWEL_SIGN_I,
Grantha::VowelSignIi => VOWEL_SIGN_II,
Grantha::VowelSignU => VOWEL_SIGN_U,
Grantha::VowelSignUu => VOWEL_SIGN_UU,
Grantha::VowelSignVocalicR => VOWEL_SIGN_VOCALIC_R,
Grantha::VowelSignVocalicRr => VOWEL_SIGN_VOCALIC_RR,
Grantha::VowelSignEe => VOWEL_SIGN_EE,
Grantha::VowelSignAi => VOWEL_SIGN_AI,
Grantha::VowelSignOo => VOWEL_SIGN_OO,
Grantha::VowelSignAu => VOWEL_SIGN_AU,
Grantha::SignVirama => SIGN_VIRAMA,
Grantha::Om => OM,
Grantha::AuLengthMark => AU_LENGTH_MARK,
Grantha::SignPluta => SIGN_PLUTA,
Grantha::LetterVedicAnusvara => LETTER_VEDIC_ANUSVARA,
Grantha::LetterVedicDoubleAnusvara => LETTER_VEDIC_DOUBLE_ANUSVARA,
Grantha::LetterVocalicRr => LETTER_VOCALIC_RR,
Grantha::LetterVocalicLl => LETTER_VOCALIC_LL,
Grantha::VowelSignVocalicL => VOWEL_SIGN_VOCALIC_L,
Grantha::VowelSignVocalicLl => VOWEL_SIGN_VOCALIC_LL,
Grantha::CombiningDigitZero => COMBINING_DIGIT_ZERO,
Grantha::CombiningDigitOne => COMBINING_DIGIT_ONE,
Grantha::CombiningDigitTwo => COMBINING_DIGIT_TWO,
Grantha::CombiningDigitThree => COMBINING_DIGIT_THREE,
Grantha::CombiningDigitFour => COMBINING_DIGIT_FOUR,
Grantha::CombiningDigitFive => COMBINING_DIGIT_FIVE,
Grantha::CombiningDigitSix => COMBINING_DIGIT_SIX,
Grantha::CombiningLetterA => COMBINING_LETTER_A,
Grantha::CombiningLetterKa => COMBINING_LETTER_KA,
Grantha::CombiningLetterNa => COMBINING_LETTER_NA,
Grantha::CombiningLetterVi => COMBINING_LETTER_VI,
Grantha::CombiningLetterPa => COMBINING_LETTER_PA,
}
}
}
impl std::convert::TryFrom<char> for Grantha {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
SIGN_COMBINING_ANUSVARA_ABOVE => Ok(Grantha::SignCombiningAnusvaraAbove),
SIGN_CANDRABINDU => Ok(Grantha::SignCandrabindu),
SIGN_ANUSVARA => Ok(Grantha::SignAnusvara),
SIGN_VISARGA => Ok(Grantha::SignVisarga),
LETTER_A => Ok(Grantha::LetterA),
LETTER_AA => Ok(Grantha::LetterAa),
LETTER_I => Ok(Grantha::LetterI),
LETTER_II => Ok(Grantha::LetterIi),
LETTER_U => Ok(Grantha::LetterU),
LETTER_UU => Ok(Grantha::LetterUu),
LETTER_VOCALIC_R => Ok(Grantha::LetterVocalicR),
LETTER_VOCALIC_L => Ok(Grantha::LetterVocalicL),
LETTER_EE => Ok(Grantha::LetterEe),
LETTER_AI => Ok(Grantha::LetterAi),
LETTER_OO => Ok(Grantha::LetterOo),
LETTER_AU => Ok(Grantha::LetterAu),
LETTER_KA => Ok(Grantha::LetterKa),
LETTER_KHA => Ok(Grantha::LetterKha),
LETTER_GA => Ok(Grantha::LetterGa),
LETTER_GHA => Ok(Grantha::LetterGha),
LETTER_NGA => Ok(Grantha::LetterNga),
LETTER_CA => Ok(Grantha::LetterCa),
LETTER_CHA => Ok(Grantha::LetterCha),
LETTER_JA => Ok(Grantha::LetterJa),
LETTER_JHA => Ok(Grantha::LetterJha),
LETTER_NYA => Ok(Grantha::LetterNya),
LETTER_TTA => Ok(Grantha::LetterTta),
LETTER_TTHA => Ok(Grantha::LetterTtha),
LETTER_DDA => Ok(Grantha::LetterDda),
LETTER_DDHA => Ok(Grantha::LetterDdha),
LETTER_NNA => Ok(Grantha::LetterNna),
LETTER_TA => Ok(Grantha::LetterTa),
LETTER_THA => Ok(Grantha::LetterTha),
LETTER_DA => Ok(Grantha::LetterDa),
LETTER_DHA => Ok(Grantha::LetterDha),
LETTER_NA => Ok(Grantha::LetterNa),
LETTER_PA => Ok(Grantha::LetterPa),
LETTER_PHA => Ok(Grantha::LetterPha),
LETTER_BA => Ok(Grantha::LetterBa),
LETTER_BHA => Ok(Grantha::LetterBha),
LETTER_MA => Ok(Grantha::LetterMa),
LETTER_YA => Ok(Grantha::LetterYa),
LETTER_RA => Ok(Grantha::LetterRa),
LETTER_LA => Ok(Grantha::LetterLa),
LETTER_LLA => Ok(Grantha::LetterLla),
LETTER_VA => Ok(Grantha::LetterVa),
LETTER_SHA => Ok(Grantha::LetterSha),
LETTER_SSA => Ok(Grantha::LetterSsa),
LETTER_SA => Ok(Grantha::LetterSa),
LETTER_HA => Ok(Grantha::LetterHa),
COMBINING_BINDU_BELOW => Ok(Grantha::CombiningBinduBelow),
SIGN_NUKTA => Ok(Grantha::SignNukta),
SIGN_AVAGRAHA => Ok(Grantha::SignAvagraha),
VOWEL_SIGN_AA => Ok(Grantha::VowelSignAa),
VOWEL_SIGN_I => Ok(Grantha::VowelSignI),
VOWEL_SIGN_II => Ok(Grantha::VowelSignIi),
VOWEL_SIGN_U => Ok(Grantha::VowelSignU),
VOWEL_SIGN_UU => Ok(Grantha::VowelSignUu),
VOWEL_SIGN_VOCALIC_R => Ok(Grantha::VowelSignVocalicR),
VOWEL_SIGN_VOCALIC_RR => Ok(Grantha::VowelSignVocalicRr),
VOWEL_SIGN_EE => Ok(Grantha::VowelSignEe),
VOWEL_SIGN_AI => Ok(Grantha::VowelSignAi),
VOWEL_SIGN_OO => Ok(Grantha::VowelSignOo),
VOWEL_SIGN_AU => Ok(Grantha::VowelSignAu),
SIGN_VIRAMA => Ok(Grantha::SignVirama),
OM => Ok(Grantha::Om),
AU_LENGTH_MARK => Ok(Grantha::AuLengthMark),
SIGN_PLUTA => Ok(Grantha::SignPluta),
LETTER_VEDIC_ANUSVARA => Ok(Grantha::LetterVedicAnusvara),
LETTER_VEDIC_DOUBLE_ANUSVARA => Ok(Grantha::LetterVedicDoubleAnusvara),
LETTER_VOCALIC_RR => Ok(Grantha::LetterVocalicRr),
LETTER_VOCALIC_LL => Ok(Grantha::LetterVocalicLl),
VOWEL_SIGN_VOCALIC_L => Ok(Grantha::VowelSignVocalicL),
VOWEL_SIGN_VOCALIC_LL => Ok(Grantha::VowelSignVocalicLl),
COMBINING_DIGIT_ZERO => Ok(Grantha::CombiningDigitZero),
COMBINING_DIGIT_ONE => Ok(Grantha::CombiningDigitOne),
COMBINING_DIGIT_TWO => Ok(Grantha::CombiningDigitTwo),
COMBINING_DIGIT_THREE => Ok(Grantha::CombiningDigitThree),
COMBINING_DIGIT_FOUR => Ok(Grantha::CombiningDigitFour),
COMBINING_DIGIT_FIVE => Ok(Grantha::CombiningDigitFive),
COMBINING_DIGIT_SIX => Ok(Grantha::CombiningDigitSix),
COMBINING_LETTER_A => Ok(Grantha::CombiningLetterA),
COMBINING_LETTER_KA => Ok(Grantha::CombiningLetterKa),
COMBINING_LETTER_NA => Ok(Grantha::CombiningLetterNa),
COMBINING_LETTER_VI => Ok(Grantha::CombiningLetterVi),
COMBINING_LETTER_PA => Ok(Grantha::CombiningLetterPa),
_ => Err(()),
}
}
}
impl Into<u32> for Grantha {
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 Grantha {
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 Grantha {
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 Grantha {
pub fn new() -> Self {
Grantha::SignCombiningAnusvaraAbove
}
pub fn name(&self) -> &str {
match self {
Grantha::SignCombiningAnusvaraAbove => "grantha sign combining anusvara above",
Grantha::SignCandrabindu => "grantha sign candrabindu",
Grantha::SignAnusvara => "grantha sign anusvara",
Grantha::SignVisarga => "grantha sign visarga",
Grantha::LetterA => "grantha letter a",
Grantha::LetterAa => "grantha letter aa",
Grantha::LetterI => "grantha letter i",
Grantha::LetterIi => "grantha letter ii",
Grantha::LetterU => "grantha letter u",
Grantha::LetterUu => "grantha letter uu",
Grantha::LetterVocalicR => "grantha letter vocalic r",
Grantha::LetterVocalicL => "grantha letter vocalic l",
Grantha::LetterEe => "grantha letter ee",
Grantha::LetterAi => "grantha letter ai",
Grantha::LetterOo => "grantha letter oo",
Grantha::LetterAu => "grantha letter au",
Grantha::LetterKa => "grantha letter ka",
Grantha::LetterKha => "grantha letter kha",
Grantha::LetterGa => "grantha letter ga",
Grantha::LetterGha => "grantha letter gha",
Grantha::LetterNga => "grantha letter nga",
Grantha::LetterCa => "grantha letter ca",
Grantha::LetterCha => "grantha letter cha",
Grantha::LetterJa => "grantha letter ja",
Grantha::LetterJha => "grantha letter jha",
Grantha::LetterNya => "grantha letter nya",
Grantha::LetterTta => "grantha letter tta",
Grantha::LetterTtha => "grantha letter ttha",
Grantha::LetterDda => "grantha letter dda",
Grantha::LetterDdha => "grantha letter ddha",
Grantha::LetterNna => "grantha letter nna",
Grantha::LetterTa => "grantha letter ta",
Grantha::LetterTha => "grantha letter tha",
Grantha::LetterDa => "grantha letter da",
Grantha::LetterDha => "grantha letter dha",
Grantha::LetterNa => "grantha letter na",
Grantha::LetterPa => "grantha letter pa",
Grantha::LetterPha => "grantha letter pha",
Grantha::LetterBa => "grantha letter ba",
Grantha::LetterBha => "grantha letter bha",
Grantha::LetterMa => "grantha letter ma",
Grantha::LetterYa => "grantha letter ya",
Grantha::LetterRa => "grantha letter ra",
Grantha::LetterLa => "grantha letter la",
Grantha::LetterLla => "grantha letter lla",
Grantha::LetterVa => "grantha letter va",
Grantha::LetterSha => "grantha letter sha",
Grantha::LetterSsa => "grantha letter ssa",
Grantha::LetterSa => "grantha letter sa",
Grantha::LetterHa => "grantha letter ha",
Grantha::CombiningBinduBelow => "combining bindu below",
Grantha::SignNukta => "grantha sign nukta",
Grantha::SignAvagraha => "grantha sign avagraha",
Grantha::VowelSignAa => "grantha vowel sign aa",
Grantha::VowelSignI => "grantha vowel sign i",
Grantha::VowelSignIi => "grantha vowel sign ii",
Grantha::VowelSignU => "grantha vowel sign u",
Grantha::VowelSignUu => "grantha vowel sign uu",
Grantha::VowelSignVocalicR => "grantha vowel sign vocalic r",
Grantha::VowelSignVocalicRr => "grantha vowel sign vocalic rr",
Grantha::VowelSignEe => "grantha vowel sign ee",
Grantha::VowelSignAi => "grantha vowel sign ai",
Grantha::VowelSignOo => "grantha vowel sign oo",
Grantha::VowelSignAu => "grantha vowel sign au",
Grantha::SignVirama => "grantha sign virama",
Grantha::Om => "grantha om",
Grantha::AuLengthMark => "grantha au length mark",
Grantha::SignPluta => "grantha sign pluta",
Grantha::LetterVedicAnusvara => "grantha letter vedic anusvara",
Grantha::LetterVedicDoubleAnusvara => "grantha letter vedic double anusvara",
Grantha::LetterVocalicRr => "grantha letter vocalic rr",
Grantha::LetterVocalicLl => "grantha letter vocalic ll",
Grantha::VowelSignVocalicL => "grantha vowel sign vocalic l",
Grantha::VowelSignVocalicLl => "grantha vowel sign vocalic ll",
Grantha::CombiningDigitZero => "combining grantha digit zero",
Grantha::CombiningDigitOne => "combining grantha digit one",
Grantha::CombiningDigitTwo => "combining grantha digit two",
Grantha::CombiningDigitThree => "combining grantha digit three",
Grantha::CombiningDigitFour => "combining grantha digit four",
Grantha::CombiningDigitFive => "combining grantha digit five",
Grantha::CombiningDigitSix => "combining grantha digit six",
Grantha::CombiningLetterA => "combining grantha letter a",
Grantha::CombiningLetterKa => "combining grantha letter ka",
Grantha::CombiningLetterNa => "combining grantha letter na",
Grantha::CombiningLetterVi => "combining grantha letter vi",
Grantha::CombiningLetterPa => "combining grantha letter pa",
}
}
}