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_SA: char = '𑚨';
pub const LETTER_HA: char = '𑚩';
pub const LETTER_RRA: char = '𑚪';
pub const SIGN_ANUSVARA: char = '𑚫';
pub const SIGN_VISARGA: 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_E: char = '𑚲';
pub const VOWEL_SIGN_AI: char = '𑚳';
pub const VOWEL_SIGN_O: char = '𑚴';
pub const VOWEL_SIGN_AU: char = '𑚵';
pub const SIGN_VIRAMA: char = '𑚶';
pub const SIGN_NUKTA: char = '𑚷';
pub const LETTER_ARCHAIC_KHA: 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 Takri {
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,
LetterSa,
LetterHa,
LetterRra,
SignAnusvara,
SignVisarga,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignVirama,
SignNukta,
LetterArchaicKha,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Takri {
fn into(self) -> char {
use constants::*;
match self {
Takri::LetterA => LETTER_A,
Takri::LetterAa => LETTER_AA,
Takri::LetterI => LETTER_I,
Takri::LetterIi => LETTER_II,
Takri::LetterU => LETTER_U,
Takri::LetterUu => LETTER_UU,
Takri::LetterE => LETTER_E,
Takri::LetterAi => LETTER_AI,
Takri::LetterO => LETTER_O,
Takri::LetterAu => LETTER_AU,
Takri::LetterKa => LETTER_KA,
Takri::LetterKha => LETTER_KHA,
Takri::LetterGa => LETTER_GA,
Takri::LetterGha => LETTER_GHA,
Takri::LetterNga => LETTER_NGA,
Takri::LetterCa => LETTER_CA,
Takri::LetterCha => LETTER_CHA,
Takri::LetterJa => LETTER_JA,
Takri::LetterJha => LETTER_JHA,
Takri::LetterNya => LETTER_NYA,
Takri::LetterTta => LETTER_TTA,
Takri::LetterTtha => LETTER_TTHA,
Takri::LetterDda => LETTER_DDA,
Takri::LetterDdha => LETTER_DDHA,
Takri::LetterNna => LETTER_NNA,
Takri::LetterTa => LETTER_TA,
Takri::LetterTha => LETTER_THA,
Takri::LetterDa => LETTER_DA,
Takri::LetterDha => LETTER_DHA,
Takri::LetterNa => LETTER_NA,
Takri::LetterPa => LETTER_PA,
Takri::LetterPha => LETTER_PHA,
Takri::LetterBa => LETTER_BA,
Takri::LetterBha => LETTER_BHA,
Takri::LetterMa => LETTER_MA,
Takri::LetterYa => LETTER_YA,
Takri::LetterRa => LETTER_RA,
Takri::LetterLa => LETTER_LA,
Takri::LetterVa => LETTER_VA,
Takri::LetterSha => LETTER_SHA,
Takri::LetterSa => LETTER_SA,
Takri::LetterHa => LETTER_HA,
Takri::LetterRra => LETTER_RRA,
Takri::SignAnusvara => SIGN_ANUSVARA,
Takri::SignVisarga => SIGN_VISARGA,
Takri::VowelSignAa => VOWEL_SIGN_AA,
Takri::VowelSignI => VOWEL_SIGN_I,
Takri::VowelSignIi => VOWEL_SIGN_II,
Takri::VowelSignU => VOWEL_SIGN_U,
Takri::VowelSignUu => VOWEL_SIGN_UU,
Takri::VowelSignE => VOWEL_SIGN_E,
Takri::VowelSignAi => VOWEL_SIGN_AI,
Takri::VowelSignO => VOWEL_SIGN_O,
Takri::VowelSignAu => VOWEL_SIGN_AU,
Takri::SignVirama => SIGN_VIRAMA,
Takri::SignNukta => SIGN_NUKTA,
Takri::LetterArchaicKha => LETTER_ARCHAIC_KHA,
Takri::DigitZero => DIGIT_ZERO,
Takri::DigitOne => DIGIT_ONE,
Takri::DigitTwo => DIGIT_TWO,
Takri::DigitThree => DIGIT_THREE,
Takri::DigitFour => DIGIT_FOUR,
Takri::DigitFive => DIGIT_FIVE,
Takri::DigitSix => DIGIT_SIX,
Takri::DigitSeven => DIGIT_SEVEN,
Takri::DigitEight => DIGIT_EIGHT,
Takri::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for Takri {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Takri::LetterA),
LETTER_AA => Ok(Takri::LetterAa),
LETTER_I => Ok(Takri::LetterI),
LETTER_II => Ok(Takri::LetterIi),
LETTER_U => Ok(Takri::LetterU),
LETTER_UU => Ok(Takri::LetterUu),
LETTER_E => Ok(Takri::LetterE),
LETTER_AI => Ok(Takri::LetterAi),
LETTER_O => Ok(Takri::LetterO),
LETTER_AU => Ok(Takri::LetterAu),
LETTER_KA => Ok(Takri::LetterKa),
LETTER_KHA => Ok(Takri::LetterKha),
LETTER_GA => Ok(Takri::LetterGa),
LETTER_GHA => Ok(Takri::LetterGha),
LETTER_NGA => Ok(Takri::LetterNga),
LETTER_CA => Ok(Takri::LetterCa),
LETTER_CHA => Ok(Takri::LetterCha),
LETTER_JA => Ok(Takri::LetterJa),
LETTER_JHA => Ok(Takri::LetterJha),
LETTER_NYA => Ok(Takri::LetterNya),
LETTER_TTA => Ok(Takri::LetterTta),
LETTER_TTHA => Ok(Takri::LetterTtha),
LETTER_DDA => Ok(Takri::LetterDda),
LETTER_DDHA => Ok(Takri::LetterDdha),
LETTER_NNA => Ok(Takri::LetterNna),
LETTER_TA => Ok(Takri::LetterTa),
LETTER_THA => Ok(Takri::LetterTha),
LETTER_DA => Ok(Takri::LetterDa),
LETTER_DHA => Ok(Takri::LetterDha),
LETTER_NA => Ok(Takri::LetterNa),
LETTER_PA => Ok(Takri::LetterPa),
LETTER_PHA => Ok(Takri::LetterPha),
LETTER_BA => Ok(Takri::LetterBa),
LETTER_BHA => Ok(Takri::LetterBha),
LETTER_MA => Ok(Takri::LetterMa),
LETTER_YA => Ok(Takri::LetterYa),
LETTER_RA => Ok(Takri::LetterRa),
LETTER_LA => Ok(Takri::LetterLa),
LETTER_VA => Ok(Takri::LetterVa),
LETTER_SHA => Ok(Takri::LetterSha),
LETTER_SA => Ok(Takri::LetterSa),
LETTER_HA => Ok(Takri::LetterHa),
LETTER_RRA => Ok(Takri::LetterRra),
SIGN_ANUSVARA => Ok(Takri::SignAnusvara),
SIGN_VISARGA => Ok(Takri::SignVisarga),
VOWEL_SIGN_AA => Ok(Takri::VowelSignAa),
VOWEL_SIGN_I => Ok(Takri::VowelSignI),
VOWEL_SIGN_II => Ok(Takri::VowelSignIi),
VOWEL_SIGN_U => Ok(Takri::VowelSignU),
VOWEL_SIGN_UU => Ok(Takri::VowelSignUu),
VOWEL_SIGN_E => Ok(Takri::VowelSignE),
VOWEL_SIGN_AI => Ok(Takri::VowelSignAi),
VOWEL_SIGN_O => Ok(Takri::VowelSignO),
VOWEL_SIGN_AU => Ok(Takri::VowelSignAu),
SIGN_VIRAMA => Ok(Takri::SignVirama),
SIGN_NUKTA => Ok(Takri::SignNukta),
LETTER_ARCHAIC_KHA => Ok(Takri::LetterArchaicKha),
DIGIT_ZERO => Ok(Takri::DigitZero),
DIGIT_ONE => Ok(Takri::DigitOne),
DIGIT_TWO => Ok(Takri::DigitTwo),
DIGIT_THREE => Ok(Takri::DigitThree),
DIGIT_FOUR => Ok(Takri::DigitFour),
DIGIT_FIVE => Ok(Takri::DigitFive),
DIGIT_SIX => Ok(Takri::DigitSix),
DIGIT_SEVEN => Ok(Takri::DigitSeven),
DIGIT_EIGHT => Ok(Takri::DigitEight),
DIGIT_NINE => Ok(Takri::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Takri {
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 Takri {
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 Takri {
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 Takri {
pub fn new() -> Self {
Takri::LetterA
}
pub fn name(&self) -> &str {
match self {
Takri::LetterA => "takri letter a",
Takri::LetterAa => "takri letter aa",
Takri::LetterI => "takri letter i",
Takri::LetterIi => "takri letter ii",
Takri::LetterU => "takri letter u",
Takri::LetterUu => "takri letter uu",
Takri::LetterE => "takri letter e",
Takri::LetterAi => "takri letter ai",
Takri::LetterO => "takri letter o",
Takri::LetterAu => "takri letter au",
Takri::LetterKa => "takri letter ka",
Takri::LetterKha => "takri letter kha",
Takri::LetterGa => "takri letter ga",
Takri::LetterGha => "takri letter gha",
Takri::LetterNga => "takri letter nga",
Takri::LetterCa => "takri letter ca",
Takri::LetterCha => "takri letter cha",
Takri::LetterJa => "takri letter ja",
Takri::LetterJha => "takri letter jha",
Takri::LetterNya => "takri letter nya",
Takri::LetterTta => "takri letter tta",
Takri::LetterTtha => "takri letter ttha",
Takri::LetterDda => "takri letter dda",
Takri::LetterDdha => "takri letter ddha",
Takri::LetterNna => "takri letter nna",
Takri::LetterTa => "takri letter ta",
Takri::LetterTha => "takri letter tha",
Takri::LetterDa => "takri letter da",
Takri::LetterDha => "takri letter dha",
Takri::LetterNa => "takri letter na",
Takri::LetterPa => "takri letter pa",
Takri::LetterPha => "takri letter pha",
Takri::LetterBa => "takri letter ba",
Takri::LetterBha => "takri letter bha",
Takri::LetterMa => "takri letter ma",
Takri::LetterYa => "takri letter ya",
Takri::LetterRa => "takri letter ra",
Takri::LetterLa => "takri letter la",
Takri::LetterVa => "takri letter va",
Takri::LetterSha => "takri letter sha",
Takri::LetterSa => "takri letter sa",
Takri::LetterHa => "takri letter ha",
Takri::LetterRra => "takri letter rra",
Takri::SignAnusvara => "takri sign anusvara",
Takri::SignVisarga => "takri sign visarga",
Takri::VowelSignAa => "takri vowel sign aa",
Takri::VowelSignI => "takri vowel sign i",
Takri::VowelSignIi => "takri vowel sign ii",
Takri::VowelSignU => "takri vowel sign u",
Takri::VowelSignUu => "takri vowel sign uu",
Takri::VowelSignE => "takri vowel sign e",
Takri::VowelSignAi => "takri vowel sign ai",
Takri::VowelSignO => "takri vowel sign o",
Takri::VowelSignAu => "takri vowel sign au",
Takri::SignVirama => "takri sign virama",
Takri::SignNukta => "takri sign nukta",
Takri::LetterArchaicKha => "takri letter archaic kha",
Takri::DigitZero => "takri digit zero",
Takri::DigitOne => "takri digit one",
Takri::DigitTwo => "takri digit two",
Takri::DigitThree => "takri digit three",
Takri::DigitFour => "takri digit four",
Takri::DigitFive => "takri digit five",
Takri::DigitSix => "takri digit six",
Takri::DigitSeven => "takri digit seven",
Takri::DigitEight => "takri digit eight",
Takri::DigitNine => "takri digit nine",
}
}
}