#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Chakma {
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterAa,
LetterI,
LetterU,
LetterE,
LetterKaa,
LetterKhaa,
LetterGaa,
LetterGhaa,
LetterNgaa,
LetterCaa,
LetterChaa,
LetterJaa,
LetterJhaa,
LetterNyaa,
LetterTtaa,
LetterTthaa,
LetterDdaa,
LetterDdhaa,
LetterNnaa,
LetterTaa,
LetterThaa,
LetterDaa,
LetterDhaa,
LetterNaa,
LetterPaa,
LetterPhaa,
LetterBaa,
LetterBhaa,
LetterMaa,
LetterYyaa,
LetterYaa,
LetterRaa,
LetterLaa,
LetterWaa,
LetterSaa,
LetterHaa,
VowelSignA,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
VowelSignOi,
OMark,
AuMark,
Virama,
Maayyaa,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
SectionMark,
Danda,
DoubleDanda,
QuestionMark,
LetterLhaa,
VowelSignAa,
VowelSignEi,
}
impl Into<char> for Chakma {
fn into(self) -> char {
match self {
Chakma::SignCandrabindu => '𑄀',
Chakma::SignAnusvara => '𑄁',
Chakma::SignVisarga => '𑄂',
Chakma::LetterAa => '𑄃',
Chakma::LetterI => '𑄄',
Chakma::LetterU => '𑄅',
Chakma::LetterE => '𑄆',
Chakma::LetterKaa => '𑄇',
Chakma::LetterKhaa => '𑄈',
Chakma::LetterGaa => '𑄉',
Chakma::LetterGhaa => '𑄊',
Chakma::LetterNgaa => '𑄋',
Chakma::LetterCaa => '𑄌',
Chakma::LetterChaa => '𑄍',
Chakma::LetterJaa => '𑄎',
Chakma::LetterJhaa => '𑄏',
Chakma::LetterNyaa => '𑄐',
Chakma::LetterTtaa => '𑄑',
Chakma::LetterTthaa => '𑄒',
Chakma::LetterDdaa => '𑄓',
Chakma::LetterDdhaa => '𑄔',
Chakma::LetterNnaa => '𑄕',
Chakma::LetterTaa => '𑄖',
Chakma::LetterThaa => '𑄗',
Chakma::LetterDaa => '𑄘',
Chakma::LetterDhaa => '𑄙',
Chakma::LetterNaa => '𑄚',
Chakma::LetterPaa => '𑄛',
Chakma::LetterPhaa => '𑄜',
Chakma::LetterBaa => '𑄝',
Chakma::LetterBhaa => '𑄞',
Chakma::LetterMaa => '𑄟',
Chakma::LetterYyaa => '𑄠',
Chakma::LetterYaa => '𑄡',
Chakma::LetterRaa => '𑄢',
Chakma::LetterLaa => '𑄣',
Chakma::LetterWaa => '𑄤',
Chakma::LetterSaa => '𑄥',
Chakma::LetterHaa => '𑄦',
Chakma::VowelSignA => '𑄧',
Chakma::VowelSignI => '𑄨',
Chakma::VowelSignIi => '𑄩',
Chakma::VowelSignU => '𑄪',
Chakma::VowelSignUu => '𑄫',
Chakma::VowelSignE => '𑄬',
Chakma::VowelSignAi => '𑄭',
Chakma::VowelSignO => '𑄮',
Chakma::VowelSignAu => '𑄯',
Chakma::VowelSignOi => '𑄰',
Chakma::OMark => '𑄱',
Chakma::AuMark => '𑄲',
Chakma::Virama => '𑄳',
Chakma::Maayyaa => '𑄴',
Chakma::DigitZero => '𑄶',
Chakma::DigitOne => '𑄷',
Chakma::DigitTwo => '𑄸',
Chakma::DigitThree => '𑄹',
Chakma::DigitFour => '𑄺',
Chakma::DigitFive => '𑄻',
Chakma::DigitSix => '𑄼',
Chakma::DigitSeven => '𑄽',
Chakma::DigitEight => '𑄾',
Chakma::DigitNine => '𑄿',
Chakma::SectionMark => '𑅀',
Chakma::Danda => '𑅁',
Chakma::DoubleDanda => '𑅂',
Chakma::QuestionMark => '𑅃',
Chakma::LetterLhaa => '𑅄',
Chakma::VowelSignAa => '𑅅',
Chakma::VowelSignEi => '𑅆',
}
}
}
impl std::convert::TryFrom<char> for Chakma {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑄀' => Ok(Chakma::SignCandrabindu),
'𑄁' => Ok(Chakma::SignAnusvara),
'𑄂' => Ok(Chakma::SignVisarga),
'𑄃' => Ok(Chakma::LetterAa),
'𑄄' => Ok(Chakma::LetterI),
'𑄅' => Ok(Chakma::LetterU),
'𑄆' => Ok(Chakma::LetterE),
'𑄇' => Ok(Chakma::LetterKaa),
'𑄈' => Ok(Chakma::LetterKhaa),
'𑄉' => Ok(Chakma::LetterGaa),
'𑄊' => Ok(Chakma::LetterGhaa),
'𑄋' => Ok(Chakma::LetterNgaa),
'𑄌' => Ok(Chakma::LetterCaa),
'𑄍' => Ok(Chakma::LetterChaa),
'𑄎' => Ok(Chakma::LetterJaa),
'𑄏' => Ok(Chakma::LetterJhaa),
'𑄐' => Ok(Chakma::LetterNyaa),
'𑄑' => Ok(Chakma::LetterTtaa),
'𑄒' => Ok(Chakma::LetterTthaa),
'𑄓' => Ok(Chakma::LetterDdaa),
'𑄔' => Ok(Chakma::LetterDdhaa),
'𑄕' => Ok(Chakma::LetterNnaa),
'𑄖' => Ok(Chakma::LetterTaa),
'𑄗' => Ok(Chakma::LetterThaa),
'𑄘' => Ok(Chakma::LetterDaa),
'𑄙' => Ok(Chakma::LetterDhaa),
'𑄚' => Ok(Chakma::LetterNaa),
'𑄛' => Ok(Chakma::LetterPaa),
'𑄜' => Ok(Chakma::LetterPhaa),
'𑄝' => Ok(Chakma::LetterBaa),
'𑄞' => Ok(Chakma::LetterBhaa),
'𑄟' => Ok(Chakma::LetterMaa),
'𑄠' => Ok(Chakma::LetterYyaa),
'𑄡' => Ok(Chakma::LetterYaa),
'𑄢' => Ok(Chakma::LetterRaa),
'𑄣' => Ok(Chakma::LetterLaa),
'𑄤' => Ok(Chakma::LetterWaa),
'𑄥' => Ok(Chakma::LetterSaa),
'𑄦' => Ok(Chakma::LetterHaa),
'𑄧' => Ok(Chakma::VowelSignA),
'𑄨' => Ok(Chakma::VowelSignI),
'𑄩' => Ok(Chakma::VowelSignIi),
'𑄪' => Ok(Chakma::VowelSignU),
'𑄫' => Ok(Chakma::VowelSignUu),
'𑄬' => Ok(Chakma::VowelSignE),
'𑄭' => Ok(Chakma::VowelSignAi),
'𑄮' => Ok(Chakma::VowelSignO),
'𑄯' => Ok(Chakma::VowelSignAu),
'𑄰' => Ok(Chakma::VowelSignOi),
'𑄱' => Ok(Chakma::OMark),
'𑄲' => Ok(Chakma::AuMark),
'𑄳' => Ok(Chakma::Virama),
'𑄴' => Ok(Chakma::Maayyaa),
'𑄶' => Ok(Chakma::DigitZero),
'𑄷' => Ok(Chakma::DigitOne),
'𑄸' => Ok(Chakma::DigitTwo),
'𑄹' => Ok(Chakma::DigitThree),
'𑄺' => Ok(Chakma::DigitFour),
'𑄻' => Ok(Chakma::DigitFive),
'𑄼' => Ok(Chakma::DigitSix),
'𑄽' => Ok(Chakma::DigitSeven),
'𑄾' => Ok(Chakma::DigitEight),
'𑄿' => Ok(Chakma::DigitNine),
'𑅀' => Ok(Chakma::SectionMark),
'𑅁' => Ok(Chakma::Danda),
'𑅂' => Ok(Chakma::DoubleDanda),
'𑅃' => Ok(Chakma::QuestionMark),
'𑅄' => Ok(Chakma::LetterLhaa),
'𑅅' => Ok(Chakma::VowelSignAa),
'𑅆' => Ok(Chakma::VowelSignEi),
_ => Err(()),
}
}
}
impl Into<u32> for Chakma {
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 Chakma {
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 Chakma {
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 Chakma {
pub fn new() -> Self {
Chakma::SignCandrabindu
}
pub fn name(&self) -> String {
let s = std::format!("Chakma{:#?}", self);
string_morph::to_sentence_case(&s)
}
}