#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Soyombo {
LetterA,
VowelSignI,
VowelSignUe,
VowelSignU,
VowelSignE,
VowelSignO,
VowelSignOe,
VowelSignAi,
VowelSignAu,
VowelSignVocalicR,
VowelSignVocalicL,
VowelLengthMark,
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,
LetterTsa,
LetterTsha,
LetterDza,
LetterZha,
LetterZa,
LetterDashA,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterKssa,
SignJihvamuliya,
SignUpadhmaniya,
ClusterDashInitialLetterRa,
ClusterDashInitialLetterLa,
ClusterDashInitialLetterSha,
ClusterDashInitialLetterSa,
FinalConsonantSignG,
FinalConsonantSignK,
FinalConsonantSignNg,
FinalConsonantSignD,
FinalConsonantSignN,
FinalConsonantSignB,
FinalConsonantSignM,
FinalConsonantSignR,
FinalConsonantSignL,
FinalConsonantSignSh,
FinalConsonantSignS,
FinalConsonantSignDashA,
SignAnusvara,
SignVisarga,
GeminationMark,
Subjoiner,
MarkTsheg,
MarkShad,
MarkDoubleShad,
MarkPluta,
HeadMarkWithMoonAndSunAndTripleFlame,
HeadMarkWithMoonAndSunAndFlame,
HeadMarkWithMoonAndSun,
TerminalMarkDash1,
TerminalMarkDash2,
}
impl Into<char> for Soyombo {
fn into(self) -> char {
match self {
Soyombo::LetterA => '𑩐',
Soyombo::VowelSignI => '𑩑',
Soyombo::VowelSignUe => '𑩒',
Soyombo::VowelSignU => '𑩓',
Soyombo::VowelSignE => '𑩔',
Soyombo::VowelSignO => '𑩕',
Soyombo::VowelSignOe => '𑩖',
Soyombo::VowelSignAi => '𑩗',
Soyombo::VowelSignAu => '𑩘',
Soyombo::VowelSignVocalicR => '𑩙',
Soyombo::VowelSignVocalicL => '𑩚',
Soyombo::VowelLengthMark => '𑩛',
Soyombo::LetterKa => '𑩜',
Soyombo::LetterKha => '𑩝',
Soyombo::LetterGa => '𑩞',
Soyombo::LetterGha => '𑩟',
Soyombo::LetterNga => '𑩠',
Soyombo::LetterCa => '𑩡',
Soyombo::LetterCha => '𑩢',
Soyombo::LetterJa => '𑩣',
Soyombo::LetterJha => '𑩤',
Soyombo::LetterNya => '𑩥',
Soyombo::LetterTta => '𑩦',
Soyombo::LetterTtha => '𑩧',
Soyombo::LetterDda => '𑩨',
Soyombo::LetterDdha => '𑩩',
Soyombo::LetterNna => '𑩪',
Soyombo::LetterTa => '𑩫',
Soyombo::LetterTha => '𑩬',
Soyombo::LetterDa => '𑩭',
Soyombo::LetterDha => '𑩮',
Soyombo::LetterNa => '𑩯',
Soyombo::LetterPa => '𑩰',
Soyombo::LetterPha => '𑩱',
Soyombo::LetterBa => '𑩲',
Soyombo::LetterBha => '𑩳',
Soyombo::LetterMa => '𑩴',
Soyombo::LetterTsa => '𑩵',
Soyombo::LetterTsha => '𑩶',
Soyombo::LetterDza => '𑩷',
Soyombo::LetterZha => '𑩸',
Soyombo::LetterZa => '𑩹',
Soyombo::LetterDashA => '𑩺',
Soyombo::LetterYa => '𑩻',
Soyombo::LetterRa => '𑩼',
Soyombo::LetterLa => '𑩽',
Soyombo::LetterVa => '𑩾',
Soyombo::LetterSha => '𑩿',
Soyombo::LetterSsa => '𑪀',
Soyombo::LetterSa => '𑪁',
Soyombo::LetterHa => '𑪂',
Soyombo::LetterKssa => '𑪃',
Soyombo::SignJihvamuliya => '𑪄',
Soyombo::SignUpadhmaniya => '𑪅',
Soyombo::ClusterDashInitialLetterRa => '𑪆',
Soyombo::ClusterDashInitialLetterLa => '𑪇',
Soyombo::ClusterDashInitialLetterSha => '𑪈',
Soyombo::ClusterDashInitialLetterSa => '𑪉',
Soyombo::FinalConsonantSignG => '𑪊',
Soyombo::FinalConsonantSignK => '𑪋',
Soyombo::FinalConsonantSignNg => '𑪌',
Soyombo::FinalConsonantSignD => '𑪍',
Soyombo::FinalConsonantSignN => '𑪎',
Soyombo::FinalConsonantSignB => '𑪏',
Soyombo::FinalConsonantSignM => '𑪐',
Soyombo::FinalConsonantSignR => '𑪑',
Soyombo::FinalConsonantSignL => '𑪒',
Soyombo::FinalConsonantSignSh => '𑪓',
Soyombo::FinalConsonantSignS => '𑪔',
Soyombo::FinalConsonantSignDashA => '𑪕',
Soyombo::SignAnusvara => '𑪖',
Soyombo::SignVisarga => '𑪗',
Soyombo::GeminationMark => '𑪘',
Soyombo::Subjoiner => '𑪙',
Soyombo::MarkTsheg => '𑪚',
Soyombo::MarkShad => '𑪛',
Soyombo::MarkDoubleShad => '𑪜',
Soyombo::MarkPluta => '𑪝',
Soyombo::HeadMarkWithMoonAndSunAndTripleFlame => '𑪞',
Soyombo::HeadMarkWithMoonAndSunAndFlame => '𑪟',
Soyombo::HeadMarkWithMoonAndSun => '𑪠',
Soyombo::TerminalMarkDash1 => '𑪡',
Soyombo::TerminalMarkDash2 => '𑪢',
}
}
}
impl std::convert::TryFrom<char> for Soyombo {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑩐' => Ok(Soyombo::LetterA),
'𑩑' => Ok(Soyombo::VowelSignI),
'𑩒' => Ok(Soyombo::VowelSignUe),
'𑩓' => Ok(Soyombo::VowelSignU),
'𑩔' => Ok(Soyombo::VowelSignE),
'𑩕' => Ok(Soyombo::VowelSignO),
'𑩖' => Ok(Soyombo::VowelSignOe),
'𑩗' => Ok(Soyombo::VowelSignAi),
'𑩘' => Ok(Soyombo::VowelSignAu),
'𑩙' => Ok(Soyombo::VowelSignVocalicR),
'𑩚' => Ok(Soyombo::VowelSignVocalicL),
'𑩛' => Ok(Soyombo::VowelLengthMark),
'𑩜' => Ok(Soyombo::LetterKa),
'𑩝' => Ok(Soyombo::LetterKha),
'𑩞' => Ok(Soyombo::LetterGa),
'𑩟' => Ok(Soyombo::LetterGha),
'𑩠' => Ok(Soyombo::LetterNga),
'𑩡' => Ok(Soyombo::LetterCa),
'𑩢' => Ok(Soyombo::LetterCha),
'𑩣' => Ok(Soyombo::LetterJa),
'𑩤' => Ok(Soyombo::LetterJha),
'𑩥' => Ok(Soyombo::LetterNya),
'𑩦' => Ok(Soyombo::LetterTta),
'𑩧' => Ok(Soyombo::LetterTtha),
'𑩨' => Ok(Soyombo::LetterDda),
'𑩩' => Ok(Soyombo::LetterDdha),
'𑩪' => Ok(Soyombo::LetterNna),
'𑩫' => Ok(Soyombo::LetterTa),
'𑩬' => Ok(Soyombo::LetterTha),
'𑩭' => Ok(Soyombo::LetterDa),
'𑩮' => Ok(Soyombo::LetterDha),
'𑩯' => Ok(Soyombo::LetterNa),
'𑩰' => Ok(Soyombo::LetterPa),
'𑩱' => Ok(Soyombo::LetterPha),
'𑩲' => Ok(Soyombo::LetterBa),
'𑩳' => Ok(Soyombo::LetterBha),
'𑩴' => Ok(Soyombo::LetterMa),
'𑩵' => Ok(Soyombo::LetterTsa),
'𑩶' => Ok(Soyombo::LetterTsha),
'𑩷' => Ok(Soyombo::LetterDza),
'𑩸' => Ok(Soyombo::LetterZha),
'𑩹' => Ok(Soyombo::LetterZa),
'𑩺' => Ok(Soyombo::LetterDashA),
'𑩻' => Ok(Soyombo::LetterYa),
'𑩼' => Ok(Soyombo::LetterRa),
'𑩽' => Ok(Soyombo::LetterLa),
'𑩾' => Ok(Soyombo::LetterVa),
'𑩿' => Ok(Soyombo::LetterSha),
'𑪀' => Ok(Soyombo::LetterSsa),
'𑪁' => Ok(Soyombo::LetterSa),
'𑪂' => Ok(Soyombo::LetterHa),
'𑪃' => Ok(Soyombo::LetterKssa),
'𑪄' => Ok(Soyombo::SignJihvamuliya),
'𑪅' => Ok(Soyombo::SignUpadhmaniya),
'𑪆' => Ok(Soyombo::ClusterDashInitialLetterRa),
'𑪇' => Ok(Soyombo::ClusterDashInitialLetterLa),
'𑪈' => Ok(Soyombo::ClusterDashInitialLetterSha),
'𑪉' => Ok(Soyombo::ClusterDashInitialLetterSa),
'𑪊' => Ok(Soyombo::FinalConsonantSignG),
'𑪋' => Ok(Soyombo::FinalConsonantSignK),
'𑪌' => Ok(Soyombo::FinalConsonantSignNg),
'𑪍' => Ok(Soyombo::FinalConsonantSignD),
'𑪎' => Ok(Soyombo::FinalConsonantSignN),
'𑪏' => Ok(Soyombo::FinalConsonantSignB),
'𑪐' => Ok(Soyombo::FinalConsonantSignM),
'𑪑' => Ok(Soyombo::FinalConsonantSignR),
'𑪒' => Ok(Soyombo::FinalConsonantSignL),
'𑪓' => Ok(Soyombo::FinalConsonantSignSh),
'𑪔' => Ok(Soyombo::FinalConsonantSignS),
'𑪕' => Ok(Soyombo::FinalConsonantSignDashA),
'𑪖' => Ok(Soyombo::SignAnusvara),
'𑪗' => Ok(Soyombo::SignVisarga),
'𑪘' => Ok(Soyombo::GeminationMark),
'𑪙' => Ok(Soyombo::Subjoiner),
'𑪚' => Ok(Soyombo::MarkTsheg),
'𑪛' => Ok(Soyombo::MarkShad),
'𑪜' => Ok(Soyombo::MarkDoubleShad),
'𑪝' => Ok(Soyombo::MarkPluta),
'𑪞' => Ok(Soyombo::HeadMarkWithMoonAndSunAndTripleFlame),
'𑪟' => Ok(Soyombo::HeadMarkWithMoonAndSunAndFlame),
'𑪠' => Ok(Soyombo::HeadMarkWithMoonAndSun),
'𑪡' => Ok(Soyombo::TerminalMarkDash1),
'𑪢' => Ok(Soyombo::TerminalMarkDash2),
_ => Err(()),
}
}
}
impl Into<u32> for Soyombo {
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 Soyombo {
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 Soyombo {
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 Soyombo {
pub fn new() -> Self {
Soyombo::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("Soyombo{:#?}", self);
string_morph::to_sentence_case(&s)
}
}