mod constants {
pub const LETTER_A: char = '𐨀';
pub const VOWEL_SIGN_I: char = '𐨁';
pub const VOWEL_SIGN_U: char = '𐨂';
pub const VOWEL_SIGN_VOCALIC_R: char = '𐨃';
pub const VOWEL_SIGN_E: char = '𐨅';
pub const VOWEL_SIGN_O: char = '𐨆';
pub const VOWEL_LENGTH_MARK: char = '𐨌';
pub const SIGN_DOUBLE_RING_BELOW: char = '𐨍';
pub const SIGN_ANUSVARA: char = '𐨎';
pub const SIGN_VISARGA: char = '𐨏';
pub const LETTER_KA: char = '𐨐';
pub const LETTER_KHA: char = '𐨑';
pub const LETTER_GA: char = '𐨒';
pub const LETTER_GHA: 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_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_ZA: char = '𐨰';
pub const LETTER_HA: char = '𐨱';
pub const LETTER_KKA: char = '𐨲';
pub const LETTER_TTTHA: char = '𐨳';
pub const LETTER_TTTA: char = '𐨴';
pub const LETTER_VHA: char = '𐨵';
pub const SIGN_BAR_ABOVE: char = '𐨸';
pub const SIGN_CAUDA: char = '𐨹';
pub const SIGN_DOT_BELOW: char = '𐨺';
pub const VIRAMA: char = '𐨿';
pub const DIGIT_ONE: char = '𐩀';
pub const DIGIT_TWO: char = '𐩁';
pub const DIGIT_THREE: char = '𐩂';
pub const DIGIT_FOUR: char = '𐩃';
pub const NUMBER_TEN: char = '𐩄';
pub const NUMBER_TWENTY: char = '𐩅';
pub const NUMBER_ONE_HUNDRED: char = '𐩆';
pub const NUMBER_ONE_THOUSAND: char = '𐩇';
pub const FRACTION_ONE_HALF: char = '𐩈';
pub const PUNCTUATION_DOT: char = '𐩐';
pub const PUNCTUATION_SMALL_CIRCLE: char = '𐩑';
pub const PUNCTUATION_CIRCLE: char = '𐩒';
pub const PUNCTUATION_CRESCENT_BAR: char = '𐩓';
pub const PUNCTUATION_MANGALAM: char = '𐩔';
pub const PUNCTUATION_LOTUS: char = '𐩕';
pub const PUNCTUATION_DANDA: char = '𐩖';
pub const PUNCTUATION_DOUBLE_DANDA: char = '𐩗';
pub const PUNCTUATION_LINES: char = '𐩘';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Kharoshthi {
LetterA,
VowelSignI,
VowelSignU,
VowelSignVocalicR,
VowelSignE,
VowelSignO,
VowelLengthMark,
SignDoubleRingBelow,
SignAnusvara,
SignVisarga,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterCa,
LetterCha,
LetterJa,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterZa,
LetterHa,
LetterKka,
LetterTttha,
LetterTtta,
LetterVha,
SignBarAbove,
SignCauda,
SignDotBelow,
Virama,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
NumberTen,
NumberTwenty,
NumberOneHundred,
NumberOneThousand,
FractionOneHalf,
PunctuationDot,
PunctuationSmallCircle,
PunctuationCircle,
PunctuationCrescentBar,
PunctuationMangalam,
PunctuationLotus,
PunctuationDanda,
PunctuationDoubleDanda,
PunctuationLines,
}
impl Into<char> for Kharoshthi {
fn into(self) -> char {
use constants::*;
match self {
Kharoshthi::LetterA => LETTER_A,
Kharoshthi::VowelSignI => VOWEL_SIGN_I,
Kharoshthi::VowelSignU => VOWEL_SIGN_U,
Kharoshthi::VowelSignVocalicR => VOWEL_SIGN_VOCALIC_R,
Kharoshthi::VowelSignE => VOWEL_SIGN_E,
Kharoshthi::VowelSignO => VOWEL_SIGN_O,
Kharoshthi::VowelLengthMark => VOWEL_LENGTH_MARK,
Kharoshthi::SignDoubleRingBelow => SIGN_DOUBLE_RING_BELOW,
Kharoshthi::SignAnusvara => SIGN_ANUSVARA,
Kharoshthi::SignVisarga => SIGN_VISARGA,
Kharoshthi::LetterKa => LETTER_KA,
Kharoshthi::LetterKha => LETTER_KHA,
Kharoshthi::LetterGa => LETTER_GA,
Kharoshthi::LetterGha => LETTER_GHA,
Kharoshthi::LetterCa => LETTER_CA,
Kharoshthi::LetterCha => LETTER_CHA,
Kharoshthi::LetterJa => LETTER_JA,
Kharoshthi::LetterNya => LETTER_NYA,
Kharoshthi::LetterTta => LETTER_TTA,
Kharoshthi::LetterTtha => LETTER_TTHA,
Kharoshthi::LetterDda => LETTER_DDA,
Kharoshthi::LetterDdha => LETTER_DDHA,
Kharoshthi::LetterNna => LETTER_NNA,
Kharoshthi::LetterTa => LETTER_TA,
Kharoshthi::LetterTha => LETTER_THA,
Kharoshthi::LetterDa => LETTER_DA,
Kharoshthi::LetterDha => LETTER_DHA,
Kharoshthi::LetterNa => LETTER_NA,
Kharoshthi::LetterPa => LETTER_PA,
Kharoshthi::LetterPha => LETTER_PHA,
Kharoshthi::LetterBa => LETTER_BA,
Kharoshthi::LetterBha => LETTER_BHA,
Kharoshthi::LetterMa => LETTER_MA,
Kharoshthi::LetterYa => LETTER_YA,
Kharoshthi::LetterRa => LETTER_RA,
Kharoshthi::LetterLa => LETTER_LA,
Kharoshthi::LetterVa => LETTER_VA,
Kharoshthi::LetterSha => LETTER_SHA,
Kharoshthi::LetterSsa => LETTER_SSA,
Kharoshthi::LetterSa => LETTER_SA,
Kharoshthi::LetterZa => LETTER_ZA,
Kharoshthi::LetterHa => LETTER_HA,
Kharoshthi::LetterKka => LETTER_KKA,
Kharoshthi::LetterTttha => LETTER_TTTHA,
Kharoshthi::LetterTtta => LETTER_TTTA,
Kharoshthi::LetterVha => LETTER_VHA,
Kharoshthi::SignBarAbove => SIGN_BAR_ABOVE,
Kharoshthi::SignCauda => SIGN_CAUDA,
Kharoshthi::SignDotBelow => SIGN_DOT_BELOW,
Kharoshthi::Virama => VIRAMA,
Kharoshthi::DigitOne => DIGIT_ONE,
Kharoshthi::DigitTwo => DIGIT_TWO,
Kharoshthi::DigitThree => DIGIT_THREE,
Kharoshthi::DigitFour => DIGIT_FOUR,
Kharoshthi::NumberTen => NUMBER_TEN,
Kharoshthi::NumberTwenty => NUMBER_TWENTY,
Kharoshthi::NumberOneHundred => NUMBER_ONE_HUNDRED,
Kharoshthi::NumberOneThousand => NUMBER_ONE_THOUSAND,
Kharoshthi::FractionOneHalf => FRACTION_ONE_HALF,
Kharoshthi::PunctuationDot => PUNCTUATION_DOT,
Kharoshthi::PunctuationSmallCircle => PUNCTUATION_SMALL_CIRCLE,
Kharoshthi::PunctuationCircle => PUNCTUATION_CIRCLE,
Kharoshthi::PunctuationCrescentBar => PUNCTUATION_CRESCENT_BAR,
Kharoshthi::PunctuationMangalam => PUNCTUATION_MANGALAM,
Kharoshthi::PunctuationLotus => PUNCTUATION_LOTUS,
Kharoshthi::PunctuationDanda => PUNCTUATION_DANDA,
Kharoshthi::PunctuationDoubleDanda => PUNCTUATION_DOUBLE_DANDA,
Kharoshthi::PunctuationLines => PUNCTUATION_LINES,
}
}
}
impl std::convert::TryFrom<char> for Kharoshthi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Kharoshthi::LetterA),
VOWEL_SIGN_I => Ok(Kharoshthi::VowelSignI),
VOWEL_SIGN_U => Ok(Kharoshthi::VowelSignU),
VOWEL_SIGN_VOCALIC_R => Ok(Kharoshthi::VowelSignVocalicR),
VOWEL_SIGN_E => Ok(Kharoshthi::VowelSignE),
VOWEL_SIGN_O => Ok(Kharoshthi::VowelSignO),
VOWEL_LENGTH_MARK => Ok(Kharoshthi::VowelLengthMark),
SIGN_DOUBLE_RING_BELOW => Ok(Kharoshthi::SignDoubleRingBelow),
SIGN_ANUSVARA => Ok(Kharoshthi::SignAnusvara),
SIGN_VISARGA => Ok(Kharoshthi::SignVisarga),
LETTER_KA => Ok(Kharoshthi::LetterKa),
LETTER_KHA => Ok(Kharoshthi::LetterKha),
LETTER_GA => Ok(Kharoshthi::LetterGa),
LETTER_GHA => Ok(Kharoshthi::LetterGha),
LETTER_CA => Ok(Kharoshthi::LetterCa),
LETTER_CHA => Ok(Kharoshthi::LetterCha),
LETTER_JA => Ok(Kharoshthi::LetterJa),
LETTER_NYA => Ok(Kharoshthi::LetterNya),
LETTER_TTA => Ok(Kharoshthi::LetterTta),
LETTER_TTHA => Ok(Kharoshthi::LetterTtha),
LETTER_DDA => Ok(Kharoshthi::LetterDda),
LETTER_DDHA => Ok(Kharoshthi::LetterDdha),
LETTER_NNA => Ok(Kharoshthi::LetterNna),
LETTER_TA => Ok(Kharoshthi::LetterTa),
LETTER_THA => Ok(Kharoshthi::LetterTha),
LETTER_DA => Ok(Kharoshthi::LetterDa),
LETTER_DHA => Ok(Kharoshthi::LetterDha),
LETTER_NA => Ok(Kharoshthi::LetterNa),
LETTER_PA => Ok(Kharoshthi::LetterPa),
LETTER_PHA => Ok(Kharoshthi::LetterPha),
LETTER_BA => Ok(Kharoshthi::LetterBa),
LETTER_BHA => Ok(Kharoshthi::LetterBha),
LETTER_MA => Ok(Kharoshthi::LetterMa),
LETTER_YA => Ok(Kharoshthi::LetterYa),
LETTER_RA => Ok(Kharoshthi::LetterRa),
LETTER_LA => Ok(Kharoshthi::LetterLa),
LETTER_VA => Ok(Kharoshthi::LetterVa),
LETTER_SHA => Ok(Kharoshthi::LetterSha),
LETTER_SSA => Ok(Kharoshthi::LetterSsa),
LETTER_SA => Ok(Kharoshthi::LetterSa),
LETTER_ZA => Ok(Kharoshthi::LetterZa),
LETTER_HA => Ok(Kharoshthi::LetterHa),
LETTER_KKA => Ok(Kharoshthi::LetterKka),
LETTER_TTTHA => Ok(Kharoshthi::LetterTttha),
LETTER_TTTA => Ok(Kharoshthi::LetterTtta),
LETTER_VHA => Ok(Kharoshthi::LetterVha),
SIGN_BAR_ABOVE => Ok(Kharoshthi::SignBarAbove),
SIGN_CAUDA => Ok(Kharoshthi::SignCauda),
SIGN_DOT_BELOW => Ok(Kharoshthi::SignDotBelow),
VIRAMA => Ok(Kharoshthi::Virama),
DIGIT_ONE => Ok(Kharoshthi::DigitOne),
DIGIT_TWO => Ok(Kharoshthi::DigitTwo),
DIGIT_THREE => Ok(Kharoshthi::DigitThree),
DIGIT_FOUR => Ok(Kharoshthi::DigitFour),
NUMBER_TEN => Ok(Kharoshthi::NumberTen),
NUMBER_TWENTY => Ok(Kharoshthi::NumberTwenty),
NUMBER_ONE_HUNDRED => Ok(Kharoshthi::NumberOneHundred),
NUMBER_ONE_THOUSAND => Ok(Kharoshthi::NumberOneThousand),
FRACTION_ONE_HALF => Ok(Kharoshthi::FractionOneHalf),
PUNCTUATION_DOT => Ok(Kharoshthi::PunctuationDot),
PUNCTUATION_SMALL_CIRCLE => Ok(Kharoshthi::PunctuationSmallCircle),
PUNCTUATION_CIRCLE => Ok(Kharoshthi::PunctuationCircle),
PUNCTUATION_CRESCENT_BAR => Ok(Kharoshthi::PunctuationCrescentBar),
PUNCTUATION_MANGALAM => Ok(Kharoshthi::PunctuationMangalam),
PUNCTUATION_LOTUS => Ok(Kharoshthi::PunctuationLotus),
PUNCTUATION_DANDA => Ok(Kharoshthi::PunctuationDanda),
PUNCTUATION_DOUBLE_DANDA => Ok(Kharoshthi::PunctuationDoubleDanda),
PUNCTUATION_LINES => Ok(Kharoshthi::PunctuationLines),
_ => Err(()),
}
}
}
impl Into<u32> for Kharoshthi {
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 Kharoshthi {
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 Kharoshthi {
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 Kharoshthi {
pub fn new() -> Self {
Kharoshthi::LetterA
}
pub fn name(&self) -> &str {
match self {
Kharoshthi::LetterA => "kharoshthi letter a",
Kharoshthi::VowelSignI => "kharoshthi vowel sign i",
Kharoshthi::VowelSignU => "kharoshthi vowel sign u",
Kharoshthi::VowelSignVocalicR => "kharoshthi vowel sign vocalic r",
Kharoshthi::VowelSignE => "kharoshthi vowel sign e",
Kharoshthi::VowelSignO => "kharoshthi vowel sign o",
Kharoshthi::VowelLengthMark => "kharoshthi vowel length mark",
Kharoshthi::SignDoubleRingBelow => "kharoshthi sign double ring below",
Kharoshthi::SignAnusvara => "kharoshthi sign anusvara",
Kharoshthi::SignVisarga => "kharoshthi sign visarga",
Kharoshthi::LetterKa => "kharoshthi letter ka",
Kharoshthi::LetterKha => "kharoshthi letter kha",
Kharoshthi::LetterGa => "kharoshthi letter ga",
Kharoshthi::LetterGha => "kharoshthi letter gha",
Kharoshthi::LetterCa => "kharoshthi letter ca",
Kharoshthi::LetterCha => "kharoshthi letter cha",
Kharoshthi::LetterJa => "kharoshthi letter ja",
Kharoshthi::LetterNya => "kharoshthi letter nya",
Kharoshthi::LetterTta => "kharoshthi letter tta",
Kharoshthi::LetterTtha => "kharoshthi letter ttha",
Kharoshthi::LetterDda => "kharoshthi letter dda",
Kharoshthi::LetterDdha => "kharoshthi letter ddha",
Kharoshthi::LetterNna => "kharoshthi letter nna",
Kharoshthi::LetterTa => "kharoshthi letter ta",
Kharoshthi::LetterTha => "kharoshthi letter tha",
Kharoshthi::LetterDa => "kharoshthi letter da",
Kharoshthi::LetterDha => "kharoshthi letter dha",
Kharoshthi::LetterNa => "kharoshthi letter na",
Kharoshthi::LetterPa => "kharoshthi letter pa",
Kharoshthi::LetterPha => "kharoshthi letter pha",
Kharoshthi::LetterBa => "kharoshthi letter ba",
Kharoshthi::LetterBha => "kharoshthi letter bha",
Kharoshthi::LetterMa => "kharoshthi letter ma",
Kharoshthi::LetterYa => "kharoshthi letter ya",
Kharoshthi::LetterRa => "kharoshthi letter ra",
Kharoshthi::LetterLa => "kharoshthi letter la",
Kharoshthi::LetterVa => "kharoshthi letter va",
Kharoshthi::LetterSha => "kharoshthi letter sha",
Kharoshthi::LetterSsa => "kharoshthi letter ssa",
Kharoshthi::LetterSa => "kharoshthi letter sa",
Kharoshthi::LetterZa => "kharoshthi letter za",
Kharoshthi::LetterHa => "kharoshthi letter ha",
Kharoshthi::LetterKka => "kharoshthi letter kka",
Kharoshthi::LetterTttha => "kharoshthi letter tttha",
Kharoshthi::LetterTtta => "kharoshthi letter ttta",
Kharoshthi::LetterVha => "kharoshthi letter vha",
Kharoshthi::SignBarAbove => "kharoshthi sign bar above",
Kharoshthi::SignCauda => "kharoshthi sign cauda",
Kharoshthi::SignDotBelow => "kharoshthi sign dot below",
Kharoshthi::Virama => "kharoshthi virama",
Kharoshthi::DigitOne => "kharoshthi digit one",
Kharoshthi::DigitTwo => "kharoshthi digit two",
Kharoshthi::DigitThree => "kharoshthi digit three",
Kharoshthi::DigitFour => "kharoshthi digit four",
Kharoshthi::NumberTen => "kharoshthi number ten",
Kharoshthi::NumberTwenty => "kharoshthi number twenty",
Kharoshthi::NumberOneHundred => "kharoshthi number one hundred",
Kharoshthi::NumberOneThousand => "kharoshthi number one thousand",
Kharoshthi::FractionOneHalf => "kharoshthi fraction one half",
Kharoshthi::PunctuationDot => "kharoshthi punctuation dot",
Kharoshthi::PunctuationSmallCircle => "kharoshthi punctuation small circle",
Kharoshthi::PunctuationCircle => "kharoshthi punctuation circle",
Kharoshthi::PunctuationCrescentBar => "kharoshthi punctuation crescent bar",
Kharoshthi::PunctuationMangalam => "kharoshthi punctuation mangalam",
Kharoshthi::PunctuationLotus => "kharoshthi punctuation lotus",
Kharoshthi::PunctuationDanda => "kharoshthi punctuation danda",
Kharoshthi::PunctuationDoubleDanda => "kharoshthi punctuation double danda",
Kharoshthi::PunctuationLines => "kharoshthi punctuation lines",
}
}
}