#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Adlam {
CapitalLetterAlif,
CapitalLetterDaali,
CapitalLetterLaam,
CapitalLetterMiim,
CapitalLetterBa,
CapitalLetterSinnyiiyhe,
CapitalLetterPe,
CapitalLetterBhe,
CapitalLetterRa,
CapitalLetterE,
CapitalLetterFa,
CapitalLetterI,
CapitalLetterO,
CapitalLetterDha,
CapitalLetterYhe,
CapitalLetterWaw,
CapitalLetterNun,
CapitalLetterKaf,
CapitalLetterYa,
CapitalLetterU,
CapitalLetterJiim,
CapitalLetterChi,
CapitalLetterHa,
CapitalLetterQaaf,
CapitalLetterGa,
CapitalLetterNya,
CapitalLetterTu,
CapitalLetterNha,
CapitalLetterVa,
CapitalLetterKha,
CapitalLetterGbe,
CapitalLetterZal,
CapitalLetterKpo,
CapitalLetterSha,
SmallLetterAlif,
SmallLetterDaali,
SmallLetterLaam,
SmallLetterMiim,
SmallLetterBa,
SmallLetterSinnyiiyhe,
SmallLetterPe,
SmallLetterBhe,
SmallLetterRa,
SmallLetterE,
SmallLetterFa,
SmallLetterI,
SmallLetterO,
SmallLetterDha,
SmallLetterYhe,
SmallLetterWaw,
SmallLetterNun,
SmallLetterKaf,
SmallLetterYa,
SmallLetterU,
SmallLetterJiim,
SmallLetterChi,
SmallLetterHa,
SmallLetterQaaf,
SmallLetterGa,
SmallLetterNya,
SmallLetterTu,
SmallLetterNha,
SmallLetterVa,
SmallLetterKha,
SmallLetterGbe,
SmallLetterZal,
SmallLetterKpo,
SmallLetterSha,
AlifLengthener,
VowelLengthener,
GeminationMark,
Hamza,
ConsonantModifier,
GeminateConsonantModifier,
Nukta,
NasalizationMark,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
InitialExclamationMark,
}
impl Into<char> for Adlam {
fn into(self) -> char {
match self {
Adlam::CapitalLetterAlif => '๐ค',
Adlam::CapitalLetterDaali => '๐ค',
Adlam::CapitalLetterLaam => '๐ค',
Adlam::CapitalLetterMiim => '๐ค',
Adlam::CapitalLetterBa => '๐ค',
Adlam::CapitalLetterSinnyiiyhe => '๐ค
',
Adlam::CapitalLetterPe => '๐ค',
Adlam::CapitalLetterBhe => '๐ค',
Adlam::CapitalLetterRa => '๐ค',
Adlam::CapitalLetterE => '๐ค',
Adlam::CapitalLetterFa => '๐ค',
Adlam::CapitalLetterI => '๐ค',
Adlam::CapitalLetterO => '๐ค',
Adlam::CapitalLetterDha => '๐ค',
Adlam::CapitalLetterYhe => '๐ค',
Adlam::CapitalLetterWaw => '๐ค',
Adlam::CapitalLetterNun => '๐ค',
Adlam::CapitalLetterKaf => '๐ค',
Adlam::CapitalLetterYa => '๐ค',
Adlam::CapitalLetterU => '๐ค',
Adlam::CapitalLetterJiim => '๐ค',
Adlam::CapitalLetterChi => '๐ค',
Adlam::CapitalLetterHa => '๐ค',
Adlam::CapitalLetterQaaf => '๐ค',
Adlam::CapitalLetterGa => '๐ค',
Adlam::CapitalLetterNya => '๐ค',
Adlam::CapitalLetterTu => '๐ค',
Adlam::CapitalLetterNha => '๐ค',
Adlam::CapitalLetterVa => '๐ค',
Adlam::CapitalLetterKha => '๐ค',
Adlam::CapitalLetterGbe => '๐ค',
Adlam::CapitalLetterZal => '๐ค',
Adlam::CapitalLetterKpo => '๐ค ',
Adlam::CapitalLetterSha => '๐คก',
Adlam::SmallLetterAlif => '๐คข',
Adlam::SmallLetterDaali => '๐คฃ',
Adlam::SmallLetterLaam => '๐คค',
Adlam::SmallLetterMiim => '๐คฅ',
Adlam::SmallLetterBa => '๐คฆ',
Adlam::SmallLetterSinnyiiyhe => '๐คง',
Adlam::SmallLetterPe => '๐คจ',
Adlam::SmallLetterBhe => '๐คฉ',
Adlam::SmallLetterRa => '๐คช',
Adlam::SmallLetterE => '๐คซ',
Adlam::SmallLetterFa => '๐คฌ',
Adlam::SmallLetterI => '๐คญ',
Adlam::SmallLetterO => '๐คฎ',
Adlam::SmallLetterDha => '๐คฏ',
Adlam::SmallLetterYhe => '๐คฐ',
Adlam::SmallLetterWaw => '๐คฑ',
Adlam::SmallLetterNun => '๐คฒ',
Adlam::SmallLetterKaf => '๐คณ',
Adlam::SmallLetterYa => '๐คด',
Adlam::SmallLetterU => '๐คต',
Adlam::SmallLetterJiim => '๐คถ',
Adlam::SmallLetterChi => '๐คท',
Adlam::SmallLetterHa => '๐คธ',
Adlam::SmallLetterQaaf => '๐คน',
Adlam::SmallLetterGa => '๐คบ',
Adlam::SmallLetterNya => '๐คป',
Adlam::SmallLetterTu => '๐คผ',
Adlam::SmallLetterNha => '๐คฝ',
Adlam::SmallLetterVa => '๐คพ',
Adlam::SmallLetterKha => '๐คฟ',
Adlam::SmallLetterGbe => '๐ฅ',
Adlam::SmallLetterZal => '๐ฅ',
Adlam::SmallLetterKpo => '๐ฅ',
Adlam::SmallLetterSha => '๐ฅ',
Adlam::AlifLengthener => '๐ฅ',
Adlam::VowelLengthener => '๐ฅ
',
Adlam::GeminationMark => '๐ฅ',
Adlam::Hamza => '๐ฅ',
Adlam::ConsonantModifier => '๐ฅ',
Adlam::GeminateConsonantModifier => '๐ฅ',
Adlam::Nukta => '๐ฅ',
Adlam::NasalizationMark => '๐ฅ',
Adlam::DigitZero => '๐ฅ',
Adlam::DigitOne => '๐ฅ',
Adlam::DigitTwo => '๐ฅ',
Adlam::DigitThree => '๐ฅ',
Adlam::DigitFour => '๐ฅ',
Adlam::DigitFive => '๐ฅ',
Adlam::DigitSix => '๐ฅ',
Adlam::DigitSeven => '๐ฅ',
Adlam::DigitEight => '๐ฅ',
Adlam::DigitNine => '๐ฅ',
Adlam::InitialExclamationMark => '๐ฅ',
}
}
}
impl std::convert::TryFrom<char> for Adlam {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'๐ค' => Ok(Adlam::CapitalLetterAlif),
'๐ค' => Ok(Adlam::CapitalLetterDaali),
'๐ค' => Ok(Adlam::CapitalLetterLaam),
'๐ค' => Ok(Adlam::CapitalLetterMiim),
'๐ค' => Ok(Adlam::CapitalLetterBa),
'๐ค
' => Ok(Adlam::CapitalLetterSinnyiiyhe),
'๐ค' => Ok(Adlam::CapitalLetterPe),
'๐ค' => Ok(Adlam::CapitalLetterBhe),
'๐ค' => Ok(Adlam::CapitalLetterRa),
'๐ค' => Ok(Adlam::CapitalLetterE),
'๐ค' => Ok(Adlam::CapitalLetterFa),
'๐ค' => Ok(Adlam::CapitalLetterI),
'๐ค' => Ok(Adlam::CapitalLetterO),
'๐ค' => Ok(Adlam::CapitalLetterDha),
'๐ค' => Ok(Adlam::CapitalLetterYhe),
'๐ค' => Ok(Adlam::CapitalLetterWaw),
'๐ค' => Ok(Adlam::CapitalLetterNun),
'๐ค' => Ok(Adlam::CapitalLetterKaf),
'๐ค' => Ok(Adlam::CapitalLetterYa),
'๐ค' => Ok(Adlam::CapitalLetterU),
'๐ค' => Ok(Adlam::CapitalLetterJiim),
'๐ค' => Ok(Adlam::CapitalLetterChi),
'๐ค' => Ok(Adlam::CapitalLetterHa),
'๐ค' => Ok(Adlam::CapitalLetterQaaf),
'๐ค' => Ok(Adlam::CapitalLetterGa),
'๐ค' => Ok(Adlam::CapitalLetterNya),
'๐ค' => Ok(Adlam::CapitalLetterTu),
'๐ค' => Ok(Adlam::CapitalLetterNha),
'๐ค' => Ok(Adlam::CapitalLetterVa),
'๐ค' => Ok(Adlam::CapitalLetterKha),
'๐ค' => Ok(Adlam::CapitalLetterGbe),
'๐ค' => Ok(Adlam::CapitalLetterZal),
'๐ค ' => Ok(Adlam::CapitalLetterKpo),
'๐คก' => Ok(Adlam::CapitalLetterSha),
'๐คข' => Ok(Adlam::SmallLetterAlif),
'๐คฃ' => Ok(Adlam::SmallLetterDaali),
'๐คค' => Ok(Adlam::SmallLetterLaam),
'๐คฅ' => Ok(Adlam::SmallLetterMiim),
'๐คฆ' => Ok(Adlam::SmallLetterBa),
'๐คง' => Ok(Adlam::SmallLetterSinnyiiyhe),
'๐คจ' => Ok(Adlam::SmallLetterPe),
'๐คฉ' => Ok(Adlam::SmallLetterBhe),
'๐คช' => Ok(Adlam::SmallLetterRa),
'๐คซ' => Ok(Adlam::SmallLetterE),
'๐คฌ' => Ok(Adlam::SmallLetterFa),
'๐คญ' => Ok(Adlam::SmallLetterI),
'๐คฎ' => Ok(Adlam::SmallLetterO),
'๐คฏ' => Ok(Adlam::SmallLetterDha),
'๐คฐ' => Ok(Adlam::SmallLetterYhe),
'๐คฑ' => Ok(Adlam::SmallLetterWaw),
'๐คฒ' => Ok(Adlam::SmallLetterNun),
'๐คณ' => Ok(Adlam::SmallLetterKaf),
'๐คด' => Ok(Adlam::SmallLetterYa),
'๐คต' => Ok(Adlam::SmallLetterU),
'๐คถ' => Ok(Adlam::SmallLetterJiim),
'๐คท' => Ok(Adlam::SmallLetterChi),
'๐คธ' => Ok(Adlam::SmallLetterHa),
'๐คน' => Ok(Adlam::SmallLetterQaaf),
'๐คบ' => Ok(Adlam::SmallLetterGa),
'๐คป' => Ok(Adlam::SmallLetterNya),
'๐คผ' => Ok(Adlam::SmallLetterTu),
'๐คฝ' => Ok(Adlam::SmallLetterNha),
'๐คพ' => Ok(Adlam::SmallLetterVa),
'๐คฟ' => Ok(Adlam::SmallLetterKha),
'๐ฅ' => Ok(Adlam::SmallLetterGbe),
'๐ฅ' => Ok(Adlam::SmallLetterZal),
'๐ฅ' => Ok(Adlam::SmallLetterKpo),
'๐ฅ' => Ok(Adlam::SmallLetterSha),
'๐ฅ' => Ok(Adlam::AlifLengthener),
'๐ฅ
' => Ok(Adlam::VowelLengthener),
'๐ฅ' => Ok(Adlam::GeminationMark),
'๐ฅ' => Ok(Adlam::Hamza),
'๐ฅ' => Ok(Adlam::ConsonantModifier),
'๐ฅ' => Ok(Adlam::GeminateConsonantModifier),
'๐ฅ' => Ok(Adlam::Nukta),
'๐ฅ' => Ok(Adlam::NasalizationMark),
'๐ฅ' => Ok(Adlam::DigitZero),
'๐ฅ' => Ok(Adlam::DigitOne),
'๐ฅ' => Ok(Adlam::DigitTwo),
'๐ฅ' => Ok(Adlam::DigitThree),
'๐ฅ' => Ok(Adlam::DigitFour),
'๐ฅ' => Ok(Adlam::DigitFive),
'๐ฅ' => Ok(Adlam::DigitSix),
'๐ฅ' => Ok(Adlam::DigitSeven),
'๐ฅ' => Ok(Adlam::DigitEight),
'๐ฅ' => Ok(Adlam::DigitNine),
'๐ฅ' => Ok(Adlam::InitialExclamationMark),
_ => Err(()),
}
}
}
impl Into<u32> for Adlam {
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 Adlam {
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 Adlam {
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 Adlam {
pub fn new() -> Self {
Adlam::CapitalLetterAlif
}
pub fn name(&self) -> String {
let s = std::format!("Adlam{:#?}", self);
string_morph::to_sentence_case(&s)
}
}