mod constants {
pub const HEAD_MARK: char = '𑱰';
pub const MARK_SHAD: char = '𑱱';
pub const LETTER_KA: char = '𑱲';
pub const LETTER_KHA: char = '𑱳';
pub const LETTER_GA: 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_TA: char = '𑱺';
pub const LETTER_THA: char = '𑱻';
pub const LETTER_DA: char = '𑱼';
pub const LETTER_NA: char = '𑱽';
pub const LETTER_PA: char = '𑱾';
pub const LETTER_PHA: char = '𑱿';
pub const LETTER_BA: char = '𑲀';
pub const LETTER_MA: char = '𑲁';
pub const LETTER_TSA: char = '𑲂';
pub const LETTER_TSHA: char = '𑲃';
pub const LETTER_DZA: char = '𑲄';
pub const LETTER_WA: 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_SHA: char = '𑲌';
pub const LETTER_SA: char = '𑲍';
pub const LETTER_HA: char = '𑲎';
pub const LETTER_A: char = '𑲏';
pub const SUBJOINED_LETTER_KA: char = '𑲒';
pub const SUBJOINED_LETTER_KHA: char = '𑲓';
pub const SUBJOINED_LETTER_GA: char = '𑲔';
pub const SUBJOINED_LETTER_NGA: char = '𑲕';
pub const SUBJOINED_LETTER_CA: char = '𑲖';
pub const SUBJOINED_LETTER_CHA: char = '𑲗';
pub const SUBJOINED_LETTER_JA: char = '𑲘';
pub const SUBJOINED_LETTER_NYA: char = '𑲙';
pub const SUBJOINED_LETTER_TA: char = '𑲚';
pub const SUBJOINED_LETTER_THA: char = '𑲛';
pub const SUBJOINED_LETTER_DA: char = '𑲜';
pub const SUBJOINED_LETTER_NA: char = '𑲝';
pub const SUBJOINED_LETTER_PA: char = '𑲞';
pub const SUBJOINED_LETTER_PHA: char = '𑲟';
pub const SUBJOINED_LETTER_BA: char = '𑲠';
pub const SUBJOINED_LETTER_MA: char = '𑲡';
pub const SUBJOINED_LETTER_TSA: char = '𑲢';
pub const SUBJOINED_LETTER_TSHA: char = '𑲣';
pub const SUBJOINED_LETTER_DZA: char = '𑲤';
pub const SUBJOINED_LETTER_WA: char = '𑲥';
pub const SUBJOINED_LETTER_ZHA: char = '𑲦';
pub const SUBJOINED_LETTER_ZA: char = '𑲧';
pub const SUBJOINED_LETTER_YA: char = '𑲩';
pub const SUBJOINED_LETTER_RA: char = '𑲪';
pub const SUBJOINED_LETTER_LA: char = '𑲫';
pub const SUBJOINED_LETTER_SHA: char = '𑲬';
pub const SUBJOINED_LETTER_SA: char = '𑲭';
pub const SUBJOINED_LETTER_HA: char = '𑲮';
pub const SUBJOINED_LETTER_A: char = '𑲯';
pub const VOWEL_SIGN_AA: char = '𑲰';
pub const VOWEL_SIGN_I: char = '𑲱';
pub const VOWEL_SIGN_U: char = '𑲲';
pub const VOWEL_SIGN_E: char = '𑲳';
pub const VOWEL_SIGN_O: char = '𑲴';
pub const SIGN_ANUSVARA: char = '𑲵';
pub const SIGN_CANDRABINDU: char = '𑲶';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Marchen {
HeadMark,
MarkShad,
LetterKa,
LetterKha,
LetterGa,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterNya,
LetterTa,
LetterTha,
LetterDa,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterMa,
LetterTsa,
LetterTsha,
LetterDza,
LetterWa,
LetterZha,
LetterZa,
LetterDashA,
LetterYa,
LetterRa,
LetterLa,
LetterSha,
LetterSa,
LetterHa,
LetterA,
SubjoinedLetterKa,
SubjoinedLetterKha,
SubjoinedLetterGa,
SubjoinedLetterNga,
SubjoinedLetterCa,
SubjoinedLetterCha,
SubjoinedLetterJa,
SubjoinedLetterNya,
SubjoinedLetterTa,
SubjoinedLetterTha,
SubjoinedLetterDa,
SubjoinedLetterNa,
SubjoinedLetterPa,
SubjoinedLetterPha,
SubjoinedLetterBa,
SubjoinedLetterMa,
SubjoinedLetterTsa,
SubjoinedLetterTsha,
SubjoinedLetterDza,
SubjoinedLetterWa,
SubjoinedLetterZha,
SubjoinedLetterZa,
SubjoinedLetterYa,
SubjoinedLetterRa,
SubjoinedLetterLa,
SubjoinedLetterSha,
SubjoinedLetterSa,
SubjoinedLetterHa,
SubjoinedLetterA,
VowelSignAa,
VowelSignI,
VowelSignU,
VowelSignE,
VowelSignO,
SignAnusvara,
SignCandrabindu,
}
impl Into<char> for Marchen {
fn into(self) -> char {
use constants::*;
match self {
Marchen::HeadMark => HEAD_MARK,
Marchen::MarkShad => MARK_SHAD,
Marchen::LetterKa => LETTER_KA,
Marchen::LetterKha => LETTER_KHA,
Marchen::LetterGa => LETTER_GA,
Marchen::LetterNga => LETTER_NGA,
Marchen::LetterCa => LETTER_CA,
Marchen::LetterCha => LETTER_CHA,
Marchen::LetterJa => LETTER_JA,
Marchen::LetterNya => LETTER_NYA,
Marchen::LetterTa => LETTER_TA,
Marchen::LetterTha => LETTER_THA,
Marchen::LetterDa => LETTER_DA,
Marchen::LetterNa => LETTER_NA,
Marchen::LetterPa => LETTER_PA,
Marchen::LetterPha => LETTER_PHA,
Marchen::LetterBa => LETTER_BA,
Marchen::LetterMa => LETTER_MA,
Marchen::LetterTsa => LETTER_TSA,
Marchen::LetterTsha => LETTER_TSHA,
Marchen::LetterDza => LETTER_DZA,
Marchen::LetterWa => LETTER_WA,
Marchen::LetterZha => LETTER_ZHA,
Marchen::LetterZa => LETTER_ZA,
Marchen::LetterDashA => LETTER__DASH_A,
Marchen::LetterYa => LETTER_YA,
Marchen::LetterRa => LETTER_RA,
Marchen::LetterLa => LETTER_LA,
Marchen::LetterSha => LETTER_SHA,
Marchen::LetterSa => LETTER_SA,
Marchen::LetterHa => LETTER_HA,
Marchen::LetterA => LETTER_A,
Marchen::SubjoinedLetterKa => SUBJOINED_LETTER_KA,
Marchen::SubjoinedLetterKha => SUBJOINED_LETTER_KHA,
Marchen::SubjoinedLetterGa => SUBJOINED_LETTER_GA,
Marchen::SubjoinedLetterNga => SUBJOINED_LETTER_NGA,
Marchen::SubjoinedLetterCa => SUBJOINED_LETTER_CA,
Marchen::SubjoinedLetterCha => SUBJOINED_LETTER_CHA,
Marchen::SubjoinedLetterJa => SUBJOINED_LETTER_JA,
Marchen::SubjoinedLetterNya => SUBJOINED_LETTER_NYA,
Marchen::SubjoinedLetterTa => SUBJOINED_LETTER_TA,
Marchen::SubjoinedLetterTha => SUBJOINED_LETTER_THA,
Marchen::SubjoinedLetterDa => SUBJOINED_LETTER_DA,
Marchen::SubjoinedLetterNa => SUBJOINED_LETTER_NA,
Marchen::SubjoinedLetterPa => SUBJOINED_LETTER_PA,
Marchen::SubjoinedLetterPha => SUBJOINED_LETTER_PHA,
Marchen::SubjoinedLetterBa => SUBJOINED_LETTER_BA,
Marchen::SubjoinedLetterMa => SUBJOINED_LETTER_MA,
Marchen::SubjoinedLetterTsa => SUBJOINED_LETTER_TSA,
Marchen::SubjoinedLetterTsha => SUBJOINED_LETTER_TSHA,
Marchen::SubjoinedLetterDza => SUBJOINED_LETTER_DZA,
Marchen::SubjoinedLetterWa => SUBJOINED_LETTER_WA,
Marchen::SubjoinedLetterZha => SUBJOINED_LETTER_ZHA,
Marchen::SubjoinedLetterZa => SUBJOINED_LETTER_ZA,
Marchen::SubjoinedLetterYa => SUBJOINED_LETTER_YA,
Marchen::SubjoinedLetterRa => SUBJOINED_LETTER_RA,
Marchen::SubjoinedLetterLa => SUBJOINED_LETTER_LA,
Marchen::SubjoinedLetterSha => SUBJOINED_LETTER_SHA,
Marchen::SubjoinedLetterSa => SUBJOINED_LETTER_SA,
Marchen::SubjoinedLetterHa => SUBJOINED_LETTER_HA,
Marchen::SubjoinedLetterA => SUBJOINED_LETTER_A,
Marchen::VowelSignAa => VOWEL_SIGN_AA,
Marchen::VowelSignI => VOWEL_SIGN_I,
Marchen::VowelSignU => VOWEL_SIGN_U,
Marchen::VowelSignE => VOWEL_SIGN_E,
Marchen::VowelSignO => VOWEL_SIGN_O,
Marchen::SignAnusvara => SIGN_ANUSVARA,
Marchen::SignCandrabindu => SIGN_CANDRABINDU,
}
}
}
impl std::convert::TryFrom<char> for Marchen {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
HEAD_MARK => Ok(Marchen::HeadMark),
MARK_SHAD => Ok(Marchen::MarkShad),
LETTER_KA => Ok(Marchen::LetterKa),
LETTER_KHA => Ok(Marchen::LetterKha),
LETTER_GA => Ok(Marchen::LetterGa),
LETTER_NGA => Ok(Marchen::LetterNga),
LETTER_CA => Ok(Marchen::LetterCa),
LETTER_CHA => Ok(Marchen::LetterCha),
LETTER_JA => Ok(Marchen::LetterJa),
LETTER_NYA => Ok(Marchen::LetterNya),
LETTER_TA => Ok(Marchen::LetterTa),
LETTER_THA => Ok(Marchen::LetterTha),
LETTER_DA => Ok(Marchen::LetterDa),
LETTER_NA => Ok(Marchen::LetterNa),
LETTER_PA => Ok(Marchen::LetterPa),
LETTER_PHA => Ok(Marchen::LetterPha),
LETTER_BA => Ok(Marchen::LetterBa),
LETTER_MA => Ok(Marchen::LetterMa),
LETTER_TSA => Ok(Marchen::LetterTsa),
LETTER_TSHA => Ok(Marchen::LetterTsha),
LETTER_DZA => Ok(Marchen::LetterDza),
LETTER_WA => Ok(Marchen::LetterWa),
LETTER_ZHA => Ok(Marchen::LetterZha),
LETTER_ZA => Ok(Marchen::LetterZa),
LETTER__DASH_A => Ok(Marchen::LetterDashA),
LETTER_YA => Ok(Marchen::LetterYa),
LETTER_RA => Ok(Marchen::LetterRa),
LETTER_LA => Ok(Marchen::LetterLa),
LETTER_SHA => Ok(Marchen::LetterSha),
LETTER_SA => Ok(Marchen::LetterSa),
LETTER_HA => Ok(Marchen::LetterHa),
LETTER_A => Ok(Marchen::LetterA),
SUBJOINED_LETTER_KA => Ok(Marchen::SubjoinedLetterKa),
SUBJOINED_LETTER_KHA => Ok(Marchen::SubjoinedLetterKha),
SUBJOINED_LETTER_GA => Ok(Marchen::SubjoinedLetterGa),
SUBJOINED_LETTER_NGA => Ok(Marchen::SubjoinedLetterNga),
SUBJOINED_LETTER_CA => Ok(Marchen::SubjoinedLetterCa),
SUBJOINED_LETTER_CHA => Ok(Marchen::SubjoinedLetterCha),
SUBJOINED_LETTER_JA => Ok(Marchen::SubjoinedLetterJa),
SUBJOINED_LETTER_NYA => Ok(Marchen::SubjoinedLetterNya),
SUBJOINED_LETTER_TA => Ok(Marchen::SubjoinedLetterTa),
SUBJOINED_LETTER_THA => Ok(Marchen::SubjoinedLetterTha),
SUBJOINED_LETTER_DA => Ok(Marchen::SubjoinedLetterDa),
SUBJOINED_LETTER_NA => Ok(Marchen::SubjoinedLetterNa),
SUBJOINED_LETTER_PA => Ok(Marchen::SubjoinedLetterPa),
SUBJOINED_LETTER_PHA => Ok(Marchen::SubjoinedLetterPha),
SUBJOINED_LETTER_BA => Ok(Marchen::SubjoinedLetterBa),
SUBJOINED_LETTER_MA => Ok(Marchen::SubjoinedLetterMa),
SUBJOINED_LETTER_TSA => Ok(Marchen::SubjoinedLetterTsa),
SUBJOINED_LETTER_TSHA => Ok(Marchen::SubjoinedLetterTsha),
SUBJOINED_LETTER_DZA => Ok(Marchen::SubjoinedLetterDza),
SUBJOINED_LETTER_WA => Ok(Marchen::SubjoinedLetterWa),
SUBJOINED_LETTER_ZHA => Ok(Marchen::SubjoinedLetterZha),
SUBJOINED_LETTER_ZA => Ok(Marchen::SubjoinedLetterZa),
SUBJOINED_LETTER_YA => Ok(Marchen::SubjoinedLetterYa),
SUBJOINED_LETTER_RA => Ok(Marchen::SubjoinedLetterRa),
SUBJOINED_LETTER_LA => Ok(Marchen::SubjoinedLetterLa),
SUBJOINED_LETTER_SHA => Ok(Marchen::SubjoinedLetterSha),
SUBJOINED_LETTER_SA => Ok(Marchen::SubjoinedLetterSa),
SUBJOINED_LETTER_HA => Ok(Marchen::SubjoinedLetterHa),
SUBJOINED_LETTER_A => Ok(Marchen::SubjoinedLetterA),
VOWEL_SIGN_AA => Ok(Marchen::VowelSignAa),
VOWEL_SIGN_I => Ok(Marchen::VowelSignI),
VOWEL_SIGN_U => Ok(Marchen::VowelSignU),
VOWEL_SIGN_E => Ok(Marchen::VowelSignE),
VOWEL_SIGN_O => Ok(Marchen::VowelSignO),
SIGN_ANUSVARA => Ok(Marchen::SignAnusvara),
SIGN_CANDRABINDU => Ok(Marchen::SignCandrabindu),
_ => Err(()),
}
}
}
impl Into<u32> for Marchen {
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 Marchen {
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 Marchen {
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 Marchen {
pub fn new() -> Self {
Marchen::HeadMark
}
pub fn name(&self) -> &str {
match self {
Marchen::HeadMark => "marchen head mark",
Marchen::MarkShad => "marchen mark shad",
Marchen::LetterKa => "marchen letter ka",
Marchen::LetterKha => "marchen letter kha",
Marchen::LetterGa => "marchen letter ga",
Marchen::LetterNga => "marchen letter nga",
Marchen::LetterCa => "marchen letter ca",
Marchen::LetterCha => "marchen letter cha",
Marchen::LetterJa => "marchen letter ja",
Marchen::LetterNya => "marchen letter nya",
Marchen::LetterTa => "marchen letter ta",
Marchen::LetterTha => "marchen letter tha",
Marchen::LetterDa => "marchen letter da",
Marchen::LetterNa => "marchen letter na",
Marchen::LetterPa => "marchen letter pa",
Marchen::LetterPha => "marchen letter pha",
Marchen::LetterBa => "marchen letter ba",
Marchen::LetterMa => "marchen letter ma",
Marchen::LetterTsa => "marchen letter tsa",
Marchen::LetterTsha => "marchen letter tsha",
Marchen::LetterDza => "marchen letter dza",
Marchen::LetterWa => "marchen letter wa",
Marchen::LetterZha => "marchen letter zha",
Marchen::LetterZa => "marchen letter za",
Marchen::LetterDashA => "marchen letter -a",
Marchen::LetterYa => "marchen letter ya",
Marchen::LetterRa => "marchen letter ra",
Marchen::LetterLa => "marchen letter la",
Marchen::LetterSha => "marchen letter sha",
Marchen::LetterSa => "marchen letter sa",
Marchen::LetterHa => "marchen letter ha",
Marchen::LetterA => "marchen letter a",
Marchen::SubjoinedLetterKa => "marchen subjoined letter ka",
Marchen::SubjoinedLetterKha => "marchen subjoined letter kha",
Marchen::SubjoinedLetterGa => "marchen subjoined letter ga",
Marchen::SubjoinedLetterNga => "marchen subjoined letter nga",
Marchen::SubjoinedLetterCa => "marchen subjoined letter ca",
Marchen::SubjoinedLetterCha => "marchen subjoined letter cha",
Marchen::SubjoinedLetterJa => "marchen subjoined letter ja",
Marchen::SubjoinedLetterNya => "marchen subjoined letter nya",
Marchen::SubjoinedLetterTa => "marchen subjoined letter ta",
Marchen::SubjoinedLetterTha => "marchen subjoined letter tha",
Marchen::SubjoinedLetterDa => "marchen subjoined letter da",
Marchen::SubjoinedLetterNa => "marchen subjoined letter na",
Marchen::SubjoinedLetterPa => "marchen subjoined letter pa",
Marchen::SubjoinedLetterPha => "marchen subjoined letter pha",
Marchen::SubjoinedLetterBa => "marchen subjoined letter ba",
Marchen::SubjoinedLetterMa => "marchen subjoined letter ma",
Marchen::SubjoinedLetterTsa => "marchen subjoined letter tsa",
Marchen::SubjoinedLetterTsha => "marchen subjoined letter tsha",
Marchen::SubjoinedLetterDza => "marchen subjoined letter dza",
Marchen::SubjoinedLetterWa => "marchen subjoined letter wa",
Marchen::SubjoinedLetterZha => "marchen subjoined letter zha",
Marchen::SubjoinedLetterZa => "marchen subjoined letter za",
Marchen::SubjoinedLetterYa => "marchen subjoined letter ya",
Marchen::SubjoinedLetterRa => "marchen subjoined letter ra",
Marchen::SubjoinedLetterLa => "marchen subjoined letter la",
Marchen::SubjoinedLetterSha => "marchen subjoined letter sha",
Marchen::SubjoinedLetterSa => "marchen subjoined letter sa",
Marchen::SubjoinedLetterHa => "marchen subjoined letter ha",
Marchen::SubjoinedLetterA => "marchen subjoined letter a",
Marchen::VowelSignAa => "marchen vowel sign aa",
Marchen::VowelSignI => "marchen vowel sign i",
Marchen::VowelSignU => "marchen vowel sign u",
Marchen::VowelSignE => "marchen vowel sign e",
Marchen::VowelSignO => "marchen vowel sign o",
Marchen::SignAnusvara => "marchen sign anusvara",
Marchen::SignCandrabindu => "marchen sign candrabindu",
}
}
}