#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Kaithi {
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterE,
LetterAi,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDddha,
LetterDdha,
LetterRha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignVirama,
SignNukta,
AbbreviationSign,
EnumerationSign,
NumberSign,
SectionMark,
DoubleSectionMark,
Danda,
DoubleDanda,
NumberSignAbove,
}
impl Into<char> for Kaithi {
fn into(self) -> char {
match self {
Kaithi::SignCandrabindu => '𑂀',
Kaithi::SignAnusvara => '𑂁',
Kaithi::SignVisarga => '𑂂',
Kaithi::LetterA => '𑂃',
Kaithi::LetterAa => '𑂄',
Kaithi::LetterI => '𑂅',
Kaithi::LetterIi => '𑂆',
Kaithi::LetterU => '𑂇',
Kaithi::LetterUu => '𑂈',
Kaithi::LetterE => '𑂉',
Kaithi::LetterAi => '𑂊',
Kaithi::LetterO => '𑂋',
Kaithi::LetterAu => '𑂌',
Kaithi::LetterKa => '𑂍',
Kaithi::LetterKha => '𑂎',
Kaithi::LetterGa => '𑂏',
Kaithi::LetterGha => '𑂐',
Kaithi::LetterNga => '𑂑',
Kaithi::LetterCa => '𑂒',
Kaithi::LetterCha => '𑂓',
Kaithi::LetterJa => '𑂔',
Kaithi::LetterJha => '𑂕',
Kaithi::LetterNya => '𑂖',
Kaithi::LetterTta => '𑂗',
Kaithi::LetterTtha => '𑂘',
Kaithi::LetterDda => '𑂙',
Kaithi::LetterDddha => '𑂚',
Kaithi::LetterDdha => '𑂛',
Kaithi::LetterRha => '𑂜',
Kaithi::LetterNna => '𑂝',
Kaithi::LetterTa => '𑂞',
Kaithi::LetterTha => '𑂟',
Kaithi::LetterDa => '𑂠',
Kaithi::LetterDha => '𑂡',
Kaithi::LetterNa => '𑂢',
Kaithi::LetterPa => '𑂣',
Kaithi::LetterPha => '𑂤',
Kaithi::LetterBa => '𑂥',
Kaithi::LetterBha => '𑂦',
Kaithi::LetterMa => '𑂧',
Kaithi::LetterYa => '𑂨',
Kaithi::LetterRa => '𑂩',
Kaithi::LetterLa => '𑂪',
Kaithi::LetterVa => '𑂫',
Kaithi::LetterSha => '𑂬',
Kaithi::LetterSsa => '𑂭',
Kaithi::LetterSa => '𑂮',
Kaithi::LetterHa => '𑂯',
Kaithi::VowelSignAa => '𑂰',
Kaithi::VowelSignI => '𑂱',
Kaithi::VowelSignIi => '𑂲',
Kaithi::VowelSignU => '𑂳',
Kaithi::VowelSignUu => '𑂴',
Kaithi::VowelSignE => '𑂵',
Kaithi::VowelSignAi => '𑂶',
Kaithi::VowelSignO => '𑂷',
Kaithi::VowelSignAu => '𑂸',
Kaithi::SignVirama => '𑂹',
Kaithi::SignNukta => '𑂺',
Kaithi::AbbreviationSign => '𑂻',
Kaithi::EnumerationSign => '𑂼',
Kaithi::NumberSign => '',
Kaithi::SectionMark => '𑂾',
Kaithi::DoubleSectionMark => '𑂿',
Kaithi::Danda => '𑃀',
Kaithi::DoubleDanda => '𑃁',
Kaithi::NumberSignAbove => '',
}
}
}
impl std::convert::TryFrom<char> for Kaithi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑂀' => Ok(Kaithi::SignCandrabindu),
'𑂁' => Ok(Kaithi::SignAnusvara),
'𑂂' => Ok(Kaithi::SignVisarga),
'𑂃' => Ok(Kaithi::LetterA),
'𑂄' => Ok(Kaithi::LetterAa),
'𑂅' => Ok(Kaithi::LetterI),
'𑂆' => Ok(Kaithi::LetterIi),
'𑂇' => Ok(Kaithi::LetterU),
'𑂈' => Ok(Kaithi::LetterUu),
'𑂉' => Ok(Kaithi::LetterE),
'𑂊' => Ok(Kaithi::LetterAi),
'𑂋' => Ok(Kaithi::LetterO),
'𑂌' => Ok(Kaithi::LetterAu),
'𑂍' => Ok(Kaithi::LetterKa),
'𑂎' => Ok(Kaithi::LetterKha),
'𑂏' => Ok(Kaithi::LetterGa),
'𑂐' => Ok(Kaithi::LetterGha),
'𑂑' => Ok(Kaithi::LetterNga),
'𑂒' => Ok(Kaithi::LetterCa),
'𑂓' => Ok(Kaithi::LetterCha),
'𑂔' => Ok(Kaithi::LetterJa),
'𑂕' => Ok(Kaithi::LetterJha),
'𑂖' => Ok(Kaithi::LetterNya),
'𑂗' => Ok(Kaithi::LetterTta),
'𑂘' => Ok(Kaithi::LetterTtha),
'𑂙' => Ok(Kaithi::LetterDda),
'𑂚' => Ok(Kaithi::LetterDddha),
'𑂛' => Ok(Kaithi::LetterDdha),
'𑂜' => Ok(Kaithi::LetterRha),
'𑂝' => Ok(Kaithi::LetterNna),
'𑂞' => Ok(Kaithi::LetterTa),
'𑂟' => Ok(Kaithi::LetterTha),
'𑂠' => Ok(Kaithi::LetterDa),
'𑂡' => Ok(Kaithi::LetterDha),
'𑂢' => Ok(Kaithi::LetterNa),
'𑂣' => Ok(Kaithi::LetterPa),
'𑂤' => Ok(Kaithi::LetterPha),
'𑂥' => Ok(Kaithi::LetterBa),
'𑂦' => Ok(Kaithi::LetterBha),
'𑂧' => Ok(Kaithi::LetterMa),
'𑂨' => Ok(Kaithi::LetterYa),
'𑂩' => Ok(Kaithi::LetterRa),
'𑂪' => Ok(Kaithi::LetterLa),
'𑂫' => Ok(Kaithi::LetterVa),
'𑂬' => Ok(Kaithi::LetterSha),
'𑂭' => Ok(Kaithi::LetterSsa),
'𑂮' => Ok(Kaithi::LetterSa),
'𑂯' => Ok(Kaithi::LetterHa),
'𑂰' => Ok(Kaithi::VowelSignAa),
'𑂱' => Ok(Kaithi::VowelSignI),
'𑂲' => Ok(Kaithi::VowelSignIi),
'𑂳' => Ok(Kaithi::VowelSignU),
'𑂴' => Ok(Kaithi::VowelSignUu),
'𑂵' => Ok(Kaithi::VowelSignE),
'𑂶' => Ok(Kaithi::VowelSignAi),
'𑂷' => Ok(Kaithi::VowelSignO),
'𑂸' => Ok(Kaithi::VowelSignAu),
'𑂹' => Ok(Kaithi::SignVirama),
'𑂺' => Ok(Kaithi::SignNukta),
'𑂻' => Ok(Kaithi::AbbreviationSign),
'𑂼' => Ok(Kaithi::EnumerationSign),
'' => Ok(Kaithi::NumberSign),
'𑂾' => Ok(Kaithi::SectionMark),
'𑂿' => Ok(Kaithi::DoubleSectionMark),
'𑃀' => Ok(Kaithi::Danda),
'𑃁' => Ok(Kaithi::DoubleDanda),
'' => Ok(Kaithi::NumberSignAbove),
_ => Err(()),
}
}
}
impl Into<u32> for Kaithi {
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 Kaithi {
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 Kaithi {
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 Kaithi {
pub fn new() -> Self {
Kaithi::SignCandrabindu
}
pub fn name(&self) -> String {
let s = std::format!("Kaithi{:#?}", self);
string_morph::to_sentence_case(&s)
}
}