#[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 {
match self {
Lepcha::LetterKa => 'ᰀ',
Lepcha::LetterKla => 'ᰁ',
Lepcha::LetterKha => 'ᰂ',
Lepcha::LetterGa => 'ᰃ',
Lepcha::LetterGla => 'ᰄ',
Lepcha::LetterNga => 'ᰅ',
Lepcha::LetterCa => 'ᰆ',
Lepcha::LetterCha => 'ᰇ',
Lepcha::LetterJa => 'ᰈ',
Lepcha::LetterNya => 'ᰉ',
Lepcha::LetterTa => 'ᰊ',
Lepcha::LetterTha => 'ᰋ',
Lepcha::LetterDa => 'ᰌ',
Lepcha::LetterNa => 'ᰍ',
Lepcha::LetterPa => 'ᰎ',
Lepcha::LetterPla => 'ᰏ',
Lepcha::LetterPha => 'ᰐ',
Lepcha::LetterFa => 'ᰑ',
Lepcha::LetterFla => 'ᰒ',
Lepcha::LetterBa => 'ᰓ',
Lepcha::LetterBla => 'ᰔ',
Lepcha::LetterMa => 'ᰕ',
Lepcha::LetterMla => 'ᰖ',
Lepcha::LetterTsa => 'ᰗ',
Lepcha::LetterTsha => 'ᰘ',
Lepcha::LetterDza => 'ᰙ',
Lepcha::LetterYa => 'ᰚ',
Lepcha::LetterRa => 'ᰛ',
Lepcha::LetterLa => 'ᰜ',
Lepcha::LetterHa => 'ᰝ',
Lepcha::LetterHla => 'ᰞ',
Lepcha::LetterVa => 'ᰟ',
Lepcha::LetterSa => 'ᰠ',
Lepcha::LetterSha => 'ᰡ',
Lepcha::LetterWa => 'ᰢ',
Lepcha::LetterA => 'ᰣ',
Lepcha::SubjoinedLetterYa => 'ᰤ',
Lepcha::SubjoinedLetterRa => 'ᰥ',
Lepcha::VowelSignAa => 'ᰦ',
Lepcha::VowelSignI => 'ᰧ',
Lepcha::VowelSignO => 'ᰨ',
Lepcha::VowelSignOo => 'ᰩ',
Lepcha::VowelSignU => 'ᰪ',
Lepcha::VowelSignUu => 'ᰫ',
Lepcha::VowelSignE => 'ᰬ',
Lepcha::ConsonantSignK => 'ᰭ',
Lepcha::ConsonantSignM => 'ᰮ',
Lepcha::ConsonantSignL => 'ᰯ',
Lepcha::ConsonantSignN => 'ᰰ',
Lepcha::ConsonantSignP => 'ᰱ',
Lepcha::ConsonantSignR => 'ᰲ',
Lepcha::ConsonantSignT => 'ᰳ',
Lepcha::ConsonantSignNyinDashDo => 'ᰴ',
Lepcha::ConsonantSignKang => 'ᰵ',
Lepcha::SignRan => 'ᰶ',
Lepcha::SignNukta => '᰷',
Lepcha::PunctuationTaDashRol => '᰻',
Lepcha::PunctuationNyetThyoomTaDashRol => '᰼',
Lepcha::PunctuationCerDashWa => '᰽',
Lepcha::PunctuationTshookCerDashWa => '᰾',
Lepcha::PunctuationTshook => '᰿',
Lepcha::DigitZero => '᱀',
Lepcha::DigitOne => '᱁',
Lepcha::DigitTwo => '᱂',
Lepcha::DigitThree => '᱃',
Lepcha::DigitFour => '᱄',
Lepcha::DigitFive => '᱅',
Lepcha::DigitSix => '᱆',
Lepcha::DigitSeven => '᱇',
Lepcha::DigitEight => '᱈',
Lepcha::DigitNine => '᱉',
Lepcha::LetterTta => 'ᱍ',
Lepcha::LetterTtha => 'ᱎ',
}
}
}
impl std::convert::TryFrom<char> for Lepcha {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ᰀ' => Ok(Lepcha::LetterKa),
'ᰁ' => Ok(Lepcha::LetterKla),
'ᰂ' => Ok(Lepcha::LetterKha),
'ᰃ' => Ok(Lepcha::LetterGa),
'ᰄ' => Ok(Lepcha::LetterGla),
'ᰅ' => Ok(Lepcha::LetterNga),
'ᰆ' => Ok(Lepcha::LetterCa),
'ᰇ' => Ok(Lepcha::LetterCha),
'ᰈ' => Ok(Lepcha::LetterJa),
'ᰉ' => Ok(Lepcha::LetterNya),
'ᰊ' => Ok(Lepcha::LetterTa),
'ᰋ' => Ok(Lepcha::LetterTha),
'ᰌ' => Ok(Lepcha::LetterDa),
'ᰍ' => Ok(Lepcha::LetterNa),
'ᰎ' => Ok(Lepcha::LetterPa),
'ᰏ' => Ok(Lepcha::LetterPla),
'ᰐ' => Ok(Lepcha::LetterPha),
'ᰑ' => Ok(Lepcha::LetterFa),
'ᰒ' => Ok(Lepcha::LetterFla),
'ᰓ' => Ok(Lepcha::LetterBa),
'ᰔ' => Ok(Lepcha::LetterBla),
'ᰕ' => Ok(Lepcha::LetterMa),
'ᰖ' => Ok(Lepcha::LetterMla),
'ᰗ' => Ok(Lepcha::LetterTsa),
'ᰘ' => Ok(Lepcha::LetterTsha),
'ᰙ' => Ok(Lepcha::LetterDza),
'ᰚ' => Ok(Lepcha::LetterYa),
'ᰛ' => Ok(Lepcha::LetterRa),
'ᰜ' => Ok(Lepcha::LetterLa),
'ᰝ' => Ok(Lepcha::LetterHa),
'ᰞ' => Ok(Lepcha::LetterHla),
'ᰟ' => Ok(Lepcha::LetterVa),
'ᰠ' => Ok(Lepcha::LetterSa),
'ᰡ' => Ok(Lepcha::LetterSha),
'ᰢ' => Ok(Lepcha::LetterWa),
'ᰣ' => Ok(Lepcha::LetterA),
'ᰤ' => Ok(Lepcha::SubjoinedLetterYa),
'ᰥ' => Ok(Lepcha::SubjoinedLetterRa),
'ᰦ' => Ok(Lepcha::VowelSignAa),
'ᰧ' => Ok(Lepcha::VowelSignI),
'ᰨ' => Ok(Lepcha::VowelSignO),
'ᰩ' => Ok(Lepcha::VowelSignOo),
'ᰪ' => Ok(Lepcha::VowelSignU),
'ᰫ' => Ok(Lepcha::VowelSignUu),
'ᰬ' => Ok(Lepcha::VowelSignE),
'ᰭ' => Ok(Lepcha::ConsonantSignK),
'ᰮ' => Ok(Lepcha::ConsonantSignM),
'ᰯ' => Ok(Lepcha::ConsonantSignL),
'ᰰ' => Ok(Lepcha::ConsonantSignN),
'ᰱ' => Ok(Lepcha::ConsonantSignP),
'ᰲ' => Ok(Lepcha::ConsonantSignR),
'ᰳ' => Ok(Lepcha::ConsonantSignT),
'ᰴ' => Ok(Lepcha::ConsonantSignNyinDashDo),
'ᰵ' => Ok(Lepcha::ConsonantSignKang),
'ᰶ' => Ok(Lepcha::SignRan),
'᰷' => Ok(Lepcha::SignNukta),
'᰻' => Ok(Lepcha::PunctuationTaDashRol),
'᰼' => Ok(Lepcha::PunctuationNyetThyoomTaDashRol),
'᰽' => Ok(Lepcha::PunctuationCerDashWa),
'᰾' => Ok(Lepcha::PunctuationTshookCerDashWa),
'᰿' => Ok(Lepcha::PunctuationTshook),
'᱀' => Ok(Lepcha::DigitZero),
'᱁' => Ok(Lepcha::DigitOne),
'᱂' => Ok(Lepcha::DigitTwo),
'᱃' => Ok(Lepcha::DigitThree),
'᱄' => Ok(Lepcha::DigitFour),
'᱅' => Ok(Lepcha::DigitFive),
'᱆' => Ok(Lepcha::DigitSix),
'᱇' => Ok(Lepcha::DigitSeven),
'᱈' => Ok(Lepcha::DigitEight),
'᱉' => Ok(Lepcha::DigitNine),
'ᱍ' => Ok(Lepcha::LetterTta),
'ᱎ' => 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) -> String {
let s = std::format!("Lepcha{:#?}", self);
string_morph::to_sentence_case(&s)
}
}