mod constants {
pub const LETTER_KA: char = 'ᰀ';
pub const LETTER_KLA: char = 'ᰁ';
pub const LETTER_KHA: char = 'ᰂ';
pub const LETTER_GA: char = 'ᰃ';
pub const LETTER_GLA: char = 'ᰄ';
pub const LETTER_NGA: char = 'ᰅ';
pub const LETTER_CA: char = 'ᰆ';
pub const LETTER_CHA: char = 'ᰇ';
pub const LETTER_JA: char = 'ᰈ';
pub const LETTER_NYA: char = 'ᰉ';
pub const LETTER_TA: char = 'ᰊ';
pub const LETTER_THA: char = 'ᰋ';
pub const LETTER_DA: char = 'ᰌ';
pub const LETTER_NA: char = 'ᰍ';
pub const LETTER_PA: char = 'ᰎ';
pub const LETTER_PLA: char = 'ᰏ';
pub const LETTER_PHA: char = 'ᰐ';
pub const LETTER_FA: char = 'ᰑ';
pub const LETTER_FLA: char = 'ᰒ';
pub const LETTER_BA: char = 'ᰓ';
pub const LETTER_BLA: char = 'ᰔ';
pub const LETTER_MA: char = 'ᰕ';
pub const LETTER_MLA: char = 'ᰖ';
pub const LETTER_TSA: char = 'ᰗ';
pub const LETTER_TSHA: char = 'ᰘ';
pub const LETTER_DZA: char = 'ᰙ';
pub const LETTER_YA: char = 'ᰚ';
pub const LETTER_RA: char = 'ᰛ';
pub const LETTER_LA: char = 'ᰜ';
pub const LETTER_HA: char = 'ᰝ';
pub const LETTER_HLA: char = 'ᰞ';
pub const LETTER_VA: char = 'ᰟ';
pub const LETTER_SA: char = 'ᰠ';
pub const LETTER_SHA: char = 'ᰡ';
pub const LETTER_WA: char = 'ᰢ';
pub const LETTER_A: char = 'ᰣ';
pub const SUBJOINED_LETTER_YA: char = 'ᰤ';
pub const SUBJOINED_LETTER_RA: char = 'ᰥ';
pub const VOWEL_SIGN_AA: char = 'ᰦ';
pub const VOWEL_SIGN_I: char = 'ᰧ';
pub const VOWEL_SIGN_O: char = 'ᰨ';
pub const VOWEL_SIGN_OO: char = 'ᰩ';
pub const VOWEL_SIGN_U: char = 'ᰪ';
pub const VOWEL_SIGN_UU: char = 'ᰫ';
pub const VOWEL_SIGN_E: char = 'ᰬ';
pub const CONSONANT_SIGN_K: char = 'ᰭ';
pub const CONSONANT_SIGN_M: char = 'ᰮ';
pub const CONSONANT_SIGN_L: char = 'ᰯ';
pub const CONSONANT_SIGN_N: char = 'ᰰ';
pub const CONSONANT_SIGN_P: char = 'ᰱ';
pub const CONSONANT_SIGN_R: char = 'ᰲ';
pub const CONSONANT_SIGN_T: char = 'ᰳ';
pub const CONSONANT_SIGN_NYIN_DASH_DO: char = 'ᰴ';
pub const CONSONANT_SIGN_KANG: char = 'ᰵ';
pub const SIGN_RAN: char = 'ᰶ';
pub const SIGN_NUKTA: char = '᰷';
pub const PUNCTUATION_TA_DASH_ROL: char = '᰻';
pub const PUNCTUATION_NYET_THYOOM_TA_DASH_ROL: char = '᰼';
pub const PUNCTUATION_CER_DASH_WA: char = '᰽';
pub const PUNCTUATION_TSHOOK_CER_DASH_WA: char = '᰾';
pub const PUNCTUATION_TSHOOK: 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 LETTER_TTA: char = 'ᱍ';
pub const LETTER_TTHA: char = 'ᱎ';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Lepcha {
LetterKa,
LetterKla,
LetterKha,
LetterGa,
LetterGla,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterNya,
LetterTa,
LetterTha,
LetterDa,
LetterNa,
LetterPa,
LetterPla,
LetterPha,
LetterFa,
LetterFla,
LetterBa,
LetterBla,
LetterMa,
LetterMla,
LetterTsa,
LetterTsha,
LetterDza,
LetterYa,
LetterRa,
LetterLa,
LetterHa,
LetterHla,
LetterVa,
LetterSa,
LetterSha,
LetterWa,
LetterA,
SubjoinedLetterYa,
SubjoinedLetterRa,
VowelSignAa,
VowelSignI,
VowelSignO,
VowelSignOo,
VowelSignU,
VowelSignUu,
VowelSignE,
ConsonantSignK,
ConsonantSignM,
ConsonantSignL,
ConsonantSignN,
ConsonantSignP,
ConsonantSignR,
ConsonantSignT,
ConsonantSignNyinDashDo,
ConsonantSignKang,
SignRan,
SignNukta,
PunctuationTaDashRol,
PunctuationNyetThyoomTaDashRol,
PunctuationCerDashWa,
PunctuationTshookCerDashWa,
PunctuationTshook,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
LetterTta,
LetterTtha,
}
impl Into<char> for Lepcha {
fn into(self) -> char {
use constants::*;
match self {
Lepcha::LetterKa => LETTER_KA,
Lepcha::LetterKla => LETTER_KLA,
Lepcha::LetterKha => LETTER_KHA,
Lepcha::LetterGa => LETTER_GA,
Lepcha::LetterGla => LETTER_GLA,
Lepcha::LetterNga => LETTER_NGA,
Lepcha::LetterCa => LETTER_CA,
Lepcha::LetterCha => LETTER_CHA,
Lepcha::LetterJa => LETTER_JA,
Lepcha::LetterNya => LETTER_NYA,
Lepcha::LetterTa => LETTER_TA,
Lepcha::LetterTha => LETTER_THA,
Lepcha::LetterDa => LETTER_DA,
Lepcha::LetterNa => LETTER_NA,
Lepcha::LetterPa => LETTER_PA,
Lepcha::LetterPla => LETTER_PLA,
Lepcha::LetterPha => LETTER_PHA,
Lepcha::LetterFa => LETTER_FA,
Lepcha::LetterFla => LETTER_FLA,
Lepcha::LetterBa => LETTER_BA,
Lepcha::LetterBla => LETTER_BLA,
Lepcha::LetterMa => LETTER_MA,
Lepcha::LetterMla => LETTER_MLA,
Lepcha::LetterTsa => LETTER_TSA,
Lepcha::LetterTsha => LETTER_TSHA,
Lepcha::LetterDza => LETTER_DZA,
Lepcha::LetterYa => LETTER_YA,
Lepcha::LetterRa => LETTER_RA,
Lepcha::LetterLa => LETTER_LA,
Lepcha::LetterHa => LETTER_HA,
Lepcha::LetterHla => LETTER_HLA,
Lepcha::LetterVa => LETTER_VA,
Lepcha::LetterSa => LETTER_SA,
Lepcha::LetterSha => LETTER_SHA,
Lepcha::LetterWa => LETTER_WA,
Lepcha::LetterA => LETTER_A,
Lepcha::SubjoinedLetterYa => SUBJOINED_LETTER_YA,
Lepcha::SubjoinedLetterRa => SUBJOINED_LETTER_RA,
Lepcha::VowelSignAa => VOWEL_SIGN_AA,
Lepcha::VowelSignI => VOWEL_SIGN_I,
Lepcha::VowelSignO => VOWEL_SIGN_O,
Lepcha::VowelSignOo => VOWEL_SIGN_OO,
Lepcha::VowelSignU => VOWEL_SIGN_U,
Lepcha::VowelSignUu => VOWEL_SIGN_UU,
Lepcha::VowelSignE => VOWEL_SIGN_E,
Lepcha::ConsonantSignK => CONSONANT_SIGN_K,
Lepcha::ConsonantSignM => CONSONANT_SIGN_M,
Lepcha::ConsonantSignL => CONSONANT_SIGN_L,
Lepcha::ConsonantSignN => CONSONANT_SIGN_N,
Lepcha::ConsonantSignP => CONSONANT_SIGN_P,
Lepcha::ConsonantSignR => CONSONANT_SIGN_R,
Lepcha::ConsonantSignT => CONSONANT_SIGN_T,
Lepcha::ConsonantSignNyinDashDo => CONSONANT_SIGN_NYIN_DASH_DO,
Lepcha::ConsonantSignKang => CONSONANT_SIGN_KANG,
Lepcha::SignRan => SIGN_RAN,
Lepcha::SignNukta => SIGN_NUKTA,
Lepcha::PunctuationTaDashRol => PUNCTUATION_TA_DASH_ROL,
Lepcha::PunctuationNyetThyoomTaDashRol => PUNCTUATION_NYET_THYOOM_TA_DASH_ROL,
Lepcha::PunctuationCerDashWa => PUNCTUATION_CER_DASH_WA,
Lepcha::PunctuationTshookCerDashWa => PUNCTUATION_TSHOOK_CER_DASH_WA,
Lepcha::PunctuationTshook => PUNCTUATION_TSHOOK,
Lepcha::DigitZero => DIGIT_ZERO,
Lepcha::DigitOne => DIGIT_ONE,
Lepcha::DigitTwo => DIGIT_TWO,
Lepcha::DigitThree => DIGIT_THREE,
Lepcha::DigitFour => DIGIT_FOUR,
Lepcha::DigitFive => DIGIT_FIVE,
Lepcha::DigitSix => DIGIT_SIX,
Lepcha::DigitSeven => DIGIT_SEVEN,
Lepcha::DigitEight => DIGIT_EIGHT,
Lepcha::DigitNine => DIGIT_NINE,
Lepcha::LetterTta => LETTER_TTA,
Lepcha::LetterTtha => LETTER_TTHA,
}
}
}
impl std::convert::TryFrom<char> for Lepcha {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_KA => Ok(Lepcha::LetterKa),
LETTER_KLA => Ok(Lepcha::LetterKla),
LETTER_KHA => Ok(Lepcha::LetterKha),
LETTER_GA => Ok(Lepcha::LetterGa),
LETTER_GLA => Ok(Lepcha::LetterGla),
LETTER_NGA => Ok(Lepcha::LetterNga),
LETTER_CA => Ok(Lepcha::LetterCa),
LETTER_CHA => Ok(Lepcha::LetterCha),
LETTER_JA => Ok(Lepcha::LetterJa),
LETTER_NYA => Ok(Lepcha::LetterNya),
LETTER_TA => Ok(Lepcha::LetterTa),
LETTER_THA => Ok(Lepcha::LetterTha),
LETTER_DA => Ok(Lepcha::LetterDa),
LETTER_NA => Ok(Lepcha::LetterNa),
LETTER_PA => Ok(Lepcha::LetterPa),
LETTER_PLA => Ok(Lepcha::LetterPla),
LETTER_PHA => Ok(Lepcha::LetterPha),
LETTER_FA => Ok(Lepcha::LetterFa),
LETTER_FLA => Ok(Lepcha::LetterFla),
LETTER_BA => Ok(Lepcha::LetterBa),
LETTER_BLA => Ok(Lepcha::LetterBla),
LETTER_MA => Ok(Lepcha::LetterMa),
LETTER_MLA => Ok(Lepcha::LetterMla),
LETTER_TSA => Ok(Lepcha::LetterTsa),
LETTER_TSHA => Ok(Lepcha::LetterTsha),
LETTER_DZA => Ok(Lepcha::LetterDza),
LETTER_YA => Ok(Lepcha::LetterYa),
LETTER_RA => Ok(Lepcha::LetterRa),
LETTER_LA => Ok(Lepcha::LetterLa),
LETTER_HA => Ok(Lepcha::LetterHa),
LETTER_HLA => Ok(Lepcha::LetterHla),
LETTER_VA => Ok(Lepcha::LetterVa),
LETTER_SA => Ok(Lepcha::LetterSa),
LETTER_SHA => Ok(Lepcha::LetterSha),
LETTER_WA => Ok(Lepcha::LetterWa),
LETTER_A => Ok(Lepcha::LetterA),
SUBJOINED_LETTER_YA => Ok(Lepcha::SubjoinedLetterYa),
SUBJOINED_LETTER_RA => Ok(Lepcha::SubjoinedLetterRa),
VOWEL_SIGN_AA => Ok(Lepcha::VowelSignAa),
VOWEL_SIGN_I => Ok(Lepcha::VowelSignI),
VOWEL_SIGN_O => Ok(Lepcha::VowelSignO),
VOWEL_SIGN_OO => Ok(Lepcha::VowelSignOo),
VOWEL_SIGN_U => Ok(Lepcha::VowelSignU),
VOWEL_SIGN_UU => Ok(Lepcha::VowelSignUu),
VOWEL_SIGN_E => Ok(Lepcha::VowelSignE),
CONSONANT_SIGN_K => Ok(Lepcha::ConsonantSignK),
CONSONANT_SIGN_M => Ok(Lepcha::ConsonantSignM),
CONSONANT_SIGN_L => Ok(Lepcha::ConsonantSignL),
CONSONANT_SIGN_N => Ok(Lepcha::ConsonantSignN),
CONSONANT_SIGN_P => Ok(Lepcha::ConsonantSignP),
CONSONANT_SIGN_R => Ok(Lepcha::ConsonantSignR),
CONSONANT_SIGN_T => Ok(Lepcha::ConsonantSignT),
CONSONANT_SIGN_NYIN_DASH_DO => Ok(Lepcha::ConsonantSignNyinDashDo),
CONSONANT_SIGN_KANG => Ok(Lepcha::ConsonantSignKang),
SIGN_RAN => Ok(Lepcha::SignRan),
SIGN_NUKTA => Ok(Lepcha::SignNukta),
PUNCTUATION_TA_DASH_ROL => Ok(Lepcha::PunctuationTaDashRol),
PUNCTUATION_NYET_THYOOM_TA_DASH_ROL => Ok(Lepcha::PunctuationNyetThyoomTaDashRol),
PUNCTUATION_CER_DASH_WA => Ok(Lepcha::PunctuationCerDashWa),
PUNCTUATION_TSHOOK_CER_DASH_WA => Ok(Lepcha::PunctuationTshookCerDashWa),
PUNCTUATION_TSHOOK => Ok(Lepcha::PunctuationTshook),
DIGIT_ZERO => Ok(Lepcha::DigitZero),
DIGIT_ONE => Ok(Lepcha::DigitOne),
DIGIT_TWO => Ok(Lepcha::DigitTwo),
DIGIT_THREE => Ok(Lepcha::DigitThree),
DIGIT_FOUR => Ok(Lepcha::DigitFour),
DIGIT_FIVE => Ok(Lepcha::DigitFive),
DIGIT_SIX => Ok(Lepcha::DigitSix),
DIGIT_SEVEN => Ok(Lepcha::DigitSeven),
DIGIT_EIGHT => Ok(Lepcha::DigitEight),
DIGIT_NINE => Ok(Lepcha::DigitNine),
LETTER_TTA => Ok(Lepcha::LetterTta),
LETTER_TTHA => Ok(Lepcha::LetterTtha),
_ => Err(()),
}
}
}
impl Into<u32> for Lepcha {
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 Lepcha {
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 Lepcha {
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 Lepcha {
pub fn new() -> Self {
Lepcha::LetterKa
}
pub fn name(&self) -> &str {
match self {
Lepcha::LetterKa => "lepcha letter ka",
Lepcha::LetterKla => "lepcha letter kla",
Lepcha::LetterKha => "lepcha letter kha",
Lepcha::LetterGa => "lepcha letter ga",
Lepcha::LetterGla => "lepcha letter gla",
Lepcha::LetterNga => "lepcha letter nga",
Lepcha::LetterCa => "lepcha letter ca",
Lepcha::LetterCha => "lepcha letter cha",
Lepcha::LetterJa => "lepcha letter ja",
Lepcha::LetterNya => "lepcha letter nya",
Lepcha::LetterTa => "lepcha letter ta",
Lepcha::LetterTha => "lepcha letter tha",
Lepcha::LetterDa => "lepcha letter da",
Lepcha::LetterNa => "lepcha letter na",
Lepcha::LetterPa => "lepcha letter pa",
Lepcha::LetterPla => "lepcha letter pla",
Lepcha::LetterPha => "lepcha letter pha",
Lepcha::LetterFa => "lepcha letter fa",
Lepcha::LetterFla => "lepcha letter fla",
Lepcha::LetterBa => "lepcha letter ba",
Lepcha::LetterBla => "lepcha letter bla",
Lepcha::LetterMa => "lepcha letter ma",
Lepcha::LetterMla => "lepcha letter mla",
Lepcha::LetterTsa => "lepcha letter tsa",
Lepcha::LetterTsha => "lepcha letter tsha",
Lepcha::LetterDza => "lepcha letter dza",
Lepcha::LetterYa => "lepcha letter ya",
Lepcha::LetterRa => "lepcha letter ra",
Lepcha::LetterLa => "lepcha letter la",
Lepcha::LetterHa => "lepcha letter ha",
Lepcha::LetterHla => "lepcha letter hla",
Lepcha::LetterVa => "lepcha letter va",
Lepcha::LetterSa => "lepcha letter sa",
Lepcha::LetterSha => "lepcha letter sha",
Lepcha::LetterWa => "lepcha letter wa",
Lepcha::LetterA => "lepcha letter a",
Lepcha::SubjoinedLetterYa => "lepcha subjoined letter ya",
Lepcha::SubjoinedLetterRa => "lepcha subjoined letter ra",
Lepcha::VowelSignAa => "lepcha vowel sign aa",
Lepcha::VowelSignI => "lepcha vowel sign i",
Lepcha::VowelSignO => "lepcha vowel sign o",
Lepcha::VowelSignOo => "lepcha vowel sign oo",
Lepcha::VowelSignU => "lepcha vowel sign u",
Lepcha::VowelSignUu => "lepcha vowel sign uu",
Lepcha::VowelSignE => "lepcha vowel sign e",
Lepcha::ConsonantSignK => "lepcha consonant sign k",
Lepcha::ConsonantSignM => "lepcha consonant sign m",
Lepcha::ConsonantSignL => "lepcha consonant sign l",
Lepcha::ConsonantSignN => "lepcha consonant sign n",
Lepcha::ConsonantSignP => "lepcha consonant sign p",
Lepcha::ConsonantSignR => "lepcha consonant sign r",
Lepcha::ConsonantSignT => "lepcha consonant sign t",
Lepcha::ConsonantSignNyinDashDo => "lepcha consonant sign nyin-do",
Lepcha::ConsonantSignKang => "lepcha consonant sign kang",
Lepcha::SignRan => "lepcha sign ran",
Lepcha::SignNukta => "lepcha sign nukta",
Lepcha::PunctuationTaDashRol => "lepcha punctuation ta-rol",
Lepcha::PunctuationNyetThyoomTaDashRol => "lepcha punctuation nyet thyoom ta-rol",
Lepcha::PunctuationCerDashWa => "lepcha punctuation cer-wa",
Lepcha::PunctuationTshookCerDashWa => "lepcha punctuation tshook cer-wa",
Lepcha::PunctuationTshook => "lepcha punctuation tshook",
Lepcha::DigitZero => "lepcha digit zero",
Lepcha::DigitOne => "lepcha digit one",
Lepcha::DigitTwo => "lepcha digit two",
Lepcha::DigitThree => "lepcha digit three",
Lepcha::DigitFour => "lepcha digit four",
Lepcha::DigitFive => "lepcha digit five",
Lepcha::DigitSix => "lepcha digit six",
Lepcha::DigitSeven => "lepcha digit seven",
Lepcha::DigitEight => "lepcha digit eight",
Lepcha::DigitNine => "lepcha digit nine",
Lepcha::LetterTta => "lepcha letter tta",
Lepcha::LetterTtha => "lepcha letter ttha",
}
}
}