mod constants {
pub const LETTER_A: char = '𑨀';
pub const VOWEL_SIGN_I: char = '𑨁';
pub const VOWEL_SIGN_UE: char = '𑨂';
pub const VOWEL_SIGN_U: char = '𑨃';
pub const VOWEL_SIGN_E: char = '𑨄';
pub const VOWEL_SIGN_OE: char = '𑨅';
pub const VOWEL_SIGN_O: char = '𑨆';
pub const VOWEL_SIGN_AI: char = '𑨇';
pub const VOWEL_SIGN_AU: char = '𑨈';
pub const VOWEL_SIGN_REVERSED_I: char = '𑨉';
pub const VOWEL_LENGTH_MARK: char = '𑨊';
pub const LETTER_KA: char = '𑨋';
pub const LETTER_KHA: char = '𑨌';
pub const LETTER_GA: char = '𑨍';
pub const LETTER_GHA: char = '𑨎';
pub const LETTER_NGA: char = '𑨏';
pub const LETTER_CA: char = '𑨐';
pub const LETTER_CHA: char = '𑨑';
pub const LETTER_JA: char = '𑨒';
pub const LETTER_NYA: char = '𑨓';
pub const LETTER_TTA: char = '𑨔';
pub const LETTER_TTHA: char = '𑨕';
pub const LETTER_DDA: char = '𑨖';
pub const LETTER_DDHA: char = '𑨗';
pub const LETTER_NNA: char = '𑨘';
pub const LETTER_TA: char = '𑨙';
pub const LETTER_THA: char = '𑨚';
pub const LETTER_DA: char = '𑨛';
pub const LETTER_DHA: char = '𑨜';
pub const LETTER_NA: char = '𑨝';
pub const LETTER_PA: char = '𑨞';
pub const LETTER_PHA: char = '𑨟';
pub const LETTER_BA: char = '𑨠';
pub const LETTER_BHA: char = '𑨡';
pub const LETTER_MA: char = '𑨢';
pub const LETTER_TSA: char = '𑨣';
pub const LETTER_TSHA: char = '𑨤';
pub const LETTER_DZA: char = '𑨥';
pub const LETTER_DZHA: char = '𑨦';
pub const LETTER_ZHA: char = '𑨧';
pub const LETTER_ZA: char = '𑨨';
pub const LETTER__DASH_A: char = '𑨩';
pub const LETTER_YA: char = '𑨪';
pub const LETTER_RA: char = '𑨫';
pub const LETTER_LA: char = '𑨬';
pub const LETTER_VA: char = '𑨭';
pub const LETTER_SHA: char = '𑨮';
pub const LETTER_SSA: char = '𑨯';
pub const LETTER_SA: char = '𑨰';
pub const LETTER_HA: char = '𑨱';
pub const LETTER_KSSA: char = '𑨲';
pub const FINAL_CONSONANT_MARK: char = '𑨳';
pub const SIGN_VIRAMA: char = '𑨴';
pub const SIGN_CANDRABINDU: char = '𑨵';
pub const SIGN_CANDRABINDU_WITH_ORNAMENT: char = '𑨶';
pub const SIGN_CANDRA_WITH_ORNAMENT: char = '𑨷';
pub const SIGN_ANUSVARA: char = '𑨸';
pub const SIGN_VISARGA: char = '𑨹';
pub const CLUSTER_DASH_INITIAL_LETTER_RA: char = '𑨺';
pub const CLUSTER_DASH_FINAL_LETTER_YA: char = '𑨻';
pub const CLUSTER_DASH_FINAL_LETTER_RA: char = '𑨼';
pub const CLUSTER_DASH_FINAL_LETTER_LA: char = '𑨽';
pub const CLUSTER_DASH_FINAL_LETTER_VA: char = '𑨾';
pub const INITIAL_HEAD_MARK: char = '𑨿';
pub const CLOSING_HEAD_MARK: char = '𑩀';
pub const MARK_TSHEG: char = '𑩁';
pub const MARK_SHAD: char = '𑩂';
pub const MARK_DOUBLE_SHAD: char = '𑩃';
pub const MARK_LONG_TSHEG: char = '𑩄';
pub const INITIAL_DOUBLE_DASH_LINED_HEAD_MARK: char = '𑩅';
pub const CLOSING_DOUBLE_DASH_LINED_HEAD_MARK: char = '𑩆';
pub const SUBJOINER: char = '𑩇';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum ZanabazarSquare {
LetterA,
VowelSignI,
VowelSignUe,
VowelSignU,
VowelSignE,
VowelSignOe,
VowelSignO,
VowelSignAi,
VowelSignAu,
VowelSignReversedI,
VowelLengthMark,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterTsa,
LetterTsha,
LetterDza,
LetterDzha,
LetterZha,
LetterZa,
LetterDashA,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterKssa,
FinalConsonantMark,
SignVirama,
SignCandrabindu,
SignCandrabinduWithOrnament,
SignCandraWithOrnament,
SignAnusvara,
SignVisarga,
ClusterDashInitialLetterRa,
ClusterDashFinalLetterYa,
ClusterDashFinalLetterRa,
ClusterDashFinalLetterLa,
ClusterDashFinalLetterVa,
InitialHeadMark,
ClosingHeadMark,
MarkTsheg,
MarkShad,
MarkDoubleShad,
MarkLongTsheg,
InitialDoubleDashLinedHeadMark,
ClosingDoubleDashLinedHeadMark,
Subjoiner,
}
impl Into<char> for ZanabazarSquare {
fn into(self) -> char {
use constants::*;
match self {
ZanabazarSquare::LetterA => LETTER_A,
ZanabazarSquare::VowelSignI => VOWEL_SIGN_I,
ZanabazarSquare::VowelSignUe => VOWEL_SIGN_UE,
ZanabazarSquare::VowelSignU => VOWEL_SIGN_U,
ZanabazarSquare::VowelSignE => VOWEL_SIGN_E,
ZanabazarSquare::VowelSignOe => VOWEL_SIGN_OE,
ZanabazarSquare::VowelSignO => VOWEL_SIGN_O,
ZanabazarSquare::VowelSignAi => VOWEL_SIGN_AI,
ZanabazarSquare::VowelSignAu => VOWEL_SIGN_AU,
ZanabazarSquare::VowelSignReversedI => VOWEL_SIGN_REVERSED_I,
ZanabazarSquare::VowelLengthMark => VOWEL_LENGTH_MARK,
ZanabazarSquare::LetterKa => LETTER_KA,
ZanabazarSquare::LetterKha => LETTER_KHA,
ZanabazarSquare::LetterGa => LETTER_GA,
ZanabazarSquare::LetterGha => LETTER_GHA,
ZanabazarSquare::LetterNga => LETTER_NGA,
ZanabazarSquare::LetterCa => LETTER_CA,
ZanabazarSquare::LetterCha => LETTER_CHA,
ZanabazarSquare::LetterJa => LETTER_JA,
ZanabazarSquare::LetterNya => LETTER_NYA,
ZanabazarSquare::LetterTta => LETTER_TTA,
ZanabazarSquare::LetterTtha => LETTER_TTHA,
ZanabazarSquare::LetterDda => LETTER_DDA,
ZanabazarSquare::LetterDdha => LETTER_DDHA,
ZanabazarSquare::LetterNna => LETTER_NNA,
ZanabazarSquare::LetterTa => LETTER_TA,
ZanabazarSquare::LetterTha => LETTER_THA,
ZanabazarSquare::LetterDa => LETTER_DA,
ZanabazarSquare::LetterDha => LETTER_DHA,
ZanabazarSquare::LetterNa => LETTER_NA,
ZanabazarSquare::LetterPa => LETTER_PA,
ZanabazarSquare::LetterPha => LETTER_PHA,
ZanabazarSquare::LetterBa => LETTER_BA,
ZanabazarSquare::LetterBha => LETTER_BHA,
ZanabazarSquare::LetterMa => LETTER_MA,
ZanabazarSquare::LetterTsa => LETTER_TSA,
ZanabazarSquare::LetterTsha => LETTER_TSHA,
ZanabazarSquare::LetterDza => LETTER_DZA,
ZanabazarSquare::LetterDzha => LETTER_DZHA,
ZanabazarSquare::LetterZha => LETTER_ZHA,
ZanabazarSquare::LetterZa => LETTER_ZA,
ZanabazarSquare::LetterDashA => LETTER__DASH_A,
ZanabazarSquare::LetterYa => LETTER_YA,
ZanabazarSquare::LetterRa => LETTER_RA,
ZanabazarSquare::LetterLa => LETTER_LA,
ZanabazarSquare::LetterVa => LETTER_VA,
ZanabazarSquare::LetterSha => LETTER_SHA,
ZanabazarSquare::LetterSsa => LETTER_SSA,
ZanabazarSquare::LetterSa => LETTER_SA,
ZanabazarSquare::LetterHa => LETTER_HA,
ZanabazarSquare::LetterKssa => LETTER_KSSA,
ZanabazarSquare::FinalConsonantMark => FINAL_CONSONANT_MARK,
ZanabazarSquare::SignVirama => SIGN_VIRAMA,
ZanabazarSquare::SignCandrabindu => SIGN_CANDRABINDU,
ZanabazarSquare::SignCandrabinduWithOrnament => SIGN_CANDRABINDU_WITH_ORNAMENT,
ZanabazarSquare::SignCandraWithOrnament => SIGN_CANDRA_WITH_ORNAMENT,
ZanabazarSquare::SignAnusvara => SIGN_ANUSVARA,
ZanabazarSquare::SignVisarga => SIGN_VISARGA,
ZanabazarSquare::ClusterDashInitialLetterRa => CLUSTER_DASH_INITIAL_LETTER_RA,
ZanabazarSquare::ClusterDashFinalLetterYa => CLUSTER_DASH_FINAL_LETTER_YA,
ZanabazarSquare::ClusterDashFinalLetterRa => CLUSTER_DASH_FINAL_LETTER_RA,
ZanabazarSquare::ClusterDashFinalLetterLa => CLUSTER_DASH_FINAL_LETTER_LA,
ZanabazarSquare::ClusterDashFinalLetterVa => CLUSTER_DASH_FINAL_LETTER_VA,
ZanabazarSquare::InitialHeadMark => INITIAL_HEAD_MARK,
ZanabazarSquare::ClosingHeadMark => CLOSING_HEAD_MARK,
ZanabazarSquare::MarkTsheg => MARK_TSHEG,
ZanabazarSquare::MarkShad => MARK_SHAD,
ZanabazarSquare::MarkDoubleShad => MARK_DOUBLE_SHAD,
ZanabazarSquare::MarkLongTsheg => MARK_LONG_TSHEG,
ZanabazarSquare::InitialDoubleDashLinedHeadMark => INITIAL_DOUBLE_DASH_LINED_HEAD_MARK,
ZanabazarSquare::ClosingDoubleDashLinedHeadMark => CLOSING_DOUBLE_DASH_LINED_HEAD_MARK,
ZanabazarSquare::Subjoiner => SUBJOINER,
}
}
}
impl std::convert::TryFrom<char> for ZanabazarSquare {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(ZanabazarSquare::LetterA),
VOWEL_SIGN_I => Ok(ZanabazarSquare::VowelSignI),
VOWEL_SIGN_UE => Ok(ZanabazarSquare::VowelSignUe),
VOWEL_SIGN_U => Ok(ZanabazarSquare::VowelSignU),
VOWEL_SIGN_E => Ok(ZanabazarSquare::VowelSignE),
VOWEL_SIGN_OE => Ok(ZanabazarSquare::VowelSignOe),
VOWEL_SIGN_O => Ok(ZanabazarSquare::VowelSignO),
VOWEL_SIGN_AI => Ok(ZanabazarSquare::VowelSignAi),
VOWEL_SIGN_AU => Ok(ZanabazarSquare::VowelSignAu),
VOWEL_SIGN_REVERSED_I => Ok(ZanabazarSquare::VowelSignReversedI),
VOWEL_LENGTH_MARK => Ok(ZanabazarSquare::VowelLengthMark),
LETTER_KA => Ok(ZanabazarSquare::LetterKa),
LETTER_KHA => Ok(ZanabazarSquare::LetterKha),
LETTER_GA => Ok(ZanabazarSquare::LetterGa),
LETTER_GHA => Ok(ZanabazarSquare::LetterGha),
LETTER_NGA => Ok(ZanabazarSquare::LetterNga),
LETTER_CA => Ok(ZanabazarSquare::LetterCa),
LETTER_CHA => Ok(ZanabazarSquare::LetterCha),
LETTER_JA => Ok(ZanabazarSquare::LetterJa),
LETTER_NYA => Ok(ZanabazarSquare::LetterNya),
LETTER_TTA => Ok(ZanabazarSquare::LetterTta),
LETTER_TTHA => Ok(ZanabazarSquare::LetterTtha),
LETTER_DDA => Ok(ZanabazarSquare::LetterDda),
LETTER_DDHA => Ok(ZanabazarSquare::LetterDdha),
LETTER_NNA => Ok(ZanabazarSquare::LetterNna),
LETTER_TA => Ok(ZanabazarSquare::LetterTa),
LETTER_THA => Ok(ZanabazarSquare::LetterTha),
LETTER_DA => Ok(ZanabazarSquare::LetterDa),
LETTER_DHA => Ok(ZanabazarSquare::LetterDha),
LETTER_NA => Ok(ZanabazarSquare::LetterNa),
LETTER_PA => Ok(ZanabazarSquare::LetterPa),
LETTER_PHA => Ok(ZanabazarSquare::LetterPha),
LETTER_BA => Ok(ZanabazarSquare::LetterBa),
LETTER_BHA => Ok(ZanabazarSquare::LetterBha),
LETTER_MA => Ok(ZanabazarSquare::LetterMa),
LETTER_TSA => Ok(ZanabazarSquare::LetterTsa),
LETTER_TSHA => Ok(ZanabazarSquare::LetterTsha),
LETTER_DZA => Ok(ZanabazarSquare::LetterDza),
LETTER_DZHA => Ok(ZanabazarSquare::LetterDzha),
LETTER_ZHA => Ok(ZanabazarSquare::LetterZha),
LETTER_ZA => Ok(ZanabazarSquare::LetterZa),
LETTER__DASH_A => Ok(ZanabazarSquare::LetterDashA),
LETTER_YA => Ok(ZanabazarSquare::LetterYa),
LETTER_RA => Ok(ZanabazarSquare::LetterRa),
LETTER_LA => Ok(ZanabazarSquare::LetterLa),
LETTER_VA => Ok(ZanabazarSquare::LetterVa),
LETTER_SHA => Ok(ZanabazarSquare::LetterSha),
LETTER_SSA => Ok(ZanabazarSquare::LetterSsa),
LETTER_SA => Ok(ZanabazarSquare::LetterSa),
LETTER_HA => Ok(ZanabazarSquare::LetterHa),
LETTER_KSSA => Ok(ZanabazarSquare::LetterKssa),
FINAL_CONSONANT_MARK => Ok(ZanabazarSquare::FinalConsonantMark),
SIGN_VIRAMA => Ok(ZanabazarSquare::SignVirama),
SIGN_CANDRABINDU => Ok(ZanabazarSquare::SignCandrabindu),
SIGN_CANDRABINDU_WITH_ORNAMENT => Ok(ZanabazarSquare::SignCandrabinduWithOrnament),
SIGN_CANDRA_WITH_ORNAMENT => Ok(ZanabazarSquare::SignCandraWithOrnament),
SIGN_ANUSVARA => Ok(ZanabazarSquare::SignAnusvara),
SIGN_VISARGA => Ok(ZanabazarSquare::SignVisarga),
CLUSTER_DASH_INITIAL_LETTER_RA => Ok(ZanabazarSquare::ClusterDashInitialLetterRa),
CLUSTER_DASH_FINAL_LETTER_YA => Ok(ZanabazarSquare::ClusterDashFinalLetterYa),
CLUSTER_DASH_FINAL_LETTER_RA => Ok(ZanabazarSquare::ClusterDashFinalLetterRa),
CLUSTER_DASH_FINAL_LETTER_LA => Ok(ZanabazarSquare::ClusterDashFinalLetterLa),
CLUSTER_DASH_FINAL_LETTER_VA => Ok(ZanabazarSquare::ClusterDashFinalLetterVa),
INITIAL_HEAD_MARK => Ok(ZanabazarSquare::InitialHeadMark),
CLOSING_HEAD_MARK => Ok(ZanabazarSquare::ClosingHeadMark),
MARK_TSHEG => Ok(ZanabazarSquare::MarkTsheg),
MARK_SHAD => Ok(ZanabazarSquare::MarkShad),
MARK_DOUBLE_SHAD => Ok(ZanabazarSquare::MarkDoubleShad),
MARK_LONG_TSHEG => Ok(ZanabazarSquare::MarkLongTsheg),
INITIAL_DOUBLE_DASH_LINED_HEAD_MARK => Ok(ZanabazarSquare::InitialDoubleDashLinedHeadMark),
CLOSING_DOUBLE_DASH_LINED_HEAD_MARK => Ok(ZanabazarSquare::ClosingDoubleDashLinedHeadMark),
SUBJOINER => Ok(ZanabazarSquare::Subjoiner),
_ => Err(()),
}
}
}
impl Into<u32> for ZanabazarSquare {
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 ZanabazarSquare {
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 ZanabazarSquare {
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 ZanabazarSquare {
pub fn new() -> Self {
ZanabazarSquare::LetterA
}
pub fn name(&self) -> &str {
match self {
ZanabazarSquare::LetterA => "zanabazar square letter a",
ZanabazarSquare::VowelSignI => "zanabazar square vowel sign i",
ZanabazarSquare::VowelSignUe => "zanabazar square vowel sign ue",
ZanabazarSquare::VowelSignU => "zanabazar square vowel sign u",
ZanabazarSquare::VowelSignE => "zanabazar square vowel sign e",
ZanabazarSquare::VowelSignOe => "zanabazar square vowel sign oe",
ZanabazarSquare::VowelSignO => "zanabazar square vowel sign o",
ZanabazarSquare::VowelSignAi => "zanabazar square vowel sign ai",
ZanabazarSquare::VowelSignAu => "zanabazar square vowel sign au",
ZanabazarSquare::VowelSignReversedI => "zanabazar square vowel sign reversed i",
ZanabazarSquare::VowelLengthMark => "zanabazar square vowel length mark",
ZanabazarSquare::LetterKa => "zanabazar square letter ka",
ZanabazarSquare::LetterKha => "zanabazar square letter kha",
ZanabazarSquare::LetterGa => "zanabazar square letter ga",
ZanabazarSquare::LetterGha => "zanabazar square letter gha",
ZanabazarSquare::LetterNga => "zanabazar square letter nga",
ZanabazarSquare::LetterCa => "zanabazar square letter ca",
ZanabazarSquare::LetterCha => "zanabazar square letter cha",
ZanabazarSquare::LetterJa => "zanabazar square letter ja",
ZanabazarSquare::LetterNya => "zanabazar square letter nya",
ZanabazarSquare::LetterTta => "zanabazar square letter tta",
ZanabazarSquare::LetterTtha => "zanabazar square letter ttha",
ZanabazarSquare::LetterDda => "zanabazar square letter dda",
ZanabazarSquare::LetterDdha => "zanabazar square letter ddha",
ZanabazarSquare::LetterNna => "zanabazar square letter nna",
ZanabazarSquare::LetterTa => "zanabazar square letter ta",
ZanabazarSquare::LetterTha => "zanabazar square letter tha",
ZanabazarSquare::LetterDa => "zanabazar square letter da",
ZanabazarSquare::LetterDha => "zanabazar square letter dha",
ZanabazarSquare::LetterNa => "zanabazar square letter na",
ZanabazarSquare::LetterPa => "zanabazar square letter pa",
ZanabazarSquare::LetterPha => "zanabazar square letter pha",
ZanabazarSquare::LetterBa => "zanabazar square letter ba",
ZanabazarSquare::LetterBha => "zanabazar square letter bha",
ZanabazarSquare::LetterMa => "zanabazar square letter ma",
ZanabazarSquare::LetterTsa => "zanabazar square letter tsa",
ZanabazarSquare::LetterTsha => "zanabazar square letter tsha",
ZanabazarSquare::LetterDza => "zanabazar square letter dza",
ZanabazarSquare::LetterDzha => "zanabazar square letter dzha",
ZanabazarSquare::LetterZha => "zanabazar square letter zha",
ZanabazarSquare::LetterZa => "zanabazar square letter za",
ZanabazarSquare::LetterDashA => "zanabazar square letter -a",
ZanabazarSquare::LetterYa => "zanabazar square letter ya",
ZanabazarSquare::LetterRa => "zanabazar square letter ra",
ZanabazarSquare::LetterLa => "zanabazar square letter la",
ZanabazarSquare::LetterVa => "zanabazar square letter va",
ZanabazarSquare::LetterSha => "zanabazar square letter sha",
ZanabazarSquare::LetterSsa => "zanabazar square letter ssa",
ZanabazarSquare::LetterSa => "zanabazar square letter sa",
ZanabazarSquare::LetterHa => "zanabazar square letter ha",
ZanabazarSquare::LetterKssa => "zanabazar square letter kssa",
ZanabazarSquare::FinalConsonantMark => "zanabazar square final consonant mark",
ZanabazarSquare::SignVirama => "zanabazar square sign virama",
ZanabazarSquare::SignCandrabindu => "zanabazar square sign candrabindu",
ZanabazarSquare::SignCandrabinduWithOrnament => "zanabazar square sign candrabindu with ornament",
ZanabazarSquare::SignCandraWithOrnament => "zanabazar square sign candra with ornament",
ZanabazarSquare::SignAnusvara => "zanabazar square sign anusvara",
ZanabazarSquare::SignVisarga => "zanabazar square sign visarga",
ZanabazarSquare::ClusterDashInitialLetterRa => "zanabazar square cluster-initial letter ra",
ZanabazarSquare::ClusterDashFinalLetterYa => "zanabazar square cluster-final letter ya",
ZanabazarSquare::ClusterDashFinalLetterRa => "zanabazar square cluster-final letter ra",
ZanabazarSquare::ClusterDashFinalLetterLa => "zanabazar square cluster-final letter la",
ZanabazarSquare::ClusterDashFinalLetterVa => "zanabazar square cluster-final letter va",
ZanabazarSquare::InitialHeadMark => "zanabazar square initial head mark",
ZanabazarSquare::ClosingHeadMark => "zanabazar square closing head mark",
ZanabazarSquare::MarkTsheg => "zanabazar square mark tsheg",
ZanabazarSquare::MarkShad => "zanabazar square mark shad",
ZanabazarSquare::MarkDoubleShad => "zanabazar square mark double shad",
ZanabazarSquare::MarkLongTsheg => "zanabazar square mark long tsheg",
ZanabazarSquare::InitialDoubleDashLinedHeadMark => "zanabazar square initial double-lined head mark",
ZanabazarSquare::ClosingDoubleDashLinedHeadMark => "zanabazar square closing double-lined head mark",
ZanabazarSquare::Subjoiner => "zanabazar square subjoiner",
}
}
}