#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Coptic {
CapitalLetterAlfa,
SmallLetterAlfa,
CapitalLetterVida,
SmallLetterVida,
CapitalLetterGamma,
SmallLetterGamma,
CapitalLetterDalda,
SmallLetterDalda,
CapitalLetterEie,
SmallLetterEie,
CapitalLetterSou,
SmallLetterSou,
CapitalLetterZata,
SmallLetterZata,
CapitalLetterHate,
SmallLetterHate,
CapitalLetterThethe,
SmallLetterThethe,
CapitalLetterIauda,
SmallLetterIauda,
CapitalLetterKapa,
SmallLetterKapa,
CapitalLetterLaula,
SmallLetterLaula,
CapitalLetterMi,
SmallLetterMi,
CapitalLetterNi,
SmallLetterNi,
CapitalLetterKsi,
SmallLetterKsi,
CapitalLetterO,
SmallLetterO,
CapitalLetterPi,
SmallLetterPi,
CapitalLetterRo,
SmallLetterRo,
CapitalLetterSima,
SmallLetterSima,
CapitalLetterTau,
SmallLetterTau,
CapitalLetterUa,
SmallLetterUa,
CapitalLetterFi,
SmallLetterFi,
CapitalLetterKhi,
SmallLetterKhi,
CapitalLetterPsi,
SmallLetterPsi,
CapitalLetterOou,
SmallLetterOou,
CapitalLetterDialectDashPAlef,
SmallLetterDialectDashPAlef,
CapitalLetterOldAin,
SmallLetterOldAin,
CapitalLetterCryptogrammicEie,
SmallLetterCryptogrammicEie,
CapitalLetterDialectDashPKapa,
SmallLetterDialectDashPKapa,
CapitalLetterDialectDashPNi,
SmallLetterDialectDashPNi,
CapitalLetterCryptogrammicNi,
SmallLetterCryptogrammicNi,
CapitalLetterOldOou,
SmallLetterOldOou,
CapitalLetterSampi,
SmallLetterSampi,
CapitalLetterCrossedShei,
SmallLetterCrossedShei,
CapitalLetterOldShei,
SmallLetterOldShei,
CapitalLetterOldEsh,
SmallLetterOldEsh,
CapitalLetterAkhmimicKhei,
SmallLetterAkhmimicKhei,
CapitalLetterDialectDashPHori,
SmallLetterDialectDashPHori,
CapitalLetterOldHori,
SmallLetterOldHori,
CapitalLetterOldHa,
SmallLetterOldHa,
CapitalLetterLDashShapedHa,
SmallLetterLDashShapedHa,
CapitalLetterOldHei,
SmallLetterOldHei,
CapitalLetterOldHat,
SmallLetterOldHat,
CapitalLetterOldGangia,
SmallLetterOldGangia,
CapitalLetterOldDja,
SmallLetterOldDja,
CapitalLetterOldShima,
SmallLetterOldShima,
CapitalLetterOldNubianShima,
SmallLetterOldNubianShima,
CapitalLetterOldNubianNgi,
SmallLetterOldNubianNgi,
CapitalLetterOldNubianNyi,
SmallLetterOldNubianNyi,
CapitalLetterOldNubianWau,
SmallLetterOldNubianWau,
SymbolKai,
SymbolMiRo,
SymbolPiRo,
SymbolStauros,
SymbolTauRo,
SymbolKhiRo,
SymbolShimaSima,
CapitalLetterCryptogrammicShei,
SmallLetterCryptogrammicShei,
CapitalLetterCryptogrammicGangia,
SmallLetterCryptogrammicGangia,
CombiningNiAbove,
CombiningSpiritusAsper,
CombiningSpiritusLenis,
CapitalLetterBohairicKhei,
SmallLetterBohairicKhei,
OldNubianFullStop,
OldNubianDirectQuestionMark,
OldNubianIndirectQuestionMark,
OldNubianVerseDivider,
FractionOneHalf,
FullStop,
}
impl Into<char> for Coptic {
fn into(self) -> char {
match self {
Coptic::CapitalLetterAlfa => 'Ⲁ',
Coptic::SmallLetterAlfa => 'ⲁ',
Coptic::CapitalLetterVida => 'Ⲃ',
Coptic::SmallLetterVida => 'ⲃ',
Coptic::CapitalLetterGamma => 'Ⲅ',
Coptic::SmallLetterGamma => 'ⲅ',
Coptic::CapitalLetterDalda => 'Ⲇ',
Coptic::SmallLetterDalda => 'ⲇ',
Coptic::CapitalLetterEie => 'Ⲉ',
Coptic::SmallLetterEie => 'ⲉ',
Coptic::CapitalLetterSou => 'Ⲋ',
Coptic::SmallLetterSou => 'ⲋ',
Coptic::CapitalLetterZata => 'Ⲍ',
Coptic::SmallLetterZata => 'ⲍ',
Coptic::CapitalLetterHate => 'Ⲏ',
Coptic::SmallLetterHate => 'ⲏ',
Coptic::CapitalLetterThethe => 'Ⲑ',
Coptic::SmallLetterThethe => 'ⲑ',
Coptic::CapitalLetterIauda => 'Ⲓ',
Coptic::SmallLetterIauda => 'ⲓ',
Coptic::CapitalLetterKapa => 'Ⲕ',
Coptic::SmallLetterKapa => 'ⲕ',
Coptic::CapitalLetterLaula => 'Ⲗ',
Coptic::SmallLetterLaula => 'ⲗ',
Coptic::CapitalLetterMi => 'Ⲙ',
Coptic::SmallLetterMi => 'ⲙ',
Coptic::CapitalLetterNi => 'Ⲛ',
Coptic::SmallLetterNi => 'ⲛ',
Coptic::CapitalLetterKsi => 'Ⲝ',
Coptic::SmallLetterKsi => 'ⲝ',
Coptic::CapitalLetterO => 'Ⲟ',
Coptic::SmallLetterO => 'ⲟ',
Coptic::CapitalLetterPi => 'Ⲡ',
Coptic::SmallLetterPi => 'ⲡ',
Coptic::CapitalLetterRo => 'Ⲣ',
Coptic::SmallLetterRo => 'ⲣ',
Coptic::CapitalLetterSima => 'Ⲥ',
Coptic::SmallLetterSima => 'ⲥ',
Coptic::CapitalLetterTau => 'Ⲧ',
Coptic::SmallLetterTau => 'ⲧ',
Coptic::CapitalLetterUa => 'Ⲩ',
Coptic::SmallLetterUa => 'ⲩ',
Coptic::CapitalLetterFi => 'Ⲫ',
Coptic::SmallLetterFi => 'ⲫ',
Coptic::CapitalLetterKhi => 'Ⲭ',
Coptic::SmallLetterKhi => 'ⲭ',
Coptic::CapitalLetterPsi => 'Ⲯ',
Coptic::SmallLetterPsi => 'ⲯ',
Coptic::CapitalLetterOou => 'Ⲱ',
Coptic::SmallLetterOou => 'ⲱ',
Coptic::CapitalLetterDialectDashPAlef => 'Ⲳ',
Coptic::SmallLetterDialectDashPAlef => 'ⲳ',
Coptic::CapitalLetterOldAin => 'Ⲵ',
Coptic::SmallLetterOldAin => 'ⲵ',
Coptic::CapitalLetterCryptogrammicEie => 'Ⲷ',
Coptic::SmallLetterCryptogrammicEie => 'ⲷ',
Coptic::CapitalLetterDialectDashPKapa => 'Ⲹ',
Coptic::SmallLetterDialectDashPKapa => 'ⲹ',
Coptic::CapitalLetterDialectDashPNi => 'Ⲻ',
Coptic::SmallLetterDialectDashPNi => 'ⲻ',
Coptic::CapitalLetterCryptogrammicNi => 'Ⲽ',
Coptic::SmallLetterCryptogrammicNi => 'ⲽ',
Coptic::CapitalLetterOldOou => 'Ⲿ',
Coptic::SmallLetterOldOou => 'ⲿ',
Coptic::CapitalLetterSampi => 'Ⳁ',
Coptic::SmallLetterSampi => 'ⳁ',
Coptic::CapitalLetterCrossedShei => 'Ⳃ',
Coptic::SmallLetterCrossedShei => 'ⳃ',
Coptic::CapitalLetterOldShei => 'Ⳅ',
Coptic::SmallLetterOldShei => 'ⳅ',
Coptic::CapitalLetterOldEsh => 'Ⳇ',
Coptic::SmallLetterOldEsh => 'ⳇ',
Coptic::CapitalLetterAkhmimicKhei => 'Ⳉ',
Coptic::SmallLetterAkhmimicKhei => 'ⳉ',
Coptic::CapitalLetterDialectDashPHori => 'Ⳋ',
Coptic::SmallLetterDialectDashPHori => 'ⳋ',
Coptic::CapitalLetterOldHori => 'Ⳍ',
Coptic::SmallLetterOldHori => 'ⳍ',
Coptic::CapitalLetterOldHa => 'Ⳏ',
Coptic::SmallLetterOldHa => 'ⳏ',
Coptic::CapitalLetterLDashShapedHa => 'Ⳑ',
Coptic::SmallLetterLDashShapedHa => 'ⳑ',
Coptic::CapitalLetterOldHei => 'Ⳓ',
Coptic::SmallLetterOldHei => 'ⳓ',
Coptic::CapitalLetterOldHat => 'Ⳕ',
Coptic::SmallLetterOldHat => 'ⳕ',
Coptic::CapitalLetterOldGangia => 'Ⳗ',
Coptic::SmallLetterOldGangia => 'ⳗ',
Coptic::CapitalLetterOldDja => 'Ⳙ',
Coptic::SmallLetterOldDja => 'ⳙ',
Coptic::CapitalLetterOldShima => 'Ⳛ',
Coptic::SmallLetterOldShima => 'ⳛ',
Coptic::CapitalLetterOldNubianShima => 'Ⳝ',
Coptic::SmallLetterOldNubianShima => 'ⳝ',
Coptic::CapitalLetterOldNubianNgi => 'Ⳟ',
Coptic::SmallLetterOldNubianNgi => 'ⳟ',
Coptic::CapitalLetterOldNubianNyi => 'Ⳡ',
Coptic::SmallLetterOldNubianNyi => 'ⳡ',
Coptic::CapitalLetterOldNubianWau => 'Ⳣ',
Coptic::SmallLetterOldNubianWau => 'ⳣ',
Coptic::SymbolKai => 'ⳤ',
Coptic::SymbolMiRo => '⳥',
Coptic::SymbolPiRo => '⳦',
Coptic::SymbolStauros => '⳧',
Coptic::SymbolTauRo => '⳨',
Coptic::SymbolKhiRo => '⳩',
Coptic::SymbolShimaSima => '⳪',
Coptic::CapitalLetterCryptogrammicShei => 'Ⳬ',
Coptic::SmallLetterCryptogrammicShei => 'ⳬ',
Coptic::CapitalLetterCryptogrammicGangia => 'Ⳮ',
Coptic::SmallLetterCryptogrammicGangia => 'ⳮ',
Coptic::CombiningNiAbove => '⳯',
Coptic::CombiningSpiritusAsper => '⳰',
Coptic::CombiningSpiritusLenis => '⳱',
Coptic::CapitalLetterBohairicKhei => 'Ⳳ',
Coptic::SmallLetterBohairicKhei => 'ⳳ',
Coptic::OldNubianFullStop => '⳹',
Coptic::OldNubianDirectQuestionMark => '⳺',
Coptic::OldNubianIndirectQuestionMark => '⳻',
Coptic::OldNubianVerseDivider => '⳼',
Coptic::FractionOneHalf => '⳽',
Coptic::FullStop => '⳾',
}
}
}
impl std::convert::TryFrom<char> for Coptic {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'Ⲁ' => Ok(Coptic::CapitalLetterAlfa),
'ⲁ' => Ok(Coptic::SmallLetterAlfa),
'Ⲃ' => Ok(Coptic::CapitalLetterVida),
'ⲃ' => Ok(Coptic::SmallLetterVida),
'Ⲅ' => Ok(Coptic::CapitalLetterGamma),
'ⲅ' => Ok(Coptic::SmallLetterGamma),
'Ⲇ' => Ok(Coptic::CapitalLetterDalda),
'ⲇ' => Ok(Coptic::SmallLetterDalda),
'Ⲉ' => Ok(Coptic::CapitalLetterEie),
'ⲉ' => Ok(Coptic::SmallLetterEie),
'Ⲋ' => Ok(Coptic::CapitalLetterSou),
'ⲋ' => Ok(Coptic::SmallLetterSou),
'Ⲍ' => Ok(Coptic::CapitalLetterZata),
'ⲍ' => Ok(Coptic::SmallLetterZata),
'Ⲏ' => Ok(Coptic::CapitalLetterHate),
'ⲏ' => Ok(Coptic::SmallLetterHate),
'Ⲑ' => Ok(Coptic::CapitalLetterThethe),
'ⲑ' => Ok(Coptic::SmallLetterThethe),
'Ⲓ' => Ok(Coptic::CapitalLetterIauda),
'ⲓ' => Ok(Coptic::SmallLetterIauda),
'Ⲕ' => Ok(Coptic::CapitalLetterKapa),
'ⲕ' => Ok(Coptic::SmallLetterKapa),
'Ⲗ' => Ok(Coptic::CapitalLetterLaula),
'ⲗ' => Ok(Coptic::SmallLetterLaula),
'Ⲙ' => Ok(Coptic::CapitalLetterMi),
'ⲙ' => Ok(Coptic::SmallLetterMi),
'Ⲛ' => Ok(Coptic::CapitalLetterNi),
'ⲛ' => Ok(Coptic::SmallLetterNi),
'Ⲝ' => Ok(Coptic::CapitalLetterKsi),
'ⲝ' => Ok(Coptic::SmallLetterKsi),
'Ⲟ' => Ok(Coptic::CapitalLetterO),
'ⲟ' => Ok(Coptic::SmallLetterO),
'Ⲡ' => Ok(Coptic::CapitalLetterPi),
'ⲡ' => Ok(Coptic::SmallLetterPi),
'Ⲣ' => Ok(Coptic::CapitalLetterRo),
'ⲣ' => Ok(Coptic::SmallLetterRo),
'Ⲥ' => Ok(Coptic::CapitalLetterSima),
'ⲥ' => Ok(Coptic::SmallLetterSima),
'Ⲧ' => Ok(Coptic::CapitalLetterTau),
'ⲧ' => Ok(Coptic::SmallLetterTau),
'Ⲩ' => Ok(Coptic::CapitalLetterUa),
'ⲩ' => Ok(Coptic::SmallLetterUa),
'Ⲫ' => Ok(Coptic::CapitalLetterFi),
'ⲫ' => Ok(Coptic::SmallLetterFi),
'Ⲭ' => Ok(Coptic::CapitalLetterKhi),
'ⲭ' => Ok(Coptic::SmallLetterKhi),
'Ⲯ' => Ok(Coptic::CapitalLetterPsi),
'ⲯ' => Ok(Coptic::SmallLetterPsi),
'Ⲱ' => Ok(Coptic::CapitalLetterOou),
'ⲱ' => Ok(Coptic::SmallLetterOou),
'Ⲳ' => Ok(Coptic::CapitalLetterDialectDashPAlef),
'ⲳ' => Ok(Coptic::SmallLetterDialectDashPAlef),
'Ⲵ' => Ok(Coptic::CapitalLetterOldAin),
'ⲵ' => Ok(Coptic::SmallLetterOldAin),
'Ⲷ' => Ok(Coptic::CapitalLetterCryptogrammicEie),
'ⲷ' => Ok(Coptic::SmallLetterCryptogrammicEie),
'Ⲹ' => Ok(Coptic::CapitalLetterDialectDashPKapa),
'ⲹ' => Ok(Coptic::SmallLetterDialectDashPKapa),
'Ⲻ' => Ok(Coptic::CapitalLetterDialectDashPNi),
'ⲻ' => Ok(Coptic::SmallLetterDialectDashPNi),
'Ⲽ' => Ok(Coptic::CapitalLetterCryptogrammicNi),
'ⲽ' => Ok(Coptic::SmallLetterCryptogrammicNi),
'Ⲿ' => Ok(Coptic::CapitalLetterOldOou),
'ⲿ' => Ok(Coptic::SmallLetterOldOou),
'Ⳁ' => Ok(Coptic::CapitalLetterSampi),
'ⳁ' => Ok(Coptic::SmallLetterSampi),
'Ⳃ' => Ok(Coptic::CapitalLetterCrossedShei),
'ⳃ' => Ok(Coptic::SmallLetterCrossedShei),
'Ⳅ' => Ok(Coptic::CapitalLetterOldShei),
'ⳅ' => Ok(Coptic::SmallLetterOldShei),
'Ⳇ' => Ok(Coptic::CapitalLetterOldEsh),
'ⳇ' => Ok(Coptic::SmallLetterOldEsh),
'Ⳉ' => Ok(Coptic::CapitalLetterAkhmimicKhei),
'ⳉ' => Ok(Coptic::SmallLetterAkhmimicKhei),
'Ⳋ' => Ok(Coptic::CapitalLetterDialectDashPHori),
'ⳋ' => Ok(Coptic::SmallLetterDialectDashPHori),
'Ⳍ' => Ok(Coptic::CapitalLetterOldHori),
'ⳍ' => Ok(Coptic::SmallLetterOldHori),
'Ⳏ' => Ok(Coptic::CapitalLetterOldHa),
'ⳏ' => Ok(Coptic::SmallLetterOldHa),
'Ⳑ' => Ok(Coptic::CapitalLetterLDashShapedHa),
'ⳑ' => Ok(Coptic::SmallLetterLDashShapedHa),
'Ⳓ' => Ok(Coptic::CapitalLetterOldHei),
'ⳓ' => Ok(Coptic::SmallLetterOldHei),
'Ⳕ' => Ok(Coptic::CapitalLetterOldHat),
'ⳕ' => Ok(Coptic::SmallLetterOldHat),
'Ⳗ' => Ok(Coptic::CapitalLetterOldGangia),
'ⳗ' => Ok(Coptic::SmallLetterOldGangia),
'Ⳙ' => Ok(Coptic::CapitalLetterOldDja),
'ⳙ' => Ok(Coptic::SmallLetterOldDja),
'Ⳛ' => Ok(Coptic::CapitalLetterOldShima),
'ⳛ' => Ok(Coptic::SmallLetterOldShima),
'Ⳝ' => Ok(Coptic::CapitalLetterOldNubianShima),
'ⳝ' => Ok(Coptic::SmallLetterOldNubianShima),
'Ⳟ' => Ok(Coptic::CapitalLetterOldNubianNgi),
'ⳟ' => Ok(Coptic::SmallLetterOldNubianNgi),
'Ⳡ' => Ok(Coptic::CapitalLetterOldNubianNyi),
'ⳡ' => Ok(Coptic::SmallLetterOldNubianNyi),
'Ⳣ' => Ok(Coptic::CapitalLetterOldNubianWau),
'ⳣ' => Ok(Coptic::SmallLetterOldNubianWau),
'ⳤ' => Ok(Coptic::SymbolKai),
'⳥' => Ok(Coptic::SymbolMiRo),
'⳦' => Ok(Coptic::SymbolPiRo),
'⳧' => Ok(Coptic::SymbolStauros),
'⳨' => Ok(Coptic::SymbolTauRo),
'⳩' => Ok(Coptic::SymbolKhiRo),
'⳪' => Ok(Coptic::SymbolShimaSima),
'Ⳬ' => Ok(Coptic::CapitalLetterCryptogrammicShei),
'ⳬ' => Ok(Coptic::SmallLetterCryptogrammicShei),
'Ⳮ' => Ok(Coptic::CapitalLetterCryptogrammicGangia),
'ⳮ' => Ok(Coptic::SmallLetterCryptogrammicGangia),
'⳯' => Ok(Coptic::CombiningNiAbove),
'⳰' => Ok(Coptic::CombiningSpiritusAsper),
'⳱' => Ok(Coptic::CombiningSpiritusLenis),
'Ⳳ' => Ok(Coptic::CapitalLetterBohairicKhei),
'ⳳ' => Ok(Coptic::SmallLetterBohairicKhei),
'⳹' => Ok(Coptic::OldNubianFullStop),
'⳺' => Ok(Coptic::OldNubianDirectQuestionMark),
'⳻' => Ok(Coptic::OldNubianIndirectQuestionMark),
'⳼' => Ok(Coptic::OldNubianVerseDivider),
'⳽' => Ok(Coptic::FractionOneHalf),
'⳾' => Ok(Coptic::FullStop),
_ => Err(()),
}
}
}
impl Into<u32> for Coptic {
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 Coptic {
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 Coptic {
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 Coptic {
pub fn new() -> Self {
Coptic::CapitalLetterAlfa
}
pub fn name(&self) -> String {
let s = std::format!("Coptic{:#?}", self);
string_morph::to_sentence_case(&s)
}
}