mod constants {
pub const LETTER_A: char = '𑐀';
pub const LETTER_AA: char = '𑐁';
pub const LETTER_I: char = '𑐂';
pub const LETTER_II: char = '𑐃';
pub const LETTER_U: char = '𑐄';
pub const LETTER_UU: char = '𑐅';
pub const LETTER_VOCALIC_R: char = '𑐆';
pub const LETTER_VOCALIC_RR: char = '𑐇';
pub const LETTER_VOCALIC_L: char = '𑐈';
pub const LETTER_VOCALIC_LL: char = '𑐉';
pub const LETTER_E: char = '𑐊';
pub const LETTER_AI: char = '𑐋';
pub const LETTER_O: char = '𑐌';
pub const LETTER_AU: 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_NGHA: char = '𑐓';
pub const LETTER_CA: char = '𑐔';
pub const LETTER_CHA: char = '𑐕';
pub const LETTER_JA: char = '𑐖';
pub const LETTER_JHA: char = '𑐗';
pub const LETTER_NYA: char = '𑐘';
pub const LETTER_NYHA: 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_NHA: 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_MHA: char = '𑐪';
pub const LETTER_YA: char = '𑐫';
pub const LETTER_RA: char = '𑐬';
pub const LETTER_RHA: char = '𑐭';
pub const LETTER_LA: char = '𑐮';
pub const LETTER_LHA: char = '𑐯';
pub const LETTER_WA: char = '𑐰';
pub const LETTER_SHA: char = '𑐱';
pub const LETTER_SSA: char = '𑐲';
pub const LETTER_SA: char = '𑐳';
pub const LETTER_HA: char = '𑐴';
pub const VOWEL_SIGN_AA: char = '𑐵';
pub const VOWEL_SIGN_I: char = '𑐶';
pub const VOWEL_SIGN_II: char = '𑐷';
pub const VOWEL_SIGN_U: char = '𑐸';
pub const VOWEL_SIGN_UU: char = '𑐹';
pub const VOWEL_SIGN_VOCALIC_R: char = '𑐺';
pub const VOWEL_SIGN_VOCALIC_RR: char = '𑐻';
pub const VOWEL_SIGN_VOCALIC_L: char = '𑐼';
pub const VOWEL_SIGN_VOCALIC_LL: char = '𑐽';
pub const VOWEL_SIGN_E: char = '𑐾';
pub const VOWEL_SIGN_AI: char = '𑐿';
pub const VOWEL_SIGN_O: char = '𑑀';
pub const VOWEL_SIGN_AU: char = '𑑁';
pub const SIGN_VIRAMA: char = '𑑂';
pub const SIGN_CANDRABINDU: char = '𑑃';
pub const SIGN_ANUSVARA: char = '𑑄';
pub const SIGN_VISARGA: char = '𑑅';
pub const SIGN_NUKTA: char = '𑑆';
pub const SIGN_AVAGRAHA: char = '𑑇';
pub const SIGN_FINAL_ANUSVARA: char = '𑑈';
pub const OM: char = '𑑉';
pub const SIDDHI: char = '𑑊';
pub const DANDA: char = '𑑋';
pub const DOUBLE_DANDA: char = '𑑌';
pub const COMMA: char = '𑑍';
pub const GAP_FILLER: char = '𑑎';
pub const ABBREVIATION_SIGN: char = '𑑏';
pub const DIGIT_ZERO: char = '𑑐';
pub const DIGIT_ONE: char = '𑑑';
pub const DIGIT_TWO: char = '𑑒';
pub const DIGIT_THREE: char = '𑑓';
pub const DIGIT_FOUR: char = '𑑔';
pub const DIGIT_FIVE: char = '𑑕';
pub const DIGIT_SIX: char = '𑑖';
pub const DIGIT_SEVEN: char = '𑑗';
pub const DIGIT_EIGHT: char = '𑑘';
pub const DIGIT_NINE: char = '𑑙';
pub const PLACEHOLDER_MARK: char = '𑑛';
pub const INSERTION_SIGN: char = '𑑝';
pub const SANDHI_MARK: char = '𑑞';
pub const LETTER_VEDIC_ANUSVARA: char = '𑑟';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Newa {
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicRr,
LetterVocalicL,
LetterVocalicLl,
LetterE,
LetterAi,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterNgha,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterNyha,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterNha,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterMha,
LetterYa,
LetterRa,
LetterRha,
LetterLa,
LetterLha,
LetterWa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignVocalicL,
VowelSignVocalicLl,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignVirama,
SignCandrabindu,
SignAnusvara,
SignVisarga,
SignNukta,
SignAvagraha,
SignFinalAnusvara,
Om,
Siddhi,
Danda,
DoubleDanda,
Comma,
GapFiller,
AbbreviationSign,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
PlaceholderMark,
InsertionSign,
SandhiMark,
LetterVedicAnusvara,
}
impl Into<char> for Newa {
fn into(self) -> char {
use constants::*;
match self {
Newa::LetterA => LETTER_A,
Newa::LetterAa => LETTER_AA,
Newa::LetterI => LETTER_I,
Newa::LetterIi => LETTER_II,
Newa::LetterU => LETTER_U,
Newa::LetterUu => LETTER_UU,
Newa::LetterVocalicR => LETTER_VOCALIC_R,
Newa::LetterVocalicRr => LETTER_VOCALIC_RR,
Newa::LetterVocalicL => LETTER_VOCALIC_L,
Newa::LetterVocalicLl => LETTER_VOCALIC_LL,
Newa::LetterE => LETTER_E,
Newa::LetterAi => LETTER_AI,
Newa::LetterO => LETTER_O,
Newa::LetterAu => LETTER_AU,
Newa::LetterKa => LETTER_KA,
Newa::LetterKha => LETTER_KHA,
Newa::LetterGa => LETTER_GA,
Newa::LetterGha => LETTER_GHA,
Newa::LetterNga => LETTER_NGA,
Newa::LetterNgha => LETTER_NGHA,
Newa::LetterCa => LETTER_CA,
Newa::LetterCha => LETTER_CHA,
Newa::LetterJa => LETTER_JA,
Newa::LetterJha => LETTER_JHA,
Newa::LetterNya => LETTER_NYA,
Newa::LetterNyha => LETTER_NYHA,
Newa::LetterTta => LETTER_TTA,
Newa::LetterTtha => LETTER_TTHA,
Newa::LetterDda => LETTER_DDA,
Newa::LetterDdha => LETTER_DDHA,
Newa::LetterNna => LETTER_NNA,
Newa::LetterTa => LETTER_TA,
Newa::LetterTha => LETTER_THA,
Newa::LetterDa => LETTER_DA,
Newa::LetterDha => LETTER_DHA,
Newa::LetterNa => LETTER_NA,
Newa::LetterNha => LETTER_NHA,
Newa::LetterPa => LETTER_PA,
Newa::LetterPha => LETTER_PHA,
Newa::LetterBa => LETTER_BA,
Newa::LetterBha => LETTER_BHA,
Newa::LetterMa => LETTER_MA,
Newa::LetterMha => LETTER_MHA,
Newa::LetterYa => LETTER_YA,
Newa::LetterRa => LETTER_RA,
Newa::LetterRha => LETTER_RHA,
Newa::LetterLa => LETTER_LA,
Newa::LetterLha => LETTER_LHA,
Newa::LetterWa => LETTER_WA,
Newa::LetterSha => LETTER_SHA,
Newa::LetterSsa => LETTER_SSA,
Newa::LetterSa => LETTER_SA,
Newa::LetterHa => LETTER_HA,
Newa::VowelSignAa => VOWEL_SIGN_AA,
Newa::VowelSignI => VOWEL_SIGN_I,
Newa::VowelSignIi => VOWEL_SIGN_II,
Newa::VowelSignU => VOWEL_SIGN_U,
Newa::VowelSignUu => VOWEL_SIGN_UU,
Newa::VowelSignVocalicR => VOWEL_SIGN_VOCALIC_R,
Newa::VowelSignVocalicRr => VOWEL_SIGN_VOCALIC_RR,
Newa::VowelSignVocalicL => VOWEL_SIGN_VOCALIC_L,
Newa::VowelSignVocalicLl => VOWEL_SIGN_VOCALIC_LL,
Newa::VowelSignE => VOWEL_SIGN_E,
Newa::VowelSignAi => VOWEL_SIGN_AI,
Newa::VowelSignO => VOWEL_SIGN_O,
Newa::VowelSignAu => VOWEL_SIGN_AU,
Newa::SignVirama => SIGN_VIRAMA,
Newa::SignCandrabindu => SIGN_CANDRABINDU,
Newa::SignAnusvara => SIGN_ANUSVARA,
Newa::SignVisarga => SIGN_VISARGA,
Newa::SignNukta => SIGN_NUKTA,
Newa::SignAvagraha => SIGN_AVAGRAHA,
Newa::SignFinalAnusvara => SIGN_FINAL_ANUSVARA,
Newa::Om => OM,
Newa::Siddhi => SIDDHI,
Newa::Danda => DANDA,
Newa::DoubleDanda => DOUBLE_DANDA,
Newa::Comma => COMMA,
Newa::GapFiller => GAP_FILLER,
Newa::AbbreviationSign => ABBREVIATION_SIGN,
Newa::DigitZero => DIGIT_ZERO,
Newa::DigitOne => DIGIT_ONE,
Newa::DigitTwo => DIGIT_TWO,
Newa::DigitThree => DIGIT_THREE,
Newa::DigitFour => DIGIT_FOUR,
Newa::DigitFive => DIGIT_FIVE,
Newa::DigitSix => DIGIT_SIX,
Newa::DigitSeven => DIGIT_SEVEN,
Newa::DigitEight => DIGIT_EIGHT,
Newa::DigitNine => DIGIT_NINE,
Newa::PlaceholderMark => PLACEHOLDER_MARK,
Newa::InsertionSign => INSERTION_SIGN,
Newa::SandhiMark => SANDHI_MARK,
Newa::LetterVedicAnusvara => LETTER_VEDIC_ANUSVARA,
}
}
}
impl std::convert::TryFrom<char> for Newa {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Newa::LetterA),
LETTER_AA => Ok(Newa::LetterAa),
LETTER_I => Ok(Newa::LetterI),
LETTER_II => Ok(Newa::LetterIi),
LETTER_U => Ok(Newa::LetterU),
LETTER_UU => Ok(Newa::LetterUu),
LETTER_VOCALIC_R => Ok(Newa::LetterVocalicR),
LETTER_VOCALIC_RR => Ok(Newa::LetterVocalicRr),
LETTER_VOCALIC_L => Ok(Newa::LetterVocalicL),
LETTER_VOCALIC_LL => Ok(Newa::LetterVocalicLl),
LETTER_E => Ok(Newa::LetterE),
LETTER_AI => Ok(Newa::LetterAi),
LETTER_O => Ok(Newa::LetterO),
LETTER_AU => Ok(Newa::LetterAu),
LETTER_KA => Ok(Newa::LetterKa),
LETTER_KHA => Ok(Newa::LetterKha),
LETTER_GA => Ok(Newa::LetterGa),
LETTER_GHA => Ok(Newa::LetterGha),
LETTER_NGA => Ok(Newa::LetterNga),
LETTER_NGHA => Ok(Newa::LetterNgha),
LETTER_CA => Ok(Newa::LetterCa),
LETTER_CHA => Ok(Newa::LetterCha),
LETTER_JA => Ok(Newa::LetterJa),
LETTER_JHA => Ok(Newa::LetterJha),
LETTER_NYA => Ok(Newa::LetterNya),
LETTER_NYHA => Ok(Newa::LetterNyha),
LETTER_TTA => Ok(Newa::LetterTta),
LETTER_TTHA => Ok(Newa::LetterTtha),
LETTER_DDA => Ok(Newa::LetterDda),
LETTER_DDHA => Ok(Newa::LetterDdha),
LETTER_NNA => Ok(Newa::LetterNna),
LETTER_TA => Ok(Newa::LetterTa),
LETTER_THA => Ok(Newa::LetterTha),
LETTER_DA => Ok(Newa::LetterDa),
LETTER_DHA => Ok(Newa::LetterDha),
LETTER_NA => Ok(Newa::LetterNa),
LETTER_NHA => Ok(Newa::LetterNha),
LETTER_PA => Ok(Newa::LetterPa),
LETTER_PHA => Ok(Newa::LetterPha),
LETTER_BA => Ok(Newa::LetterBa),
LETTER_BHA => Ok(Newa::LetterBha),
LETTER_MA => Ok(Newa::LetterMa),
LETTER_MHA => Ok(Newa::LetterMha),
LETTER_YA => Ok(Newa::LetterYa),
LETTER_RA => Ok(Newa::LetterRa),
LETTER_RHA => Ok(Newa::LetterRha),
LETTER_LA => Ok(Newa::LetterLa),
LETTER_LHA => Ok(Newa::LetterLha),
LETTER_WA => Ok(Newa::LetterWa),
LETTER_SHA => Ok(Newa::LetterSha),
LETTER_SSA => Ok(Newa::LetterSsa),
LETTER_SA => Ok(Newa::LetterSa),
LETTER_HA => Ok(Newa::LetterHa),
VOWEL_SIGN_AA => Ok(Newa::VowelSignAa),
VOWEL_SIGN_I => Ok(Newa::VowelSignI),
VOWEL_SIGN_II => Ok(Newa::VowelSignIi),
VOWEL_SIGN_U => Ok(Newa::VowelSignU),
VOWEL_SIGN_UU => Ok(Newa::VowelSignUu),
VOWEL_SIGN_VOCALIC_R => Ok(Newa::VowelSignVocalicR),
VOWEL_SIGN_VOCALIC_RR => Ok(Newa::VowelSignVocalicRr),
VOWEL_SIGN_VOCALIC_L => Ok(Newa::VowelSignVocalicL),
VOWEL_SIGN_VOCALIC_LL => Ok(Newa::VowelSignVocalicLl),
VOWEL_SIGN_E => Ok(Newa::VowelSignE),
VOWEL_SIGN_AI => Ok(Newa::VowelSignAi),
VOWEL_SIGN_O => Ok(Newa::VowelSignO),
VOWEL_SIGN_AU => Ok(Newa::VowelSignAu),
SIGN_VIRAMA => Ok(Newa::SignVirama),
SIGN_CANDRABINDU => Ok(Newa::SignCandrabindu),
SIGN_ANUSVARA => Ok(Newa::SignAnusvara),
SIGN_VISARGA => Ok(Newa::SignVisarga),
SIGN_NUKTA => Ok(Newa::SignNukta),
SIGN_AVAGRAHA => Ok(Newa::SignAvagraha),
SIGN_FINAL_ANUSVARA => Ok(Newa::SignFinalAnusvara),
OM => Ok(Newa::Om),
SIDDHI => Ok(Newa::Siddhi),
DANDA => Ok(Newa::Danda),
DOUBLE_DANDA => Ok(Newa::DoubleDanda),
COMMA => Ok(Newa::Comma),
GAP_FILLER => Ok(Newa::GapFiller),
ABBREVIATION_SIGN => Ok(Newa::AbbreviationSign),
DIGIT_ZERO => Ok(Newa::DigitZero),
DIGIT_ONE => Ok(Newa::DigitOne),
DIGIT_TWO => Ok(Newa::DigitTwo),
DIGIT_THREE => Ok(Newa::DigitThree),
DIGIT_FOUR => Ok(Newa::DigitFour),
DIGIT_FIVE => Ok(Newa::DigitFive),
DIGIT_SIX => Ok(Newa::DigitSix),
DIGIT_SEVEN => Ok(Newa::DigitSeven),
DIGIT_EIGHT => Ok(Newa::DigitEight),
DIGIT_NINE => Ok(Newa::DigitNine),
PLACEHOLDER_MARK => Ok(Newa::PlaceholderMark),
INSERTION_SIGN => Ok(Newa::InsertionSign),
SANDHI_MARK => Ok(Newa::SandhiMark),
LETTER_VEDIC_ANUSVARA => Ok(Newa::LetterVedicAnusvara),
_ => Err(()),
}
}
}
impl Into<u32> for Newa {
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 Newa {
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 Newa {
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 Newa {
pub fn new() -> Self {
Newa::LetterA
}
pub fn name(&self) -> &str {
match self {
Newa::LetterA => "newa letter a",
Newa::LetterAa => "newa letter aa",
Newa::LetterI => "newa letter i",
Newa::LetterIi => "newa letter ii",
Newa::LetterU => "newa letter u",
Newa::LetterUu => "newa letter uu",
Newa::LetterVocalicR => "newa letter vocalic r",
Newa::LetterVocalicRr => "newa letter vocalic rr",
Newa::LetterVocalicL => "newa letter vocalic l",
Newa::LetterVocalicLl => "newa letter vocalic ll",
Newa::LetterE => "newa letter e",
Newa::LetterAi => "newa letter ai",
Newa::LetterO => "newa letter o",
Newa::LetterAu => "newa letter au",
Newa::LetterKa => "newa letter ka",
Newa::LetterKha => "newa letter kha",
Newa::LetterGa => "newa letter ga",
Newa::LetterGha => "newa letter gha",
Newa::LetterNga => "newa letter nga",
Newa::LetterNgha => "newa letter ngha",
Newa::LetterCa => "newa letter ca",
Newa::LetterCha => "newa letter cha",
Newa::LetterJa => "newa letter ja",
Newa::LetterJha => "newa letter jha",
Newa::LetterNya => "newa letter nya",
Newa::LetterNyha => "newa letter nyha",
Newa::LetterTta => "newa letter tta",
Newa::LetterTtha => "newa letter ttha",
Newa::LetterDda => "newa letter dda",
Newa::LetterDdha => "newa letter ddha",
Newa::LetterNna => "newa letter nna",
Newa::LetterTa => "newa letter ta",
Newa::LetterTha => "newa letter tha",
Newa::LetterDa => "newa letter da",
Newa::LetterDha => "newa letter dha",
Newa::LetterNa => "newa letter na",
Newa::LetterNha => "newa letter nha",
Newa::LetterPa => "newa letter pa",
Newa::LetterPha => "newa letter pha",
Newa::LetterBa => "newa letter ba",
Newa::LetterBha => "newa letter bha",
Newa::LetterMa => "newa letter ma",
Newa::LetterMha => "newa letter mha",
Newa::LetterYa => "newa letter ya",
Newa::LetterRa => "newa letter ra",
Newa::LetterRha => "newa letter rha",
Newa::LetterLa => "newa letter la",
Newa::LetterLha => "newa letter lha",
Newa::LetterWa => "newa letter wa",
Newa::LetterSha => "newa letter sha",
Newa::LetterSsa => "newa letter ssa",
Newa::LetterSa => "newa letter sa",
Newa::LetterHa => "newa letter ha",
Newa::VowelSignAa => "newa vowel sign aa",
Newa::VowelSignI => "newa vowel sign i",
Newa::VowelSignIi => "newa vowel sign ii",
Newa::VowelSignU => "newa vowel sign u",
Newa::VowelSignUu => "newa vowel sign uu",
Newa::VowelSignVocalicR => "newa vowel sign vocalic r",
Newa::VowelSignVocalicRr => "newa vowel sign vocalic rr",
Newa::VowelSignVocalicL => "newa vowel sign vocalic l",
Newa::VowelSignVocalicLl => "newa vowel sign vocalic ll",
Newa::VowelSignE => "newa vowel sign e",
Newa::VowelSignAi => "newa vowel sign ai",
Newa::VowelSignO => "newa vowel sign o",
Newa::VowelSignAu => "newa vowel sign au",
Newa::SignVirama => "newa sign virama",
Newa::SignCandrabindu => "newa sign candrabindu",
Newa::SignAnusvara => "newa sign anusvara",
Newa::SignVisarga => "newa sign visarga",
Newa::SignNukta => "newa sign nukta",
Newa::SignAvagraha => "newa sign avagraha",
Newa::SignFinalAnusvara => "newa sign final anusvara",
Newa::Om => "newa om",
Newa::Siddhi => "newa siddhi",
Newa::Danda => "newa danda",
Newa::DoubleDanda => "newa double danda",
Newa::Comma => "newa comma",
Newa::GapFiller => "newa gap filler",
Newa::AbbreviationSign => "newa abbreviation sign",
Newa::DigitZero => "newa digit zero",
Newa::DigitOne => "newa digit one",
Newa::DigitTwo => "newa digit two",
Newa::DigitThree => "newa digit three",
Newa::DigitFour => "newa digit four",
Newa::DigitFive => "newa digit five",
Newa::DigitSix => "newa digit six",
Newa::DigitSeven => "newa digit seven",
Newa::DigitEight => "newa digit eight",
Newa::DigitNine => "newa digit nine",
Newa::PlaceholderMark => "newa placeholder mark",
Newa::InsertionSign => "newa insertion sign",
Newa::SandhiMark => "newa sandhi mark",
Newa::LetterVedicAnusvara => "newa letter vedic anusvara",
}
}
}