#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Brahmi {
SignCandrabindu,
SignAnusvara,
SignVisarga,
SignJihvamuliya,
SignUpadhmaniya,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicRr,
LetterVocalicL,
LetterVocalicLl,
LetterE,
LetterAi,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterLla,
LetterOldTamilLlla,
LetterOldTamilRra,
LetterOldTamilNnna,
VowelSignAa,
VowelSignBhattiproluAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignVocalicL,
VowelSignVocalicLl,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
Virama,
Danda,
DoubleDanda,
PunctuationDot,
PunctuationDoubleDot,
PunctuationLine,
PunctuationCrescentBar,
PunctuationLotus,
NumberOne,
NumberTwo,
NumberThree,
NumberFour,
NumberFive,
NumberSix,
NumberSeven,
NumberEight,
NumberNine,
NumberTen,
NumberTwenty,
NumberThirty,
NumberForty,
NumberFifty,
NumberSixty,
NumberSeventy,
NumberEighty,
NumberNinety,
NumberOneHundred,
NumberOneThousand,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Brahmi {
fn into(self) -> char {
match self {
Brahmi::SignCandrabindu => '𑀀',
Brahmi::SignAnusvara => '𑀁',
Brahmi::SignVisarga => '𑀂',
Brahmi::SignJihvamuliya => '𑀃',
Brahmi::SignUpadhmaniya => '𑀄',
Brahmi::LetterA => '𑀅',
Brahmi::LetterAa => '𑀆',
Brahmi::LetterI => '𑀇',
Brahmi::LetterIi => '𑀈',
Brahmi::LetterU => '𑀉',
Brahmi::LetterUu => '𑀊',
Brahmi::LetterVocalicR => '𑀋',
Brahmi::LetterVocalicRr => '𑀌',
Brahmi::LetterVocalicL => '𑀍',
Brahmi::LetterVocalicLl => '𑀎',
Brahmi::LetterE => '𑀏',
Brahmi::LetterAi => '𑀐',
Brahmi::LetterO => '𑀑',
Brahmi::LetterAu => '𑀒',
Brahmi::LetterKa => '𑀓',
Brahmi::LetterKha => '𑀔',
Brahmi::LetterGa => '𑀕',
Brahmi::LetterGha => '𑀖',
Brahmi::LetterNga => '𑀗',
Brahmi::LetterCa => '𑀘',
Brahmi::LetterCha => '𑀙',
Brahmi::LetterJa => '𑀚',
Brahmi::LetterJha => '𑀛',
Brahmi::LetterNya => '𑀜',
Brahmi::LetterTta => '𑀝',
Brahmi::LetterTtha => '𑀞',
Brahmi::LetterDda => '𑀟',
Brahmi::LetterDdha => '𑀠',
Brahmi::LetterNna => '𑀡',
Brahmi::LetterTa => '𑀢',
Brahmi::LetterTha => '𑀣',
Brahmi::LetterDa => '𑀤',
Brahmi::LetterDha => '𑀥',
Brahmi::LetterNa => '𑀦',
Brahmi::LetterPa => '𑀧',
Brahmi::LetterPha => '𑀨',
Brahmi::LetterBa => '𑀩',
Brahmi::LetterBha => '𑀪',
Brahmi::LetterMa => '𑀫',
Brahmi::LetterYa => '𑀬',
Brahmi::LetterRa => '𑀭',
Brahmi::LetterLa => '𑀮',
Brahmi::LetterVa => '𑀯',
Brahmi::LetterSha => '𑀰',
Brahmi::LetterSsa => '𑀱',
Brahmi::LetterSa => '𑀲',
Brahmi::LetterHa => '𑀳',
Brahmi::LetterLla => '𑀴',
Brahmi::LetterOldTamilLlla => '𑀵',
Brahmi::LetterOldTamilRra => '𑀶',
Brahmi::LetterOldTamilNnna => '𑀷',
Brahmi::VowelSignAa => '𑀸',
Brahmi::VowelSignBhattiproluAa => '𑀹',
Brahmi::VowelSignI => '𑀺',
Brahmi::VowelSignIi => '𑀻',
Brahmi::VowelSignU => '𑀼',
Brahmi::VowelSignUu => '𑀽',
Brahmi::VowelSignVocalicR => '𑀾',
Brahmi::VowelSignVocalicRr => '𑀿',
Brahmi::VowelSignVocalicL => '𑁀',
Brahmi::VowelSignVocalicLl => '𑁁',
Brahmi::VowelSignE => '𑁂',
Brahmi::VowelSignAi => '𑁃',
Brahmi::VowelSignO => '𑁄',
Brahmi::VowelSignAu => '𑁅',
Brahmi::Virama => '𑁆',
Brahmi::Danda => '𑁇',
Brahmi::DoubleDanda => '𑁈',
Brahmi::PunctuationDot => '𑁉',
Brahmi::PunctuationDoubleDot => '𑁊',
Brahmi::PunctuationLine => '𑁋',
Brahmi::PunctuationCrescentBar => '𑁌',
Brahmi::PunctuationLotus => '𑁍',
Brahmi::NumberOne => '𑁒',
Brahmi::NumberTwo => '𑁓',
Brahmi::NumberThree => '𑁔',
Brahmi::NumberFour => '𑁕',
Brahmi::NumberFive => '𑁖',
Brahmi::NumberSix => '𑁗',
Brahmi::NumberSeven => '𑁘',
Brahmi::NumberEight => '𑁙',
Brahmi::NumberNine => '𑁚',
Brahmi::NumberTen => '𑁛',
Brahmi::NumberTwenty => '𑁜',
Brahmi::NumberThirty => '𑁝',
Brahmi::NumberForty => '𑁞',
Brahmi::NumberFifty => '𑁟',
Brahmi::NumberSixty => '𑁠',
Brahmi::NumberSeventy => '𑁡',
Brahmi::NumberEighty => '𑁢',
Brahmi::NumberNinety => '𑁣',
Brahmi::NumberOneHundred => '𑁤',
Brahmi::NumberOneThousand => '𑁥',
Brahmi::DigitZero => '𑁦',
Brahmi::DigitOne => '𑁧',
Brahmi::DigitTwo => '𑁨',
Brahmi::DigitThree => '𑁩',
Brahmi::DigitFour => '𑁪',
Brahmi::DigitFive => '𑁫',
Brahmi::DigitSix => '𑁬',
Brahmi::DigitSeven => '𑁭',
Brahmi::DigitEight => '𑁮',
Brahmi::DigitNine => '𑁯',
}
}
}
impl std::convert::TryFrom<char> for Brahmi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑀀' => Ok(Brahmi::SignCandrabindu),
'𑀁' => Ok(Brahmi::SignAnusvara),
'𑀂' => Ok(Brahmi::SignVisarga),
'𑀃' => Ok(Brahmi::SignJihvamuliya),
'𑀄' => Ok(Brahmi::SignUpadhmaniya),
'𑀅' => Ok(Brahmi::LetterA),
'𑀆' => Ok(Brahmi::LetterAa),
'𑀇' => Ok(Brahmi::LetterI),
'𑀈' => Ok(Brahmi::LetterIi),
'𑀉' => Ok(Brahmi::LetterU),
'𑀊' => Ok(Brahmi::LetterUu),
'𑀋' => Ok(Brahmi::LetterVocalicR),
'𑀌' => Ok(Brahmi::LetterVocalicRr),
'𑀍' => Ok(Brahmi::LetterVocalicL),
'𑀎' => Ok(Brahmi::LetterVocalicLl),
'𑀏' => Ok(Brahmi::LetterE),
'𑀐' => Ok(Brahmi::LetterAi),
'𑀑' => Ok(Brahmi::LetterO),
'𑀒' => Ok(Brahmi::LetterAu),
'𑀓' => Ok(Brahmi::LetterKa),
'𑀔' => Ok(Brahmi::LetterKha),
'𑀕' => Ok(Brahmi::LetterGa),
'𑀖' => Ok(Brahmi::LetterGha),
'𑀗' => Ok(Brahmi::LetterNga),
'𑀘' => Ok(Brahmi::LetterCa),
'𑀙' => Ok(Brahmi::LetterCha),
'𑀚' => Ok(Brahmi::LetterJa),
'𑀛' => Ok(Brahmi::LetterJha),
'𑀜' => Ok(Brahmi::LetterNya),
'𑀝' => Ok(Brahmi::LetterTta),
'𑀞' => Ok(Brahmi::LetterTtha),
'𑀟' => Ok(Brahmi::LetterDda),
'𑀠' => Ok(Brahmi::LetterDdha),
'𑀡' => Ok(Brahmi::LetterNna),
'𑀢' => Ok(Brahmi::LetterTa),
'𑀣' => Ok(Brahmi::LetterTha),
'𑀤' => Ok(Brahmi::LetterDa),
'𑀥' => Ok(Brahmi::LetterDha),
'𑀦' => Ok(Brahmi::LetterNa),
'𑀧' => Ok(Brahmi::LetterPa),
'𑀨' => Ok(Brahmi::LetterPha),
'𑀩' => Ok(Brahmi::LetterBa),
'𑀪' => Ok(Brahmi::LetterBha),
'𑀫' => Ok(Brahmi::LetterMa),
'𑀬' => Ok(Brahmi::LetterYa),
'𑀭' => Ok(Brahmi::LetterRa),
'𑀮' => Ok(Brahmi::LetterLa),
'𑀯' => Ok(Brahmi::LetterVa),
'𑀰' => Ok(Brahmi::LetterSha),
'𑀱' => Ok(Brahmi::LetterSsa),
'𑀲' => Ok(Brahmi::LetterSa),
'𑀳' => Ok(Brahmi::LetterHa),
'𑀴' => Ok(Brahmi::LetterLla),
'𑀵' => Ok(Brahmi::LetterOldTamilLlla),
'𑀶' => Ok(Brahmi::LetterOldTamilRra),
'𑀷' => Ok(Brahmi::LetterOldTamilNnna),
'𑀸' => Ok(Brahmi::VowelSignAa),
'𑀹' => Ok(Brahmi::VowelSignBhattiproluAa),
'𑀺' => Ok(Brahmi::VowelSignI),
'𑀻' => Ok(Brahmi::VowelSignIi),
'𑀼' => Ok(Brahmi::VowelSignU),
'𑀽' => Ok(Brahmi::VowelSignUu),
'𑀾' => Ok(Brahmi::VowelSignVocalicR),
'𑀿' => Ok(Brahmi::VowelSignVocalicRr),
'𑁀' => Ok(Brahmi::VowelSignVocalicL),
'𑁁' => Ok(Brahmi::VowelSignVocalicLl),
'𑁂' => Ok(Brahmi::VowelSignE),
'𑁃' => Ok(Brahmi::VowelSignAi),
'𑁄' => Ok(Brahmi::VowelSignO),
'𑁅' => Ok(Brahmi::VowelSignAu),
'𑁆' => Ok(Brahmi::Virama),
'𑁇' => Ok(Brahmi::Danda),
'𑁈' => Ok(Brahmi::DoubleDanda),
'𑁉' => Ok(Brahmi::PunctuationDot),
'𑁊' => Ok(Brahmi::PunctuationDoubleDot),
'𑁋' => Ok(Brahmi::PunctuationLine),
'𑁌' => Ok(Brahmi::PunctuationCrescentBar),
'𑁍' => Ok(Brahmi::PunctuationLotus),
'𑁒' => Ok(Brahmi::NumberOne),
'𑁓' => Ok(Brahmi::NumberTwo),
'𑁔' => Ok(Brahmi::NumberThree),
'𑁕' => Ok(Brahmi::NumberFour),
'𑁖' => Ok(Brahmi::NumberFive),
'𑁗' => Ok(Brahmi::NumberSix),
'𑁘' => Ok(Brahmi::NumberSeven),
'𑁙' => Ok(Brahmi::NumberEight),
'𑁚' => Ok(Brahmi::NumberNine),
'𑁛' => Ok(Brahmi::NumberTen),
'𑁜' => Ok(Brahmi::NumberTwenty),
'𑁝' => Ok(Brahmi::NumberThirty),
'𑁞' => Ok(Brahmi::NumberForty),
'𑁟' => Ok(Brahmi::NumberFifty),
'𑁠' => Ok(Brahmi::NumberSixty),
'𑁡' => Ok(Brahmi::NumberSeventy),
'𑁢' => Ok(Brahmi::NumberEighty),
'𑁣' => Ok(Brahmi::NumberNinety),
'𑁤' => Ok(Brahmi::NumberOneHundred),
'𑁥' => Ok(Brahmi::NumberOneThousand),
'𑁦' => Ok(Brahmi::DigitZero),
'𑁧' => Ok(Brahmi::DigitOne),
'𑁨' => Ok(Brahmi::DigitTwo),
'𑁩' => Ok(Brahmi::DigitThree),
'𑁪' => Ok(Brahmi::DigitFour),
'𑁫' => Ok(Brahmi::DigitFive),
'𑁬' => Ok(Brahmi::DigitSix),
'𑁭' => Ok(Brahmi::DigitSeven),
'𑁮' => Ok(Brahmi::DigitEight),
'𑁯' => Ok(Brahmi::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Brahmi {
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 Brahmi {
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 Brahmi {
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 Brahmi {
pub fn new() -> Self {
Brahmi::SignCandrabindu
}
pub fn name(&self) -> String {
let s = std::format!("Brahmi{:#?}", self);
string_morph::to_sentence_case(&s)
}
}