#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum TaiTham {
LetterHighKa,
LetterHighKha,
LetterHighKxa,
LetterLowKa,
LetterLowKxa,
LetterLowKha,
LetterNga,
LetterHighCa,
LetterHighCha,
LetterLowCa,
LetterLowSa,
LetterLowCha,
LetterNya,
LetterRata,
LetterHighRatha,
LetterDa,
LetterLowRatha,
LetterRana,
LetterHighTa,
LetterHighTha,
LetterLowTa,
LetterLowTha,
LetterNa,
LetterBa,
LetterHighPa,
LetterHighPha,
LetterHighFa,
LetterLowPa,
LetterLowFa,
LetterLowPha,
LetterMa,
LetterLowYa,
LetterHighYa,
LetterRa,
LetterRue,
LetterLa,
LetterLue,
LetterWa,
LetterHighSha,
LetterHighSsa,
LetterHighSa,
LetterHighHa,
LetterLla,
LetterA,
LetterLowHa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterEe,
LetterOo,
LetterLae,
LetterGreatSa,
ConsonantSignMedialRa,
ConsonantSignMedialLa,
ConsonantSignLaTangLai,
SignMaiKangLai,
ConsonantSignFinalNga,
ConsonantSignLowPa,
ConsonantSignHighRathaOrLowPa,
ConsonantSignMa,
ConsonantSignBa,
ConsonantSignSa,
SignSakot,
VowelSignA,
VowelSignMaiSat,
VowelSignAa,
VowelSignTallAa,
VowelSignI,
VowelSignIi,
VowelSignUe,
VowelSignUue,
VowelSignU,
VowelSignUu,
VowelSignO,
VowelSignOaBelow,
VowelSignOy,
VowelSignE,
VowelSignAe,
VowelSignOo,
VowelSignAi,
VowelSignThamAi,
VowelSignOaAbove,
SignMaiKang,
SignToneDash1,
SignToneDash2,
SignKhuenToneDash3,
SignKhuenToneDash4,
SignKhuenToneDash5,
SignRaHaam,
SignMaiSam,
SignKhuenDashLueKaran,
CombiningCryptogrammicDot,
HoraDigitZero,
HoraDigitOne,
HoraDigitTwo,
HoraDigitThree,
HoraDigitFour,
HoraDigitFive,
HoraDigitSix,
HoraDigitSeven,
HoraDigitEight,
HoraDigitNine,
ThamDigitZero,
ThamDigitOne,
ThamDigitTwo,
ThamDigitThree,
ThamDigitFour,
ThamDigitFive,
ThamDigitSix,
ThamDigitSeven,
ThamDigitEight,
ThamDigitNine,
SignWiang,
SignWiangwaak,
SignSawan,
SignKeow,
SignHoy,
SignDokmai,
SignReversedRotatedRana,
SignMaiYamok,
SignKaan,
SignKaankuu,
SignSatkaan,
SignSatkaankuu,
SignHang,
SignCaang,
}
impl Into<char> for TaiTham {
fn into(self) -> char {
match self {
TaiTham::LetterHighKa => 'ᨠ',
TaiTham::LetterHighKha => 'ᨡ',
TaiTham::LetterHighKxa => 'ᨢ',
TaiTham::LetterLowKa => 'ᨣ',
TaiTham::LetterLowKxa => 'ᨤ',
TaiTham::LetterLowKha => 'ᨥ',
TaiTham::LetterNga => 'ᨦ',
TaiTham::LetterHighCa => 'ᨧ',
TaiTham::LetterHighCha => 'ᨨ',
TaiTham::LetterLowCa => 'ᨩ',
TaiTham::LetterLowSa => 'ᨪ',
TaiTham::LetterLowCha => 'ᨫ',
TaiTham::LetterNya => 'ᨬ',
TaiTham::LetterRata => 'ᨭ',
TaiTham::LetterHighRatha => 'ᨮ',
TaiTham::LetterDa => 'ᨯ',
TaiTham::LetterLowRatha => 'ᨰ',
TaiTham::LetterRana => 'ᨱ',
TaiTham::LetterHighTa => 'ᨲ',
TaiTham::LetterHighTha => 'ᨳ',
TaiTham::LetterLowTa => 'ᨴ',
TaiTham::LetterLowTha => 'ᨵ',
TaiTham::LetterNa => 'ᨶ',
TaiTham::LetterBa => 'ᨷ',
TaiTham::LetterHighPa => 'ᨸ',
TaiTham::LetterHighPha => 'ᨹ',
TaiTham::LetterHighFa => 'ᨺ',
TaiTham::LetterLowPa => 'ᨻ',
TaiTham::LetterLowFa => 'ᨼ',
TaiTham::LetterLowPha => 'ᨽ',
TaiTham::LetterMa => 'ᨾ',
TaiTham::LetterLowYa => 'ᨿ',
TaiTham::LetterHighYa => 'ᩀ',
TaiTham::LetterRa => 'ᩁ',
TaiTham::LetterRue => 'ᩂ',
TaiTham::LetterLa => 'ᩃ',
TaiTham::LetterLue => 'ᩄ',
TaiTham::LetterWa => 'ᩅ',
TaiTham::LetterHighSha => 'ᩆ',
TaiTham::LetterHighSsa => 'ᩇ',
TaiTham::LetterHighSa => 'ᩈ',
TaiTham::LetterHighHa => 'ᩉ',
TaiTham::LetterLla => 'ᩊ',
TaiTham::LetterA => 'ᩋ',
TaiTham::LetterLowHa => 'ᩌ',
TaiTham::LetterI => 'ᩍ',
TaiTham::LetterIi => 'ᩎ',
TaiTham::LetterU => 'ᩏ',
TaiTham::LetterUu => 'ᩐ',
TaiTham::LetterEe => 'ᩑ',
TaiTham::LetterOo => 'ᩒ',
TaiTham::LetterLae => 'ᩓ',
TaiTham::LetterGreatSa => 'ᩔ',
TaiTham::ConsonantSignMedialRa => 'ᩕ',
TaiTham::ConsonantSignMedialLa => 'ᩖ',
TaiTham::ConsonantSignLaTangLai => 'ᩗ',
TaiTham::SignMaiKangLai => 'ᩘ',
TaiTham::ConsonantSignFinalNga => 'ᩙ',
TaiTham::ConsonantSignLowPa => 'ᩚ',
TaiTham::ConsonantSignHighRathaOrLowPa => 'ᩛ',
TaiTham::ConsonantSignMa => 'ᩜ',
TaiTham::ConsonantSignBa => 'ᩝ',
TaiTham::ConsonantSignSa => 'ᩞ',
TaiTham::SignSakot => '᩠',
TaiTham::VowelSignA => 'ᩡ',
TaiTham::VowelSignMaiSat => 'ᩢ',
TaiTham::VowelSignAa => 'ᩣ',
TaiTham::VowelSignTallAa => 'ᩤ',
TaiTham::VowelSignI => 'ᩥ',
TaiTham::VowelSignIi => 'ᩦ',
TaiTham::VowelSignUe => 'ᩧ',
TaiTham::VowelSignUue => 'ᩨ',
TaiTham::VowelSignU => 'ᩩ',
TaiTham::VowelSignUu => 'ᩪ',
TaiTham::VowelSignO => 'ᩫ',
TaiTham::VowelSignOaBelow => 'ᩬ',
TaiTham::VowelSignOy => 'ᩭ',
TaiTham::VowelSignE => 'ᩮ',
TaiTham::VowelSignAe => 'ᩯ',
TaiTham::VowelSignOo => 'ᩰ',
TaiTham::VowelSignAi => 'ᩱ',
TaiTham::VowelSignThamAi => 'ᩲ',
TaiTham::VowelSignOaAbove => 'ᩳ',
TaiTham::SignMaiKang => 'ᩴ',
TaiTham::SignToneDash1 => '᩵',
TaiTham::SignToneDash2 => '᩶',
TaiTham::SignKhuenToneDash3 => '᩷',
TaiTham::SignKhuenToneDash4 => '᩸',
TaiTham::SignKhuenToneDash5 => '᩹',
TaiTham::SignRaHaam => '᩺',
TaiTham::SignMaiSam => '᩻',
TaiTham::SignKhuenDashLueKaran => '᩼',
TaiTham::CombiningCryptogrammicDot => '᩿',
TaiTham::HoraDigitZero => '᪀',
TaiTham::HoraDigitOne => '᪁',
TaiTham::HoraDigitTwo => '᪂',
TaiTham::HoraDigitThree => '᪃',
TaiTham::HoraDigitFour => '᪄',
TaiTham::HoraDigitFive => '᪅',
TaiTham::HoraDigitSix => '᪆',
TaiTham::HoraDigitSeven => '᪇',
TaiTham::HoraDigitEight => '᪈',
TaiTham::HoraDigitNine => '᪉',
TaiTham::ThamDigitZero => '᪐',
TaiTham::ThamDigitOne => '᪑',
TaiTham::ThamDigitTwo => '᪒',
TaiTham::ThamDigitThree => '᪓',
TaiTham::ThamDigitFour => '᪔',
TaiTham::ThamDigitFive => '᪕',
TaiTham::ThamDigitSix => '᪖',
TaiTham::ThamDigitSeven => '᪗',
TaiTham::ThamDigitEight => '᪘',
TaiTham::ThamDigitNine => '᪙',
TaiTham::SignWiang => '᪠',
TaiTham::SignWiangwaak => '᪡',
TaiTham::SignSawan => '᪢',
TaiTham::SignKeow => '᪣',
TaiTham::SignHoy => '᪤',
TaiTham::SignDokmai => '᪥',
TaiTham::SignReversedRotatedRana => '᪦',
TaiTham::SignMaiYamok => 'ᪧ',
TaiTham::SignKaan => '᪨',
TaiTham::SignKaankuu => '᪩',
TaiTham::SignSatkaan => '᪪',
TaiTham::SignSatkaankuu => '᪫',
TaiTham::SignHang => '᪬',
TaiTham::SignCaang => '᪭',
}
}
}
impl std::convert::TryFrom<char> for TaiTham {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ᨠ' => Ok(TaiTham::LetterHighKa),
'ᨡ' => Ok(TaiTham::LetterHighKha),
'ᨢ' => Ok(TaiTham::LetterHighKxa),
'ᨣ' => Ok(TaiTham::LetterLowKa),
'ᨤ' => Ok(TaiTham::LetterLowKxa),
'ᨥ' => Ok(TaiTham::LetterLowKha),
'ᨦ' => Ok(TaiTham::LetterNga),
'ᨧ' => Ok(TaiTham::LetterHighCa),
'ᨨ' => Ok(TaiTham::LetterHighCha),
'ᨩ' => Ok(TaiTham::LetterLowCa),
'ᨪ' => Ok(TaiTham::LetterLowSa),
'ᨫ' => Ok(TaiTham::LetterLowCha),
'ᨬ' => Ok(TaiTham::LetterNya),
'ᨭ' => Ok(TaiTham::LetterRata),
'ᨮ' => Ok(TaiTham::LetterHighRatha),
'ᨯ' => Ok(TaiTham::LetterDa),
'ᨰ' => Ok(TaiTham::LetterLowRatha),
'ᨱ' => Ok(TaiTham::LetterRana),
'ᨲ' => Ok(TaiTham::LetterHighTa),
'ᨳ' => Ok(TaiTham::LetterHighTha),
'ᨴ' => Ok(TaiTham::LetterLowTa),
'ᨵ' => Ok(TaiTham::LetterLowTha),
'ᨶ' => Ok(TaiTham::LetterNa),
'ᨷ' => Ok(TaiTham::LetterBa),
'ᨸ' => Ok(TaiTham::LetterHighPa),
'ᨹ' => Ok(TaiTham::LetterHighPha),
'ᨺ' => Ok(TaiTham::LetterHighFa),
'ᨻ' => Ok(TaiTham::LetterLowPa),
'ᨼ' => Ok(TaiTham::LetterLowFa),
'ᨽ' => Ok(TaiTham::LetterLowPha),
'ᨾ' => Ok(TaiTham::LetterMa),
'ᨿ' => Ok(TaiTham::LetterLowYa),
'ᩀ' => Ok(TaiTham::LetterHighYa),
'ᩁ' => Ok(TaiTham::LetterRa),
'ᩂ' => Ok(TaiTham::LetterRue),
'ᩃ' => Ok(TaiTham::LetterLa),
'ᩄ' => Ok(TaiTham::LetterLue),
'ᩅ' => Ok(TaiTham::LetterWa),
'ᩆ' => Ok(TaiTham::LetterHighSha),
'ᩇ' => Ok(TaiTham::LetterHighSsa),
'ᩈ' => Ok(TaiTham::LetterHighSa),
'ᩉ' => Ok(TaiTham::LetterHighHa),
'ᩊ' => Ok(TaiTham::LetterLla),
'ᩋ' => Ok(TaiTham::LetterA),
'ᩌ' => Ok(TaiTham::LetterLowHa),
'ᩍ' => Ok(TaiTham::LetterI),
'ᩎ' => Ok(TaiTham::LetterIi),
'ᩏ' => Ok(TaiTham::LetterU),
'ᩐ' => Ok(TaiTham::LetterUu),
'ᩑ' => Ok(TaiTham::LetterEe),
'ᩒ' => Ok(TaiTham::LetterOo),
'ᩓ' => Ok(TaiTham::LetterLae),
'ᩔ' => Ok(TaiTham::LetterGreatSa),
'ᩕ' => Ok(TaiTham::ConsonantSignMedialRa),
'ᩖ' => Ok(TaiTham::ConsonantSignMedialLa),
'ᩗ' => Ok(TaiTham::ConsonantSignLaTangLai),
'ᩘ' => Ok(TaiTham::SignMaiKangLai),
'ᩙ' => Ok(TaiTham::ConsonantSignFinalNga),
'ᩚ' => Ok(TaiTham::ConsonantSignLowPa),
'ᩛ' => Ok(TaiTham::ConsonantSignHighRathaOrLowPa),
'ᩜ' => Ok(TaiTham::ConsonantSignMa),
'ᩝ' => Ok(TaiTham::ConsonantSignBa),
'ᩞ' => Ok(TaiTham::ConsonantSignSa),
'᩠' => Ok(TaiTham::SignSakot),
'ᩡ' => Ok(TaiTham::VowelSignA),
'ᩢ' => Ok(TaiTham::VowelSignMaiSat),
'ᩣ' => Ok(TaiTham::VowelSignAa),
'ᩤ' => Ok(TaiTham::VowelSignTallAa),
'ᩥ' => Ok(TaiTham::VowelSignI),
'ᩦ' => Ok(TaiTham::VowelSignIi),
'ᩧ' => Ok(TaiTham::VowelSignUe),
'ᩨ' => Ok(TaiTham::VowelSignUue),
'ᩩ' => Ok(TaiTham::VowelSignU),
'ᩪ' => Ok(TaiTham::VowelSignUu),
'ᩫ' => Ok(TaiTham::VowelSignO),
'ᩬ' => Ok(TaiTham::VowelSignOaBelow),
'ᩭ' => Ok(TaiTham::VowelSignOy),
'ᩮ' => Ok(TaiTham::VowelSignE),
'ᩯ' => Ok(TaiTham::VowelSignAe),
'ᩰ' => Ok(TaiTham::VowelSignOo),
'ᩱ' => Ok(TaiTham::VowelSignAi),
'ᩲ' => Ok(TaiTham::VowelSignThamAi),
'ᩳ' => Ok(TaiTham::VowelSignOaAbove),
'ᩴ' => Ok(TaiTham::SignMaiKang),
'᩵' => Ok(TaiTham::SignToneDash1),
'᩶' => Ok(TaiTham::SignToneDash2),
'᩷' => Ok(TaiTham::SignKhuenToneDash3),
'᩸' => Ok(TaiTham::SignKhuenToneDash4),
'᩹' => Ok(TaiTham::SignKhuenToneDash5),
'᩺' => Ok(TaiTham::SignRaHaam),
'᩻' => Ok(TaiTham::SignMaiSam),
'᩼' => Ok(TaiTham::SignKhuenDashLueKaran),
'᩿' => Ok(TaiTham::CombiningCryptogrammicDot),
'᪀' => Ok(TaiTham::HoraDigitZero),
'᪁' => Ok(TaiTham::HoraDigitOne),
'᪂' => Ok(TaiTham::HoraDigitTwo),
'᪃' => Ok(TaiTham::HoraDigitThree),
'᪄' => Ok(TaiTham::HoraDigitFour),
'᪅' => Ok(TaiTham::HoraDigitFive),
'᪆' => Ok(TaiTham::HoraDigitSix),
'᪇' => Ok(TaiTham::HoraDigitSeven),
'᪈' => Ok(TaiTham::HoraDigitEight),
'᪉' => Ok(TaiTham::HoraDigitNine),
'᪐' => Ok(TaiTham::ThamDigitZero),
'᪑' => Ok(TaiTham::ThamDigitOne),
'᪒' => Ok(TaiTham::ThamDigitTwo),
'᪓' => Ok(TaiTham::ThamDigitThree),
'᪔' => Ok(TaiTham::ThamDigitFour),
'᪕' => Ok(TaiTham::ThamDigitFive),
'᪖' => Ok(TaiTham::ThamDigitSix),
'᪗' => Ok(TaiTham::ThamDigitSeven),
'᪘' => Ok(TaiTham::ThamDigitEight),
'᪙' => Ok(TaiTham::ThamDigitNine),
'᪠' => Ok(TaiTham::SignWiang),
'᪡' => Ok(TaiTham::SignWiangwaak),
'᪢' => Ok(TaiTham::SignSawan),
'᪣' => Ok(TaiTham::SignKeow),
'᪤' => Ok(TaiTham::SignHoy),
'᪥' => Ok(TaiTham::SignDokmai),
'᪦' => Ok(TaiTham::SignReversedRotatedRana),
'ᪧ' => Ok(TaiTham::SignMaiYamok),
'᪨' => Ok(TaiTham::SignKaan),
'᪩' => Ok(TaiTham::SignKaankuu),
'᪪' => Ok(TaiTham::SignSatkaan),
'᪫' => Ok(TaiTham::SignSatkaankuu),
'᪬' => Ok(TaiTham::SignHang),
'᪭' => Ok(TaiTham::SignCaang),
_ => Err(()),
}
}
}
impl Into<u32> for TaiTham {
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 TaiTham {
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 TaiTham {
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 TaiTham {
pub fn new() -> Self {
TaiTham::LetterHighKa
}
pub fn name(&self) -> String {
let s = std::format!("TaiTham{:#?}", self);
string_morph::to_sentence_case(&s)
}
}