mod constants {
pub const SIGN_ADAK_BINDI: char = 'ਁ';
pub const SIGN_BINDI: 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_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_SA: char = 'ਸ';
pub const LETTER_HA: char = 'ਹ';
pub const SIGN_NUKTA: 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_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 SIGN_UDAAT: char = 'ੑ';
pub const LETTER_KHHA: char = 'ਖ਼';
pub const LETTER_GHHA: char = 'ਗ਼';
pub const LETTER_ZA: char = 'ਜ਼';
pub const LETTER_RRA: char = 'ੜ';
pub const LETTER_FA: 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 = '੯';
pub const TIPPI: char = 'ੰ';
pub const ADDAK: char = 'ੱ';
pub const IRI: char = 'ੲ';
pub const URA: char = 'ੳ';
pub const EK_ONKAR: char = 'ੴ';
pub const SIGN_YAKASH: char = 'ੵ';
pub const ABBREVIATION_SIGN: char = '੶';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Gurmukhi {
SignAdakBindi,
SignBindi,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
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,
LetterSa,
LetterHa,
SignNukta,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignEe,
VowelSignAi,
VowelSignOo,
VowelSignAu,
SignVirama,
SignUdaat,
LetterKhha,
LetterGhha,
LetterZa,
LetterRra,
LetterFa,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
Tippi,
Addak,
Iri,
Ura,
EkOnkar,
SignYakash,
AbbreviationSign,
}
impl Into<char> for Gurmukhi {
fn into(self) -> char {
use constants::*;
match self {
Gurmukhi::SignAdakBindi => SIGN_ADAK_BINDI,
Gurmukhi::SignBindi => SIGN_BINDI,
Gurmukhi::SignVisarga => SIGN_VISARGA,
Gurmukhi::LetterA => LETTER_A,
Gurmukhi::LetterAa => LETTER_AA,
Gurmukhi::LetterI => LETTER_I,
Gurmukhi::LetterIi => LETTER_II,
Gurmukhi::LetterU => LETTER_U,
Gurmukhi::LetterUu => LETTER_UU,
Gurmukhi::LetterEe => LETTER_EE,
Gurmukhi::LetterAi => LETTER_AI,
Gurmukhi::LetterOo => LETTER_OO,
Gurmukhi::LetterAu => LETTER_AU,
Gurmukhi::LetterKa => LETTER_KA,
Gurmukhi::LetterKha => LETTER_KHA,
Gurmukhi::LetterGa => LETTER_GA,
Gurmukhi::LetterGha => LETTER_GHA,
Gurmukhi::LetterNga => LETTER_NGA,
Gurmukhi::LetterCa => LETTER_CA,
Gurmukhi::LetterCha => LETTER_CHA,
Gurmukhi::LetterJa => LETTER_JA,
Gurmukhi::LetterJha => LETTER_JHA,
Gurmukhi::LetterNya => LETTER_NYA,
Gurmukhi::LetterTta => LETTER_TTA,
Gurmukhi::LetterTtha => LETTER_TTHA,
Gurmukhi::LetterDda => LETTER_DDA,
Gurmukhi::LetterDdha => LETTER_DDHA,
Gurmukhi::LetterNna => LETTER_NNA,
Gurmukhi::LetterTa => LETTER_TA,
Gurmukhi::LetterTha => LETTER_THA,
Gurmukhi::LetterDa => LETTER_DA,
Gurmukhi::LetterDha => LETTER_DHA,
Gurmukhi::LetterNa => LETTER_NA,
Gurmukhi::LetterPa => LETTER_PA,
Gurmukhi::LetterPha => LETTER_PHA,
Gurmukhi::LetterBa => LETTER_BA,
Gurmukhi::LetterBha => LETTER_BHA,
Gurmukhi::LetterMa => LETTER_MA,
Gurmukhi::LetterYa => LETTER_YA,
Gurmukhi::LetterRa => LETTER_RA,
Gurmukhi::LetterLa => LETTER_LA,
Gurmukhi::LetterLla => LETTER_LLA,
Gurmukhi::LetterVa => LETTER_VA,
Gurmukhi::LetterSha => LETTER_SHA,
Gurmukhi::LetterSa => LETTER_SA,
Gurmukhi::LetterHa => LETTER_HA,
Gurmukhi::SignNukta => SIGN_NUKTA,
Gurmukhi::VowelSignAa => VOWEL_SIGN_AA,
Gurmukhi::VowelSignI => VOWEL_SIGN_I,
Gurmukhi::VowelSignIi => VOWEL_SIGN_II,
Gurmukhi::VowelSignU => VOWEL_SIGN_U,
Gurmukhi::VowelSignUu => VOWEL_SIGN_UU,
Gurmukhi::VowelSignEe => VOWEL_SIGN_EE,
Gurmukhi::VowelSignAi => VOWEL_SIGN_AI,
Gurmukhi::VowelSignOo => VOWEL_SIGN_OO,
Gurmukhi::VowelSignAu => VOWEL_SIGN_AU,
Gurmukhi::SignVirama => SIGN_VIRAMA,
Gurmukhi::SignUdaat => SIGN_UDAAT,
Gurmukhi::LetterKhha => LETTER_KHHA,
Gurmukhi::LetterGhha => LETTER_GHHA,
Gurmukhi::LetterZa => LETTER_ZA,
Gurmukhi::LetterRra => LETTER_RRA,
Gurmukhi::LetterFa => LETTER_FA,
Gurmukhi::DigitZero => DIGIT_ZERO,
Gurmukhi::DigitOne => DIGIT_ONE,
Gurmukhi::DigitTwo => DIGIT_TWO,
Gurmukhi::DigitThree => DIGIT_THREE,
Gurmukhi::DigitFour => DIGIT_FOUR,
Gurmukhi::DigitFive => DIGIT_FIVE,
Gurmukhi::DigitSix => DIGIT_SIX,
Gurmukhi::DigitSeven => DIGIT_SEVEN,
Gurmukhi::DigitEight => DIGIT_EIGHT,
Gurmukhi::DigitNine => DIGIT_NINE,
Gurmukhi::Tippi => TIPPI,
Gurmukhi::Addak => ADDAK,
Gurmukhi::Iri => IRI,
Gurmukhi::Ura => URA,
Gurmukhi::EkOnkar => EK_ONKAR,
Gurmukhi::SignYakash => SIGN_YAKASH,
Gurmukhi::AbbreviationSign => ABBREVIATION_SIGN,
}
}
}
impl std::convert::TryFrom<char> for Gurmukhi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
SIGN_ADAK_BINDI => Ok(Gurmukhi::SignAdakBindi),
SIGN_BINDI => Ok(Gurmukhi::SignBindi),
SIGN_VISARGA => Ok(Gurmukhi::SignVisarga),
LETTER_A => Ok(Gurmukhi::LetterA),
LETTER_AA => Ok(Gurmukhi::LetterAa),
LETTER_I => Ok(Gurmukhi::LetterI),
LETTER_II => Ok(Gurmukhi::LetterIi),
LETTER_U => Ok(Gurmukhi::LetterU),
LETTER_UU => Ok(Gurmukhi::LetterUu),
LETTER_EE => Ok(Gurmukhi::LetterEe),
LETTER_AI => Ok(Gurmukhi::LetterAi),
LETTER_OO => Ok(Gurmukhi::LetterOo),
LETTER_AU => Ok(Gurmukhi::LetterAu),
LETTER_KA => Ok(Gurmukhi::LetterKa),
LETTER_KHA => Ok(Gurmukhi::LetterKha),
LETTER_GA => Ok(Gurmukhi::LetterGa),
LETTER_GHA => Ok(Gurmukhi::LetterGha),
LETTER_NGA => Ok(Gurmukhi::LetterNga),
LETTER_CA => Ok(Gurmukhi::LetterCa),
LETTER_CHA => Ok(Gurmukhi::LetterCha),
LETTER_JA => Ok(Gurmukhi::LetterJa),
LETTER_JHA => Ok(Gurmukhi::LetterJha),
LETTER_NYA => Ok(Gurmukhi::LetterNya),
LETTER_TTA => Ok(Gurmukhi::LetterTta),
LETTER_TTHA => Ok(Gurmukhi::LetterTtha),
LETTER_DDA => Ok(Gurmukhi::LetterDda),
LETTER_DDHA => Ok(Gurmukhi::LetterDdha),
LETTER_NNA => Ok(Gurmukhi::LetterNna),
LETTER_TA => Ok(Gurmukhi::LetterTa),
LETTER_THA => Ok(Gurmukhi::LetterTha),
LETTER_DA => Ok(Gurmukhi::LetterDa),
LETTER_DHA => Ok(Gurmukhi::LetterDha),
LETTER_NA => Ok(Gurmukhi::LetterNa),
LETTER_PA => Ok(Gurmukhi::LetterPa),
LETTER_PHA => Ok(Gurmukhi::LetterPha),
LETTER_BA => Ok(Gurmukhi::LetterBa),
LETTER_BHA => Ok(Gurmukhi::LetterBha),
LETTER_MA => Ok(Gurmukhi::LetterMa),
LETTER_YA => Ok(Gurmukhi::LetterYa),
LETTER_RA => Ok(Gurmukhi::LetterRa),
LETTER_LA => Ok(Gurmukhi::LetterLa),
LETTER_LLA => Ok(Gurmukhi::LetterLla),
LETTER_VA => Ok(Gurmukhi::LetterVa),
LETTER_SHA => Ok(Gurmukhi::LetterSha),
LETTER_SA => Ok(Gurmukhi::LetterSa),
LETTER_HA => Ok(Gurmukhi::LetterHa),
SIGN_NUKTA => Ok(Gurmukhi::SignNukta),
VOWEL_SIGN_AA => Ok(Gurmukhi::VowelSignAa),
VOWEL_SIGN_I => Ok(Gurmukhi::VowelSignI),
VOWEL_SIGN_II => Ok(Gurmukhi::VowelSignIi),
VOWEL_SIGN_U => Ok(Gurmukhi::VowelSignU),
VOWEL_SIGN_UU => Ok(Gurmukhi::VowelSignUu),
VOWEL_SIGN_EE => Ok(Gurmukhi::VowelSignEe),
VOWEL_SIGN_AI => Ok(Gurmukhi::VowelSignAi),
VOWEL_SIGN_OO => Ok(Gurmukhi::VowelSignOo),
VOWEL_SIGN_AU => Ok(Gurmukhi::VowelSignAu),
SIGN_VIRAMA => Ok(Gurmukhi::SignVirama),
SIGN_UDAAT => Ok(Gurmukhi::SignUdaat),
LETTER_KHHA => Ok(Gurmukhi::LetterKhha),
LETTER_GHHA => Ok(Gurmukhi::LetterGhha),
LETTER_ZA => Ok(Gurmukhi::LetterZa),
LETTER_RRA => Ok(Gurmukhi::LetterRra),
LETTER_FA => Ok(Gurmukhi::LetterFa),
DIGIT_ZERO => Ok(Gurmukhi::DigitZero),
DIGIT_ONE => Ok(Gurmukhi::DigitOne),
DIGIT_TWO => Ok(Gurmukhi::DigitTwo),
DIGIT_THREE => Ok(Gurmukhi::DigitThree),
DIGIT_FOUR => Ok(Gurmukhi::DigitFour),
DIGIT_FIVE => Ok(Gurmukhi::DigitFive),
DIGIT_SIX => Ok(Gurmukhi::DigitSix),
DIGIT_SEVEN => Ok(Gurmukhi::DigitSeven),
DIGIT_EIGHT => Ok(Gurmukhi::DigitEight),
DIGIT_NINE => Ok(Gurmukhi::DigitNine),
TIPPI => Ok(Gurmukhi::Tippi),
ADDAK => Ok(Gurmukhi::Addak),
IRI => Ok(Gurmukhi::Iri),
URA => Ok(Gurmukhi::Ura),
EK_ONKAR => Ok(Gurmukhi::EkOnkar),
SIGN_YAKASH => Ok(Gurmukhi::SignYakash),
ABBREVIATION_SIGN => Ok(Gurmukhi::AbbreviationSign),
_ => Err(()),
}
}
}
impl Into<u32> for Gurmukhi {
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 Gurmukhi {
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 Gurmukhi {
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 Gurmukhi {
pub fn new() -> Self {
Gurmukhi::SignAdakBindi
}
pub fn name(&self) -> &str {
match self {
Gurmukhi::SignAdakBindi => "gurmukhi sign adak bindi",
Gurmukhi::SignBindi => "gurmukhi sign bindi",
Gurmukhi::SignVisarga => "gurmukhi sign visarga",
Gurmukhi::LetterA => "gurmukhi letter a",
Gurmukhi::LetterAa => "gurmukhi letter aa",
Gurmukhi::LetterI => "gurmukhi letter i",
Gurmukhi::LetterIi => "gurmukhi letter ii",
Gurmukhi::LetterU => "gurmukhi letter u",
Gurmukhi::LetterUu => "gurmukhi letter uu",
Gurmukhi::LetterEe => "gurmukhi letter ee",
Gurmukhi::LetterAi => "gurmukhi letter ai",
Gurmukhi::LetterOo => "gurmukhi letter oo",
Gurmukhi::LetterAu => "gurmukhi letter au",
Gurmukhi::LetterKa => "gurmukhi letter ka",
Gurmukhi::LetterKha => "gurmukhi letter kha",
Gurmukhi::LetterGa => "gurmukhi letter ga",
Gurmukhi::LetterGha => "gurmukhi letter gha",
Gurmukhi::LetterNga => "gurmukhi letter nga",
Gurmukhi::LetterCa => "gurmukhi letter ca",
Gurmukhi::LetterCha => "gurmukhi letter cha",
Gurmukhi::LetterJa => "gurmukhi letter ja",
Gurmukhi::LetterJha => "gurmukhi letter jha",
Gurmukhi::LetterNya => "gurmukhi letter nya",
Gurmukhi::LetterTta => "gurmukhi letter tta",
Gurmukhi::LetterTtha => "gurmukhi letter ttha",
Gurmukhi::LetterDda => "gurmukhi letter dda",
Gurmukhi::LetterDdha => "gurmukhi letter ddha",
Gurmukhi::LetterNna => "gurmukhi letter nna",
Gurmukhi::LetterTa => "gurmukhi letter ta",
Gurmukhi::LetterTha => "gurmukhi letter tha",
Gurmukhi::LetterDa => "gurmukhi letter da",
Gurmukhi::LetterDha => "gurmukhi letter dha",
Gurmukhi::LetterNa => "gurmukhi letter na",
Gurmukhi::LetterPa => "gurmukhi letter pa",
Gurmukhi::LetterPha => "gurmukhi letter pha",
Gurmukhi::LetterBa => "gurmukhi letter ba",
Gurmukhi::LetterBha => "gurmukhi letter bha",
Gurmukhi::LetterMa => "gurmukhi letter ma",
Gurmukhi::LetterYa => "gurmukhi letter ya",
Gurmukhi::LetterRa => "gurmukhi letter ra",
Gurmukhi::LetterLa => "gurmukhi letter la",
Gurmukhi::LetterLla => "gurmukhi letter lla",
Gurmukhi::LetterVa => "gurmukhi letter va",
Gurmukhi::LetterSha => "gurmukhi letter sha",
Gurmukhi::LetterSa => "gurmukhi letter sa",
Gurmukhi::LetterHa => "gurmukhi letter ha",
Gurmukhi::SignNukta => "gurmukhi sign nukta",
Gurmukhi::VowelSignAa => "gurmukhi vowel sign aa",
Gurmukhi::VowelSignI => "gurmukhi vowel sign i",
Gurmukhi::VowelSignIi => "gurmukhi vowel sign ii",
Gurmukhi::VowelSignU => "gurmukhi vowel sign u",
Gurmukhi::VowelSignUu => "gurmukhi vowel sign uu",
Gurmukhi::VowelSignEe => "gurmukhi vowel sign ee",
Gurmukhi::VowelSignAi => "gurmukhi vowel sign ai",
Gurmukhi::VowelSignOo => "gurmukhi vowel sign oo",
Gurmukhi::VowelSignAu => "gurmukhi vowel sign au",
Gurmukhi::SignVirama => "gurmukhi sign virama",
Gurmukhi::SignUdaat => "gurmukhi sign udaat",
Gurmukhi::LetterKhha => "gurmukhi letter khha",
Gurmukhi::LetterGhha => "gurmukhi letter ghha",
Gurmukhi::LetterZa => "gurmukhi letter za",
Gurmukhi::LetterRra => "gurmukhi letter rra",
Gurmukhi::LetterFa => "gurmukhi letter fa",
Gurmukhi::DigitZero => "gurmukhi digit zero",
Gurmukhi::DigitOne => "gurmukhi digit one",
Gurmukhi::DigitTwo => "gurmukhi digit two",
Gurmukhi::DigitThree => "gurmukhi digit three",
Gurmukhi::DigitFour => "gurmukhi digit four",
Gurmukhi::DigitFive => "gurmukhi digit five",
Gurmukhi::DigitSix => "gurmukhi digit six",
Gurmukhi::DigitSeven => "gurmukhi digit seven",
Gurmukhi::DigitEight => "gurmukhi digit eight",
Gurmukhi::DigitNine => "gurmukhi digit nine",
Gurmukhi::Tippi => "gurmukhi tippi",
Gurmukhi::Addak => "gurmukhi addak",
Gurmukhi::Iri => "gurmukhi iri",
Gurmukhi::Ura => "gurmukhi ura",
Gurmukhi::EkOnkar => "gurmukhi ek onkar",
Gurmukhi::SignYakash => "gurmukhi sign yakash",
Gurmukhi::AbbreviationSign => "gurmukhi abbreviation sign",
}
}
}