#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Hebrew {
AccentEtnahta,
AccentSegol,
AccentShalshelet,
AccentZaqefQatan,
AccentZaqefGadol,
AccentTipeha,
AccentRevia,
AccentZarqa,
AccentPashta,
AccentYetiv,
AccentTevir,
AccentGeresh,
AccentGereshMuqdam,
AccentGershayim,
AccentQarneyPara,
AccentTelishaGedola,
AccentPazer,
AccentAtnahHafukh,
AccentMunah,
AccentMahapakh,
AccentMerkha,
AccentMerkhaKefula,
AccentDarga,
AccentQadma,
AccentTelishaQetana,
AccentYerahBenYomo,
AccentOle,
AccentIluy,
AccentDehi,
AccentZinor,
MarkMasoraCircle,
PointSheva,
PointHatafSegol,
PointHatafPatah,
PointHatafQamats,
PointHiriq,
PointTsere,
PointSegol,
PointPatah,
PointQamats,
PointHolam,
PointHolamHaserForVav,
PointQubuts,
PointDageshOrMapiq,
PointMeteg,
PunctuationMaqaf,
PointRafe,
PunctuationPaseq,
PointShinDot,
PointSinDot,
PunctuationSofPasuq,
MarkUpperDot,
MarkLowerDot,
PunctuationNunHafukha,
PointQamatsQatan,
LetterAlef,
LetterBet,
LetterGimel,
LetterDalet,
LetterHe,
LetterVav,
LetterZayin,
LetterHet,
LetterTet,
LetterYod,
LetterFinalKaf,
LetterKaf,
LetterLamed,
LetterFinalMem,
LetterMem,
LetterFinalNun,
LetterNun,
LetterSamekh,
LetterAyin,
LetterFinalPe,
LetterPe,
LetterFinalTsadi,
LetterTsadi,
LetterQof,
LetterResh,
LetterShin,
LetterTav,
YodTriangle,
LigatureYiddishDoubleVav,
LigatureYiddishVavYod,
LigatureYiddishDoubleYod,
PunctuationGeresh,
PunctuationGershayim,
}
impl Into<char> for Hebrew {
fn into(self) -> char {
match self {
Hebrew::AccentEtnahta => '֑',
Hebrew::AccentSegol => '֒',
Hebrew::AccentShalshelet => '֓',
Hebrew::AccentZaqefQatan => '֔',
Hebrew::AccentZaqefGadol => '֕',
Hebrew::AccentTipeha => '֖',
Hebrew::AccentRevia => '֗',
Hebrew::AccentZarqa => '֘',
Hebrew::AccentPashta => '֙',
Hebrew::AccentYetiv => '֚',
Hebrew::AccentTevir => '֛',
Hebrew::AccentGeresh => '֜',
Hebrew::AccentGereshMuqdam => '֝',
Hebrew::AccentGershayim => '֞',
Hebrew::AccentQarneyPara => '֟',
Hebrew::AccentTelishaGedola => '֠',
Hebrew::AccentPazer => '֡',
Hebrew::AccentAtnahHafukh => '֢',
Hebrew::AccentMunah => '֣',
Hebrew::AccentMahapakh => '֤',
Hebrew::AccentMerkha => '֥',
Hebrew::AccentMerkhaKefula => '֦',
Hebrew::AccentDarga => '֧',
Hebrew::AccentQadma => '֨',
Hebrew::AccentTelishaQetana => '֩',
Hebrew::AccentYerahBenYomo => '֪',
Hebrew::AccentOle => '֫',
Hebrew::AccentIluy => '֬',
Hebrew::AccentDehi => '֭',
Hebrew::AccentZinor => '֮',
Hebrew::MarkMasoraCircle => '֯',
Hebrew::PointSheva => 'ְ',
Hebrew::PointHatafSegol => 'ֱ',
Hebrew::PointHatafPatah => 'ֲ',
Hebrew::PointHatafQamats => 'ֳ',
Hebrew::PointHiriq => 'ִ',
Hebrew::PointTsere => 'ֵ',
Hebrew::PointSegol => 'ֶ',
Hebrew::PointPatah => 'ַ',
Hebrew::PointQamats => 'ָ',
Hebrew::PointHolam => 'ֹ',
Hebrew::PointHolamHaserForVav => 'ֺ',
Hebrew::PointQubuts => 'ֻ',
Hebrew::PointDageshOrMapiq => 'ּ',
Hebrew::PointMeteg => 'ֽ',
Hebrew::PunctuationMaqaf => '־',
Hebrew::PointRafe => 'ֿ',
Hebrew::PunctuationPaseq => '׀',
Hebrew::PointShinDot => 'ׁ',
Hebrew::PointSinDot => 'ׂ',
Hebrew::PunctuationSofPasuq => '׃',
Hebrew::MarkUpperDot => 'ׄ',
Hebrew::MarkLowerDot => 'ׅ',
Hebrew::PunctuationNunHafukha => '׆',
Hebrew::PointQamatsQatan => 'ׇ',
Hebrew::LetterAlef => 'א',
Hebrew::LetterBet => 'ב',
Hebrew::LetterGimel => 'ג',
Hebrew::LetterDalet => 'ד',
Hebrew::LetterHe => 'ה',
Hebrew::LetterVav => 'ו',
Hebrew::LetterZayin => 'ז',
Hebrew::LetterHet => 'ח',
Hebrew::LetterTet => 'ט',
Hebrew::LetterYod => 'י',
Hebrew::LetterFinalKaf => 'ך',
Hebrew::LetterKaf => 'כ',
Hebrew::LetterLamed => 'ל',
Hebrew::LetterFinalMem => 'ם',
Hebrew::LetterMem => 'מ',
Hebrew::LetterFinalNun => 'ן',
Hebrew::LetterNun => 'נ',
Hebrew::LetterSamekh => 'ס',
Hebrew::LetterAyin => 'ע',
Hebrew::LetterFinalPe => 'ף',
Hebrew::LetterPe => 'פ',
Hebrew::LetterFinalTsadi => 'ץ',
Hebrew::LetterTsadi => 'צ',
Hebrew::LetterQof => 'ק',
Hebrew::LetterResh => 'ר',
Hebrew::LetterShin => 'ש',
Hebrew::LetterTav => 'ת',
Hebrew::YodTriangle => 'ׯ',
Hebrew::LigatureYiddishDoubleVav => 'װ',
Hebrew::LigatureYiddishVavYod => 'ױ',
Hebrew::LigatureYiddishDoubleYod => 'ײ',
Hebrew::PunctuationGeresh => '׳',
Hebrew::PunctuationGershayim => '״',
}
}
}
impl std::convert::TryFrom<char> for Hebrew {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'֑' => Ok(Hebrew::AccentEtnahta),
'֒' => Ok(Hebrew::AccentSegol),
'֓' => Ok(Hebrew::AccentShalshelet),
'֔' => Ok(Hebrew::AccentZaqefQatan),
'֕' => Ok(Hebrew::AccentZaqefGadol),
'֖' => Ok(Hebrew::AccentTipeha),
'֗' => Ok(Hebrew::AccentRevia),
'֘' => Ok(Hebrew::AccentZarqa),
'֙' => Ok(Hebrew::AccentPashta),
'֚' => Ok(Hebrew::AccentYetiv),
'֛' => Ok(Hebrew::AccentTevir),
'֜' => Ok(Hebrew::AccentGeresh),
'֝' => Ok(Hebrew::AccentGereshMuqdam),
'֞' => Ok(Hebrew::AccentGershayim),
'֟' => Ok(Hebrew::AccentQarneyPara),
'֠' => Ok(Hebrew::AccentTelishaGedola),
'֡' => Ok(Hebrew::AccentPazer),
'֢' => Ok(Hebrew::AccentAtnahHafukh),
'֣' => Ok(Hebrew::AccentMunah),
'֤' => Ok(Hebrew::AccentMahapakh),
'֥' => Ok(Hebrew::AccentMerkha),
'֦' => Ok(Hebrew::AccentMerkhaKefula),
'֧' => Ok(Hebrew::AccentDarga),
'֨' => Ok(Hebrew::AccentQadma),
'֩' => Ok(Hebrew::AccentTelishaQetana),
'֪' => Ok(Hebrew::AccentYerahBenYomo),
'֫' => Ok(Hebrew::AccentOle),
'֬' => Ok(Hebrew::AccentIluy),
'֭' => Ok(Hebrew::AccentDehi),
'֮' => Ok(Hebrew::AccentZinor),
'֯' => Ok(Hebrew::MarkMasoraCircle),
'ְ' => Ok(Hebrew::PointSheva),
'ֱ' => Ok(Hebrew::PointHatafSegol),
'ֲ' => Ok(Hebrew::PointHatafPatah),
'ֳ' => Ok(Hebrew::PointHatafQamats),
'ִ' => Ok(Hebrew::PointHiriq),
'ֵ' => Ok(Hebrew::PointTsere),
'ֶ' => Ok(Hebrew::PointSegol),
'ַ' => Ok(Hebrew::PointPatah),
'ָ' => Ok(Hebrew::PointQamats),
'ֹ' => Ok(Hebrew::PointHolam),
'ֺ' => Ok(Hebrew::PointHolamHaserForVav),
'ֻ' => Ok(Hebrew::PointQubuts),
'ּ' => Ok(Hebrew::PointDageshOrMapiq),
'ֽ' => Ok(Hebrew::PointMeteg),
'־' => Ok(Hebrew::PunctuationMaqaf),
'ֿ' => Ok(Hebrew::PointRafe),
'׀' => Ok(Hebrew::PunctuationPaseq),
'ׁ' => Ok(Hebrew::PointShinDot),
'ׂ' => Ok(Hebrew::PointSinDot),
'׃' => Ok(Hebrew::PunctuationSofPasuq),
'ׄ' => Ok(Hebrew::MarkUpperDot),
'ׅ' => Ok(Hebrew::MarkLowerDot),
'׆' => Ok(Hebrew::PunctuationNunHafukha),
'ׇ' => Ok(Hebrew::PointQamatsQatan),
'א' => Ok(Hebrew::LetterAlef),
'ב' => Ok(Hebrew::LetterBet),
'ג' => Ok(Hebrew::LetterGimel),
'ד' => Ok(Hebrew::LetterDalet),
'ה' => Ok(Hebrew::LetterHe),
'ו' => Ok(Hebrew::LetterVav),
'ז' => Ok(Hebrew::LetterZayin),
'ח' => Ok(Hebrew::LetterHet),
'ט' => Ok(Hebrew::LetterTet),
'י' => Ok(Hebrew::LetterYod),
'ך' => Ok(Hebrew::LetterFinalKaf),
'כ' => Ok(Hebrew::LetterKaf),
'ל' => Ok(Hebrew::LetterLamed),
'ם' => Ok(Hebrew::LetterFinalMem),
'מ' => Ok(Hebrew::LetterMem),
'ן' => Ok(Hebrew::LetterFinalNun),
'נ' => Ok(Hebrew::LetterNun),
'ס' => Ok(Hebrew::LetterSamekh),
'ע' => Ok(Hebrew::LetterAyin),
'ף' => Ok(Hebrew::LetterFinalPe),
'פ' => Ok(Hebrew::LetterPe),
'ץ' => Ok(Hebrew::LetterFinalTsadi),
'צ' => Ok(Hebrew::LetterTsadi),
'ק' => Ok(Hebrew::LetterQof),
'ר' => Ok(Hebrew::LetterResh),
'ש' => Ok(Hebrew::LetterShin),
'ת' => Ok(Hebrew::LetterTav),
'ׯ' => Ok(Hebrew::YodTriangle),
'װ' => Ok(Hebrew::LigatureYiddishDoubleVav),
'ױ' => Ok(Hebrew::LigatureYiddishVavYod),
'ײ' => Ok(Hebrew::LigatureYiddishDoubleYod),
'׳' => Ok(Hebrew::PunctuationGeresh),
'״' => Ok(Hebrew::PunctuationGershayim),
_ => Err(()),
}
}
}
impl Into<u32> for Hebrew {
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 Hebrew {
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 Hebrew {
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 Hebrew {
pub fn new() -> Self {
Hebrew::AccentEtnahta
}
pub fn name(&self) -> String {
let s = std::format!("Hebrew{:#?}", self);
string_morph::to_sentence_case(&s)
}
}