mod constants {
pub const VOWEL_DASH_CARRIER_LETTER: 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_YAN: 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_WA: char = 'ᤘ';
pub const LETTER_SHA: char = 'ᤙ';
pub const LETTER_SSA: char = 'ᤚ';
pub const LETTER_SA: char = 'ᤛ';
pub const LETTER_HA: char = 'ᤜ';
pub const LETTER_GYAN: char = 'ᤝ';
pub const LETTER_TRA: char = 'ᤞ';
pub const VOWEL_SIGN_A: char = 'ᤠ';
pub const VOWEL_SIGN_I: char = 'ᤡ';
pub const VOWEL_SIGN_U: 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 VOWEL_SIGN_E: char = 'ᤧ';
pub const VOWEL_SIGN_O: char = 'ᤨ';
pub const SUBJOINED_LETTER_YA: char = 'ᤩ';
pub const SUBJOINED_LETTER_RA: char = 'ᤪ';
pub const SUBJOINED_LETTER_WA: char = 'ᤫ';
pub const SMALL_LETTER_KA: char = 'ᤰ';
pub const SMALL_LETTER_NGA: char = 'ᤱ';
pub const SMALL_LETTER_ANUSVARA: char = 'ᤲ';
pub const SMALL_LETTER_TA: char = 'ᤳ';
pub const SMALL_LETTER_NA: char = 'ᤴ';
pub const SMALL_LETTER_PA: char = 'ᤵ';
pub const SMALL_LETTER_MA: char = 'ᤶ';
pub const SMALL_LETTER_RA: char = 'ᤷ';
pub const SMALL_LETTER_LA: char = 'ᤸ';
pub const SIGN_MUKPHRENG: char = '᤹';
pub const SIGN_KEMPHRENG: char = '᤺';
pub const SIGN_SA_DASH_I: char = '᤻';
pub const SIGN_LOO: char = '᥀';
pub const EXCLAMATION_MARK: char = '᥄';
pub const QUESTION_MARK: 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 = '᥎';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Limbu {
VowelDashCarrierLetter,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterYan,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterWa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterGyan,
LetterTra,
VowelSignA,
VowelSignI,
VowelSignU,
VowelSignEe,
VowelSignAi,
VowelSignOo,
VowelSignAu,
VowelSignE,
VowelSignO,
SubjoinedLetterYa,
SubjoinedLetterRa,
SubjoinedLetterWa,
SmallLetterKa,
SmallLetterNga,
SmallLetterAnusvara,
SmallLetterTa,
SmallLetterNa,
SmallLetterPa,
SmallLetterMa,
SmallLetterRa,
SmallLetterLa,
SignMukphreng,
SignKemphreng,
SignSaDashI,
SignLoo,
ExclamationMark,
QuestionMark,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
}
impl Into<char> for Limbu {
fn into(self) -> char {
use constants::*;
match self {
Limbu::VowelDashCarrierLetter => VOWEL_DASH_CARRIER_LETTER,
Limbu::LetterKa => LETTER_KA,
Limbu::LetterKha => LETTER_KHA,
Limbu::LetterGa => LETTER_GA,
Limbu::LetterGha => LETTER_GHA,
Limbu::LetterNga => LETTER_NGA,
Limbu::LetterCa => LETTER_CA,
Limbu::LetterCha => LETTER_CHA,
Limbu::LetterJa => LETTER_JA,
Limbu::LetterJha => LETTER_JHA,
Limbu::LetterYan => LETTER_YAN,
Limbu::LetterTa => LETTER_TA,
Limbu::LetterTha => LETTER_THA,
Limbu::LetterDa => LETTER_DA,
Limbu::LetterDha => LETTER_DHA,
Limbu::LetterNa => LETTER_NA,
Limbu::LetterPa => LETTER_PA,
Limbu::LetterPha => LETTER_PHA,
Limbu::LetterBa => LETTER_BA,
Limbu::LetterBha => LETTER_BHA,
Limbu::LetterMa => LETTER_MA,
Limbu::LetterYa => LETTER_YA,
Limbu::LetterRa => LETTER_RA,
Limbu::LetterLa => LETTER_LA,
Limbu::LetterWa => LETTER_WA,
Limbu::LetterSha => LETTER_SHA,
Limbu::LetterSsa => LETTER_SSA,
Limbu::LetterSa => LETTER_SA,
Limbu::LetterHa => LETTER_HA,
Limbu::LetterGyan => LETTER_GYAN,
Limbu::LetterTra => LETTER_TRA,
Limbu::VowelSignA => VOWEL_SIGN_A,
Limbu::VowelSignI => VOWEL_SIGN_I,
Limbu::VowelSignU => VOWEL_SIGN_U,
Limbu::VowelSignEe => VOWEL_SIGN_EE,
Limbu::VowelSignAi => VOWEL_SIGN_AI,
Limbu::VowelSignOo => VOWEL_SIGN_OO,
Limbu::VowelSignAu => VOWEL_SIGN_AU,
Limbu::VowelSignE => VOWEL_SIGN_E,
Limbu::VowelSignO => VOWEL_SIGN_O,
Limbu::SubjoinedLetterYa => SUBJOINED_LETTER_YA,
Limbu::SubjoinedLetterRa => SUBJOINED_LETTER_RA,
Limbu::SubjoinedLetterWa => SUBJOINED_LETTER_WA,
Limbu::SmallLetterKa => SMALL_LETTER_KA,
Limbu::SmallLetterNga => SMALL_LETTER_NGA,
Limbu::SmallLetterAnusvara => SMALL_LETTER_ANUSVARA,
Limbu::SmallLetterTa => SMALL_LETTER_TA,
Limbu::SmallLetterNa => SMALL_LETTER_NA,
Limbu::SmallLetterPa => SMALL_LETTER_PA,
Limbu::SmallLetterMa => SMALL_LETTER_MA,
Limbu::SmallLetterRa => SMALL_LETTER_RA,
Limbu::SmallLetterLa => SMALL_LETTER_LA,
Limbu::SignMukphreng => SIGN_MUKPHRENG,
Limbu::SignKemphreng => SIGN_KEMPHRENG,
Limbu::SignSaDashI => SIGN_SA_DASH_I,
Limbu::SignLoo => SIGN_LOO,
Limbu::ExclamationMark => EXCLAMATION_MARK,
Limbu::QuestionMark => QUESTION_MARK,
Limbu::DigitZero => DIGIT_ZERO,
Limbu::DigitOne => DIGIT_ONE,
Limbu::DigitTwo => DIGIT_TWO,
Limbu::DigitThree => DIGIT_THREE,
Limbu::DigitFour => DIGIT_FOUR,
Limbu::DigitFive => DIGIT_FIVE,
Limbu::DigitSix => DIGIT_SIX,
Limbu::DigitSeven => DIGIT_SEVEN,
Limbu::DigitEight => DIGIT_EIGHT,
}
}
}
impl std::convert::TryFrom<char> for Limbu {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
VOWEL_DASH_CARRIER_LETTER => Ok(Limbu::VowelDashCarrierLetter),
LETTER_KA => Ok(Limbu::LetterKa),
LETTER_KHA => Ok(Limbu::LetterKha),
LETTER_GA => Ok(Limbu::LetterGa),
LETTER_GHA => Ok(Limbu::LetterGha),
LETTER_NGA => Ok(Limbu::LetterNga),
LETTER_CA => Ok(Limbu::LetterCa),
LETTER_CHA => Ok(Limbu::LetterCha),
LETTER_JA => Ok(Limbu::LetterJa),
LETTER_JHA => Ok(Limbu::LetterJha),
LETTER_YAN => Ok(Limbu::LetterYan),
LETTER_TA => Ok(Limbu::LetterTa),
LETTER_THA => Ok(Limbu::LetterTha),
LETTER_DA => Ok(Limbu::LetterDa),
LETTER_DHA => Ok(Limbu::LetterDha),
LETTER_NA => Ok(Limbu::LetterNa),
LETTER_PA => Ok(Limbu::LetterPa),
LETTER_PHA => Ok(Limbu::LetterPha),
LETTER_BA => Ok(Limbu::LetterBa),
LETTER_BHA => Ok(Limbu::LetterBha),
LETTER_MA => Ok(Limbu::LetterMa),
LETTER_YA => Ok(Limbu::LetterYa),
LETTER_RA => Ok(Limbu::LetterRa),
LETTER_LA => Ok(Limbu::LetterLa),
LETTER_WA => Ok(Limbu::LetterWa),
LETTER_SHA => Ok(Limbu::LetterSha),
LETTER_SSA => Ok(Limbu::LetterSsa),
LETTER_SA => Ok(Limbu::LetterSa),
LETTER_HA => Ok(Limbu::LetterHa),
LETTER_GYAN => Ok(Limbu::LetterGyan),
LETTER_TRA => Ok(Limbu::LetterTra),
VOWEL_SIGN_A => Ok(Limbu::VowelSignA),
VOWEL_SIGN_I => Ok(Limbu::VowelSignI),
VOWEL_SIGN_U => Ok(Limbu::VowelSignU),
VOWEL_SIGN_EE => Ok(Limbu::VowelSignEe),
VOWEL_SIGN_AI => Ok(Limbu::VowelSignAi),
VOWEL_SIGN_OO => Ok(Limbu::VowelSignOo),
VOWEL_SIGN_AU => Ok(Limbu::VowelSignAu),
VOWEL_SIGN_E => Ok(Limbu::VowelSignE),
VOWEL_SIGN_O => Ok(Limbu::VowelSignO),
SUBJOINED_LETTER_YA => Ok(Limbu::SubjoinedLetterYa),
SUBJOINED_LETTER_RA => Ok(Limbu::SubjoinedLetterRa),
SUBJOINED_LETTER_WA => Ok(Limbu::SubjoinedLetterWa),
SMALL_LETTER_KA => Ok(Limbu::SmallLetterKa),
SMALL_LETTER_NGA => Ok(Limbu::SmallLetterNga),
SMALL_LETTER_ANUSVARA => Ok(Limbu::SmallLetterAnusvara),
SMALL_LETTER_TA => Ok(Limbu::SmallLetterTa),
SMALL_LETTER_NA => Ok(Limbu::SmallLetterNa),
SMALL_LETTER_PA => Ok(Limbu::SmallLetterPa),
SMALL_LETTER_MA => Ok(Limbu::SmallLetterMa),
SMALL_LETTER_RA => Ok(Limbu::SmallLetterRa),
SMALL_LETTER_LA => Ok(Limbu::SmallLetterLa),
SIGN_MUKPHRENG => Ok(Limbu::SignMukphreng),
SIGN_KEMPHRENG => Ok(Limbu::SignKemphreng),
SIGN_SA_DASH_I => Ok(Limbu::SignSaDashI),
SIGN_LOO => Ok(Limbu::SignLoo),
EXCLAMATION_MARK => Ok(Limbu::ExclamationMark),
QUESTION_MARK => Ok(Limbu::QuestionMark),
DIGIT_ZERO => Ok(Limbu::DigitZero),
DIGIT_ONE => Ok(Limbu::DigitOne),
DIGIT_TWO => Ok(Limbu::DigitTwo),
DIGIT_THREE => Ok(Limbu::DigitThree),
DIGIT_FOUR => Ok(Limbu::DigitFour),
DIGIT_FIVE => Ok(Limbu::DigitFive),
DIGIT_SIX => Ok(Limbu::DigitSix),
DIGIT_SEVEN => Ok(Limbu::DigitSeven),
DIGIT_EIGHT => Ok(Limbu::DigitEight),
_ => Err(()),
}
}
}
impl Into<u32> for Limbu {
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 Limbu {
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 Limbu {
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 Limbu {
pub fn new() -> Self {
Limbu::VowelDashCarrierLetter
}
pub fn name(&self) -> &str {
match self {
Limbu::VowelDashCarrierLetter => "limbu vowel-carrier letter",
Limbu::LetterKa => "limbu letter ka",
Limbu::LetterKha => "limbu letter kha",
Limbu::LetterGa => "limbu letter ga",
Limbu::LetterGha => "limbu letter gha",
Limbu::LetterNga => "limbu letter nga",
Limbu::LetterCa => "limbu letter ca",
Limbu::LetterCha => "limbu letter cha",
Limbu::LetterJa => "limbu letter ja",
Limbu::LetterJha => "limbu letter jha",
Limbu::LetterYan => "limbu letter yan",
Limbu::LetterTa => "limbu letter ta",
Limbu::LetterTha => "limbu letter tha",
Limbu::LetterDa => "limbu letter da",
Limbu::LetterDha => "limbu letter dha",
Limbu::LetterNa => "limbu letter na",
Limbu::LetterPa => "limbu letter pa",
Limbu::LetterPha => "limbu letter pha",
Limbu::LetterBa => "limbu letter ba",
Limbu::LetterBha => "limbu letter bha",
Limbu::LetterMa => "limbu letter ma",
Limbu::LetterYa => "limbu letter ya",
Limbu::LetterRa => "limbu letter ra",
Limbu::LetterLa => "limbu letter la",
Limbu::LetterWa => "limbu letter wa",
Limbu::LetterSha => "limbu letter sha",
Limbu::LetterSsa => "limbu letter ssa",
Limbu::LetterSa => "limbu letter sa",
Limbu::LetterHa => "limbu letter ha",
Limbu::LetterGyan => "limbu letter gyan",
Limbu::LetterTra => "limbu letter tra",
Limbu::VowelSignA => "limbu vowel sign a",
Limbu::VowelSignI => "limbu vowel sign i",
Limbu::VowelSignU => "limbu vowel sign u",
Limbu::VowelSignEe => "limbu vowel sign ee",
Limbu::VowelSignAi => "limbu vowel sign ai",
Limbu::VowelSignOo => "limbu vowel sign oo",
Limbu::VowelSignAu => "limbu vowel sign au",
Limbu::VowelSignE => "limbu vowel sign e",
Limbu::VowelSignO => "limbu vowel sign o",
Limbu::SubjoinedLetterYa => "limbu subjoined letter ya",
Limbu::SubjoinedLetterRa => "limbu subjoined letter ra",
Limbu::SubjoinedLetterWa => "limbu subjoined letter wa",
Limbu::SmallLetterKa => "limbu small letter ka",
Limbu::SmallLetterNga => "limbu small letter nga",
Limbu::SmallLetterAnusvara => "limbu small letter anusvara",
Limbu::SmallLetterTa => "limbu small letter ta",
Limbu::SmallLetterNa => "limbu small letter na",
Limbu::SmallLetterPa => "limbu small letter pa",
Limbu::SmallLetterMa => "limbu small letter ma",
Limbu::SmallLetterRa => "limbu small letter ra",
Limbu::SmallLetterLa => "limbu small letter la",
Limbu::SignMukphreng => "limbu sign mukphreng",
Limbu::SignKemphreng => "limbu sign kemphreng",
Limbu::SignSaDashI => "limbu sign sa-i",
Limbu::SignLoo => "limbu sign loo",
Limbu::ExclamationMark => "limbu exclamation mark",
Limbu::QuestionMark => "limbu question mark",
Limbu::DigitZero => "limbu digit zero",
Limbu::DigitOne => "limbu digit one",
Limbu::DigitTwo => "limbu digit two",
Limbu::DigitThree => "limbu digit three",
Limbu::DigitFour => "limbu digit four",
Limbu::DigitFive => "limbu digit five",
Limbu::DigitSix => "limbu digit six",
Limbu::DigitSeven => "limbu digit seven",
Limbu::DigitEight => "limbu digit eight",
}
}
}