#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Syriac {
EndOfParagraph,
SupralinearFullStop,
SublinearFullStop,
SupralinearColon,
SublinearColon,
HorizontalColon,
ColonSkewedLeft,
ColonSkewedRight,
SupralinearColonSkewedLeft,
SublinearColonSkewedRight,
Contraction,
HarkleanObelus,
HarkleanMetobelus,
HarkleanAsteriscus,
AbbreviationMark,
LetterAlaph,
LetterSuperscriptAlaph,
LetterBeth,
LetterGamal,
LetterGamalGarshuni,
LetterDalath,
LetterDotlessDalathRish,
LetterHe,
LetterWaw,
LetterZain,
LetterHeth,
LetterTeth,
LetterTethGarshuni,
LetterYudh,
LetterYudhHe,
LetterKaph,
LetterLamadh,
LetterMim,
LetterNun,
LetterSemkath,
LetterFinalSemkath,
LetterE,
LetterPe,
LetterReversedPe,
LetterSadhe,
LetterQaph,
LetterRish,
LetterShin,
LetterTaw,
LetterPersianBheth,
LetterPersianGhamal,
LetterPersianDhalath,
PthahaAbove,
PthahaBelow,
PthahaDotted,
ZqaphaAbove,
ZqaphaBelow,
ZqaphaDotted,
RbasaAbove,
RbasaBelow,
DottedZlamaHorizontal,
DottedZlamaAngular,
HbasaAbove,
HbasaBelow,
HbasaDashEsasaDotted,
EsasaAbove,
EsasaBelow,
Rwaha,
FeminineDot,
Qushshaya,
Rukkakha,
TwoVerticalDotsAbove,
TwoVerticalDotsBelow,
ThreeDotsAbove,
ThreeDotsBelow,
ObliqueLineAbove,
ObliqueLineBelow,
Music,
Barrekh,
LetterSogdianZhain,
LetterSogdianKhaph,
}
impl Into<char> for Syriac {
fn into(self) -> char {
match self {
Syriac::EndOfParagraph => '܀',
Syriac::SupralinearFullStop => '܁',
Syriac::SublinearFullStop => '܂',
Syriac::SupralinearColon => '܃',
Syriac::SublinearColon => '܄',
Syriac::HorizontalColon => '܅',
Syriac::ColonSkewedLeft => '܆',
Syriac::ColonSkewedRight => '܇',
Syriac::SupralinearColonSkewedLeft => '܈',
Syriac::SublinearColonSkewedRight => '܉',
Syriac::Contraction => '܊',
Syriac::HarkleanObelus => '܋',
Syriac::HarkleanMetobelus => '܌',
Syriac::HarkleanAsteriscus => '܍',
Syriac::AbbreviationMark => '',
Syriac::LetterAlaph => 'ܐ',
Syriac::LetterSuperscriptAlaph => 'ܑ',
Syriac::LetterBeth => 'ܒ',
Syriac::LetterGamal => 'ܓ',
Syriac::LetterGamalGarshuni => 'ܔ',
Syriac::LetterDalath => 'ܕ',
Syriac::LetterDotlessDalathRish => 'ܖ',
Syriac::LetterHe => 'ܗ',
Syriac::LetterWaw => 'ܘ',
Syriac::LetterZain => 'ܙ',
Syriac::LetterHeth => 'ܚ',
Syriac::LetterTeth => 'ܛ',
Syriac::LetterTethGarshuni => 'ܜ',
Syriac::LetterYudh => 'ܝ',
Syriac::LetterYudhHe => 'ܞ',
Syriac::LetterKaph => 'ܟ',
Syriac::LetterLamadh => 'ܠ',
Syriac::LetterMim => 'ܡ',
Syriac::LetterNun => 'ܢ',
Syriac::LetterSemkath => 'ܣ',
Syriac::LetterFinalSemkath => 'ܤ',
Syriac::LetterE => 'ܥ',
Syriac::LetterPe => 'ܦ',
Syriac::LetterReversedPe => 'ܧ',
Syriac::LetterSadhe => 'ܨ',
Syriac::LetterQaph => 'ܩ',
Syriac::LetterRish => 'ܪ',
Syriac::LetterShin => 'ܫ',
Syriac::LetterTaw => 'ܬ',
Syriac::LetterPersianBheth => 'ܭ',
Syriac::LetterPersianGhamal => 'ܮ',
Syriac::LetterPersianDhalath => 'ܯ',
Syriac::PthahaAbove => 'ܰ',
Syriac::PthahaBelow => 'ܱ',
Syriac::PthahaDotted => 'ܲ',
Syriac::ZqaphaAbove => 'ܳ',
Syriac::ZqaphaBelow => 'ܴ',
Syriac::ZqaphaDotted => 'ܵ',
Syriac::RbasaAbove => 'ܶ',
Syriac::RbasaBelow => 'ܷ',
Syriac::DottedZlamaHorizontal => 'ܸ',
Syriac::DottedZlamaAngular => 'ܹ',
Syriac::HbasaAbove => 'ܺ',
Syriac::HbasaBelow => 'ܻ',
Syriac::HbasaDashEsasaDotted => 'ܼ',
Syriac::EsasaAbove => 'ܽ',
Syriac::EsasaBelow => 'ܾ',
Syriac::Rwaha => 'ܿ',
Syriac::FeminineDot => '݀',
Syriac::Qushshaya => '݁',
Syriac::Rukkakha => '݂',
Syriac::TwoVerticalDotsAbove => '݃',
Syriac::TwoVerticalDotsBelow => '݄',
Syriac::ThreeDotsAbove => '݅',
Syriac::ThreeDotsBelow => '݆',
Syriac::ObliqueLineAbove => '݇',
Syriac::ObliqueLineBelow => '݈',
Syriac::Music => '݉',
Syriac::Barrekh => '݊',
Syriac::LetterSogdianZhain => 'ݍ',
Syriac::LetterSogdianKhaph => 'ݎ',
}
}
}
impl std::convert::TryFrom<char> for Syriac {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'܀' => Ok(Syriac::EndOfParagraph),
'܁' => Ok(Syriac::SupralinearFullStop),
'܂' => Ok(Syriac::SublinearFullStop),
'܃' => Ok(Syriac::SupralinearColon),
'܄' => Ok(Syriac::SublinearColon),
'܅' => Ok(Syriac::HorizontalColon),
'܆' => Ok(Syriac::ColonSkewedLeft),
'܇' => Ok(Syriac::ColonSkewedRight),
'܈' => Ok(Syriac::SupralinearColonSkewedLeft),
'܉' => Ok(Syriac::SublinearColonSkewedRight),
'܊' => Ok(Syriac::Contraction),
'܋' => Ok(Syriac::HarkleanObelus),
'܌' => Ok(Syriac::HarkleanMetobelus),
'܍' => Ok(Syriac::HarkleanAsteriscus),
'' => Ok(Syriac::AbbreviationMark),
'ܐ' => Ok(Syriac::LetterAlaph),
'ܑ' => Ok(Syriac::LetterSuperscriptAlaph),
'ܒ' => Ok(Syriac::LetterBeth),
'ܓ' => Ok(Syriac::LetterGamal),
'ܔ' => Ok(Syriac::LetterGamalGarshuni),
'ܕ' => Ok(Syriac::LetterDalath),
'ܖ' => Ok(Syriac::LetterDotlessDalathRish),
'ܗ' => Ok(Syriac::LetterHe),
'ܘ' => Ok(Syriac::LetterWaw),
'ܙ' => Ok(Syriac::LetterZain),
'ܚ' => Ok(Syriac::LetterHeth),
'ܛ' => Ok(Syriac::LetterTeth),
'ܜ' => Ok(Syriac::LetterTethGarshuni),
'ܝ' => Ok(Syriac::LetterYudh),
'ܞ' => Ok(Syriac::LetterYudhHe),
'ܟ' => Ok(Syriac::LetterKaph),
'ܠ' => Ok(Syriac::LetterLamadh),
'ܡ' => Ok(Syriac::LetterMim),
'ܢ' => Ok(Syriac::LetterNun),
'ܣ' => Ok(Syriac::LetterSemkath),
'ܤ' => Ok(Syriac::LetterFinalSemkath),
'ܥ' => Ok(Syriac::LetterE),
'ܦ' => Ok(Syriac::LetterPe),
'ܧ' => Ok(Syriac::LetterReversedPe),
'ܨ' => Ok(Syriac::LetterSadhe),
'ܩ' => Ok(Syriac::LetterQaph),
'ܪ' => Ok(Syriac::LetterRish),
'ܫ' => Ok(Syriac::LetterShin),
'ܬ' => Ok(Syriac::LetterTaw),
'ܭ' => Ok(Syriac::LetterPersianBheth),
'ܮ' => Ok(Syriac::LetterPersianGhamal),
'ܯ' => Ok(Syriac::LetterPersianDhalath),
'ܰ' => Ok(Syriac::PthahaAbove),
'ܱ' => Ok(Syriac::PthahaBelow),
'ܲ' => Ok(Syriac::PthahaDotted),
'ܳ' => Ok(Syriac::ZqaphaAbove),
'ܴ' => Ok(Syriac::ZqaphaBelow),
'ܵ' => Ok(Syriac::ZqaphaDotted),
'ܶ' => Ok(Syriac::RbasaAbove),
'ܷ' => Ok(Syriac::RbasaBelow),
'ܸ' => Ok(Syriac::DottedZlamaHorizontal),
'ܹ' => Ok(Syriac::DottedZlamaAngular),
'ܺ' => Ok(Syriac::HbasaAbove),
'ܻ' => Ok(Syriac::HbasaBelow),
'ܼ' => Ok(Syriac::HbasaDashEsasaDotted),
'ܽ' => Ok(Syriac::EsasaAbove),
'ܾ' => Ok(Syriac::EsasaBelow),
'ܿ' => Ok(Syriac::Rwaha),
'݀' => Ok(Syriac::FeminineDot),
'݁' => Ok(Syriac::Qushshaya),
'݂' => Ok(Syriac::Rukkakha),
'݃' => Ok(Syriac::TwoVerticalDotsAbove),
'݄' => Ok(Syriac::TwoVerticalDotsBelow),
'݅' => Ok(Syriac::ThreeDotsAbove),
'݆' => Ok(Syriac::ThreeDotsBelow),
'݇' => Ok(Syriac::ObliqueLineAbove),
'݈' => Ok(Syriac::ObliqueLineBelow),
'݉' => Ok(Syriac::Music),
'݊' => Ok(Syriac::Barrekh),
'ݍ' => Ok(Syriac::LetterSogdianZhain),
'ݎ' => Ok(Syriac::LetterSogdianKhaph),
_ => Err(()),
}
}
}
impl Into<u32> for Syriac {
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 Syriac {
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 Syriac {
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 Syriac {
pub fn new() -> Self {
Syriac::EndOfParagraph
}
pub fn name(&self) -> String {
let s = std::format!("Syriac{:#?}", self);
string_morph::to_sentence_case(&s)
}
}