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_VOCALIC_R: char = '𑘆';
pub const LETTER_VOCALIC_RR: char = '𑘇';
pub const LETTER_VOCALIC_L: char = '𑘈';
pub const LETTER_VOCALIC_LL: 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_LLA: 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_VOCALIC_L: char = '𑘷';
pub const VOWEL_SIGN_VOCALIC_LL: 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_ARDHACANDRA: char = '𑙀';
pub const DANDA: char = '𑙁';
pub const DOUBLE_DANDA: char = '𑙂';
pub const ABBREVIATION_SIGN: char = '𑙃';
pub const SIGN_HUVA: char = '𑙄';
pub const DIGIT_ZERO: char = '𑙐';
pub const DIGIT_ONE: char = '𑙑';
pub const DIGIT_TWO: char = '𑙒';
pub const DIGIT_THREE: char = '𑙓';
pub const DIGIT_FOUR: char = '𑙔';
pub const DIGIT_FIVE: char = '𑙕';
pub const DIGIT_SIX: char = '𑙖';
pub const DIGIT_SEVEN: char = '𑙗';
pub const DIGIT_EIGHT: char = '𑙘';
pub const DIGIT_NINE: char = '𑙙';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Modi {
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicRr,
LetterVocalicL,
LetterVocalicLl,
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,
LetterLla,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignVocalicL,
VowelSignVocalicLl,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignAnusvara,
SignVisarga,
SignVirama,
SignArdhacandra,
Danda,
DoubleDanda,
AbbreviationSign,
SignHuva,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Modi {
fn into(self) -> char {
use constants::*;
match self {
Modi::LetterA => LETTER_A,
Modi::LetterAa => LETTER_AA,
Modi::LetterI => LETTER_I,
Modi::LetterIi => LETTER_II,
Modi::LetterU => LETTER_U,
Modi::LetterUu => LETTER_UU,
Modi::LetterVocalicR => LETTER_VOCALIC_R,
Modi::LetterVocalicRr => LETTER_VOCALIC_RR,
Modi::LetterVocalicL => LETTER_VOCALIC_L,
Modi::LetterVocalicLl => LETTER_VOCALIC_LL,
Modi::LetterE => LETTER_E,
Modi::LetterAi => LETTER_AI,
Modi::LetterO => LETTER_O,
Modi::LetterAu => LETTER_AU,
Modi::LetterKa => LETTER_KA,
Modi::LetterKha => LETTER_KHA,
Modi::LetterGa => LETTER_GA,
Modi::LetterGha => LETTER_GHA,
Modi::LetterNga => LETTER_NGA,
Modi::LetterCa => LETTER_CA,
Modi::LetterCha => LETTER_CHA,
Modi::LetterJa => LETTER_JA,
Modi::LetterJha => LETTER_JHA,
Modi::LetterNya => LETTER_NYA,
Modi::LetterTta => LETTER_TTA,
Modi::LetterTtha => LETTER_TTHA,
Modi::LetterDda => LETTER_DDA,
Modi::LetterDdha => LETTER_DDHA,
Modi::LetterNna => LETTER_NNA,
Modi::LetterTa => LETTER_TA,
Modi::LetterTha => LETTER_THA,
Modi::LetterDa => LETTER_DA,
Modi::LetterDha => LETTER_DHA,
Modi::LetterNa => LETTER_NA,
Modi::LetterPa => LETTER_PA,
Modi::LetterPha => LETTER_PHA,
Modi::LetterBa => LETTER_BA,
Modi::LetterBha => LETTER_BHA,
Modi::LetterMa => LETTER_MA,
Modi::LetterYa => LETTER_YA,
Modi::LetterRa => LETTER_RA,
Modi::LetterLa => LETTER_LA,
Modi::LetterVa => LETTER_VA,
Modi::LetterSha => LETTER_SHA,
Modi::LetterSsa => LETTER_SSA,
Modi::LetterSa => LETTER_SA,
Modi::LetterHa => LETTER_HA,
Modi::LetterLla => LETTER_LLA,
Modi::VowelSignAa => VOWEL_SIGN_AA,
Modi::VowelSignI => VOWEL_SIGN_I,
Modi::VowelSignIi => VOWEL_SIGN_II,
Modi::VowelSignU => VOWEL_SIGN_U,
Modi::VowelSignUu => VOWEL_SIGN_UU,
Modi::VowelSignVocalicR => VOWEL_SIGN_VOCALIC_R,
Modi::VowelSignVocalicRr => VOWEL_SIGN_VOCALIC_RR,
Modi::VowelSignVocalicL => VOWEL_SIGN_VOCALIC_L,
Modi::VowelSignVocalicLl => VOWEL_SIGN_VOCALIC_LL,
Modi::VowelSignE => VOWEL_SIGN_E,
Modi::VowelSignAi => VOWEL_SIGN_AI,
Modi::VowelSignO => VOWEL_SIGN_O,
Modi::VowelSignAu => VOWEL_SIGN_AU,
Modi::SignAnusvara => SIGN_ANUSVARA,
Modi::SignVisarga => SIGN_VISARGA,
Modi::SignVirama => SIGN_VIRAMA,
Modi::SignArdhacandra => SIGN_ARDHACANDRA,
Modi::Danda => DANDA,
Modi::DoubleDanda => DOUBLE_DANDA,
Modi::AbbreviationSign => ABBREVIATION_SIGN,
Modi::SignHuva => SIGN_HUVA,
Modi::DigitZero => DIGIT_ZERO,
Modi::DigitOne => DIGIT_ONE,
Modi::DigitTwo => DIGIT_TWO,
Modi::DigitThree => DIGIT_THREE,
Modi::DigitFour => DIGIT_FOUR,
Modi::DigitFive => DIGIT_FIVE,
Modi::DigitSix => DIGIT_SIX,
Modi::DigitSeven => DIGIT_SEVEN,
Modi::DigitEight => DIGIT_EIGHT,
Modi::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for Modi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Modi::LetterA),
LETTER_AA => Ok(Modi::LetterAa),
LETTER_I => Ok(Modi::LetterI),
LETTER_II => Ok(Modi::LetterIi),
LETTER_U => Ok(Modi::LetterU),
LETTER_UU => Ok(Modi::LetterUu),
LETTER_VOCALIC_R => Ok(Modi::LetterVocalicR),
LETTER_VOCALIC_RR => Ok(Modi::LetterVocalicRr),
LETTER_VOCALIC_L => Ok(Modi::LetterVocalicL),
LETTER_VOCALIC_LL => Ok(Modi::LetterVocalicLl),
LETTER_E => Ok(Modi::LetterE),
LETTER_AI => Ok(Modi::LetterAi),
LETTER_O => Ok(Modi::LetterO),
LETTER_AU => Ok(Modi::LetterAu),
LETTER_KA => Ok(Modi::LetterKa),
LETTER_KHA => Ok(Modi::LetterKha),
LETTER_GA => Ok(Modi::LetterGa),
LETTER_GHA => Ok(Modi::LetterGha),
LETTER_NGA => Ok(Modi::LetterNga),
LETTER_CA => Ok(Modi::LetterCa),
LETTER_CHA => Ok(Modi::LetterCha),
LETTER_JA => Ok(Modi::LetterJa),
LETTER_JHA => Ok(Modi::LetterJha),
LETTER_NYA => Ok(Modi::LetterNya),
LETTER_TTA => Ok(Modi::LetterTta),
LETTER_TTHA => Ok(Modi::LetterTtha),
LETTER_DDA => Ok(Modi::LetterDda),
LETTER_DDHA => Ok(Modi::LetterDdha),
LETTER_NNA => Ok(Modi::LetterNna),
LETTER_TA => Ok(Modi::LetterTa),
LETTER_THA => Ok(Modi::LetterTha),
LETTER_DA => Ok(Modi::LetterDa),
LETTER_DHA => Ok(Modi::LetterDha),
LETTER_NA => Ok(Modi::LetterNa),
LETTER_PA => Ok(Modi::LetterPa),
LETTER_PHA => Ok(Modi::LetterPha),
LETTER_BA => Ok(Modi::LetterBa),
LETTER_BHA => Ok(Modi::LetterBha),
LETTER_MA => Ok(Modi::LetterMa),
LETTER_YA => Ok(Modi::LetterYa),
LETTER_RA => Ok(Modi::LetterRa),
LETTER_LA => Ok(Modi::LetterLa),
LETTER_VA => Ok(Modi::LetterVa),
LETTER_SHA => Ok(Modi::LetterSha),
LETTER_SSA => Ok(Modi::LetterSsa),
LETTER_SA => Ok(Modi::LetterSa),
LETTER_HA => Ok(Modi::LetterHa),
LETTER_LLA => Ok(Modi::LetterLla),
VOWEL_SIGN_AA => Ok(Modi::VowelSignAa),
VOWEL_SIGN_I => Ok(Modi::VowelSignI),
VOWEL_SIGN_II => Ok(Modi::VowelSignIi),
VOWEL_SIGN_U => Ok(Modi::VowelSignU),
VOWEL_SIGN_UU => Ok(Modi::VowelSignUu),
VOWEL_SIGN_VOCALIC_R => Ok(Modi::VowelSignVocalicR),
VOWEL_SIGN_VOCALIC_RR => Ok(Modi::VowelSignVocalicRr),
VOWEL_SIGN_VOCALIC_L => Ok(Modi::VowelSignVocalicL),
VOWEL_SIGN_VOCALIC_LL => Ok(Modi::VowelSignVocalicLl),
VOWEL_SIGN_E => Ok(Modi::VowelSignE),
VOWEL_SIGN_AI => Ok(Modi::VowelSignAi),
VOWEL_SIGN_O => Ok(Modi::VowelSignO),
VOWEL_SIGN_AU => Ok(Modi::VowelSignAu),
SIGN_ANUSVARA => Ok(Modi::SignAnusvara),
SIGN_VISARGA => Ok(Modi::SignVisarga),
SIGN_VIRAMA => Ok(Modi::SignVirama),
SIGN_ARDHACANDRA => Ok(Modi::SignArdhacandra),
DANDA => Ok(Modi::Danda),
DOUBLE_DANDA => Ok(Modi::DoubleDanda),
ABBREVIATION_SIGN => Ok(Modi::AbbreviationSign),
SIGN_HUVA => Ok(Modi::SignHuva),
DIGIT_ZERO => Ok(Modi::DigitZero),
DIGIT_ONE => Ok(Modi::DigitOne),
DIGIT_TWO => Ok(Modi::DigitTwo),
DIGIT_THREE => Ok(Modi::DigitThree),
DIGIT_FOUR => Ok(Modi::DigitFour),
DIGIT_FIVE => Ok(Modi::DigitFive),
DIGIT_SIX => Ok(Modi::DigitSix),
DIGIT_SEVEN => Ok(Modi::DigitSeven),
DIGIT_EIGHT => Ok(Modi::DigitEight),
DIGIT_NINE => Ok(Modi::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Modi {
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 Modi {
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 Modi {
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 Modi {
pub fn new() -> Self {
Modi::LetterA
}
pub fn name(&self) -> &str {
match self {
Modi::LetterA => "modi letter a",
Modi::LetterAa => "modi letter aa",
Modi::LetterI => "modi letter i",
Modi::LetterIi => "modi letter ii",
Modi::LetterU => "modi letter u",
Modi::LetterUu => "modi letter uu",
Modi::LetterVocalicR => "modi letter vocalic r",
Modi::LetterVocalicRr => "modi letter vocalic rr",
Modi::LetterVocalicL => "modi letter vocalic l",
Modi::LetterVocalicLl => "modi letter vocalic ll",
Modi::LetterE => "modi letter e",
Modi::LetterAi => "modi letter ai",
Modi::LetterO => "modi letter o",
Modi::LetterAu => "modi letter au",
Modi::LetterKa => "modi letter ka",
Modi::LetterKha => "modi letter kha",
Modi::LetterGa => "modi letter ga",
Modi::LetterGha => "modi letter gha",
Modi::LetterNga => "modi letter nga",
Modi::LetterCa => "modi letter ca",
Modi::LetterCha => "modi letter cha",
Modi::LetterJa => "modi letter ja",
Modi::LetterJha => "modi letter jha",
Modi::LetterNya => "modi letter nya",
Modi::LetterTta => "modi letter tta",
Modi::LetterTtha => "modi letter ttha",
Modi::LetterDda => "modi letter dda",
Modi::LetterDdha => "modi letter ddha",
Modi::LetterNna => "modi letter nna",
Modi::LetterTa => "modi letter ta",
Modi::LetterTha => "modi letter tha",
Modi::LetterDa => "modi letter da",
Modi::LetterDha => "modi letter dha",
Modi::LetterNa => "modi letter na",
Modi::LetterPa => "modi letter pa",
Modi::LetterPha => "modi letter pha",
Modi::LetterBa => "modi letter ba",
Modi::LetterBha => "modi letter bha",
Modi::LetterMa => "modi letter ma",
Modi::LetterYa => "modi letter ya",
Modi::LetterRa => "modi letter ra",
Modi::LetterLa => "modi letter la",
Modi::LetterVa => "modi letter va",
Modi::LetterSha => "modi letter sha",
Modi::LetterSsa => "modi letter ssa",
Modi::LetterSa => "modi letter sa",
Modi::LetterHa => "modi letter ha",
Modi::LetterLla => "modi letter lla",
Modi::VowelSignAa => "modi vowel sign aa",
Modi::VowelSignI => "modi vowel sign i",
Modi::VowelSignIi => "modi vowel sign ii",
Modi::VowelSignU => "modi vowel sign u",
Modi::VowelSignUu => "modi vowel sign uu",
Modi::VowelSignVocalicR => "modi vowel sign vocalic r",
Modi::VowelSignVocalicRr => "modi vowel sign vocalic rr",
Modi::VowelSignVocalicL => "modi vowel sign vocalic l",
Modi::VowelSignVocalicLl => "modi vowel sign vocalic ll",
Modi::VowelSignE => "modi vowel sign e",
Modi::VowelSignAi => "modi vowel sign ai",
Modi::VowelSignO => "modi vowel sign o",
Modi::VowelSignAu => "modi vowel sign au",
Modi::SignAnusvara => "modi sign anusvara",
Modi::SignVisarga => "modi sign visarga",
Modi::SignVirama => "modi sign virama",
Modi::SignArdhacandra => "modi sign ardhacandra",
Modi::Danda => "modi danda",
Modi::DoubleDanda => "modi double danda",
Modi::AbbreviationSign => "modi abbreviation sign",
Modi::SignHuva => "modi sign huva",
Modi::DigitZero => "modi digit zero",
Modi::DigitOne => "modi digit one",
Modi::DigitTwo => "modi digit two",
Modi::DigitThree => "modi digit three",
Modi::DigitFour => "modi digit four",
Modi::DigitFive => "modi digit five",
Modi::DigitSix => "modi digit six",
Modi::DigitSeven => "modi digit seven",
Modi::DigitEight => "modi digit eight",
Modi::DigitNine => "modi digit nine",
}
}
}