mod constants {
pub const SIGN_CANDRABINDU: char = '𑄀';
pub const SIGN_ANUSVARA: char = '𑄁';
pub const SIGN_VISARGA: char = '𑄂';
pub const LETTER_AA: char = '𑄃';
pub const LETTER_I: char = '𑄄';
pub const LETTER_U: char = '𑄅';
pub const LETTER_E: char = '𑄆';
pub const LETTER_KAA: char = '𑄇';
pub const LETTER_KHAA: char = '𑄈';
pub const LETTER_GAA: char = '𑄉';
pub const LETTER_GHAA: char = '𑄊';
pub const LETTER_NGAA: char = '𑄋';
pub const LETTER_CAA: char = '𑄌';
pub const LETTER_CHAA: char = '𑄍';
pub const LETTER_JAA: char = '𑄎';
pub const LETTER_JHAA: char = '𑄏';
pub const LETTER_NYAA: char = '𑄐';
pub const LETTER_TTAA: char = '𑄑';
pub const LETTER_TTHAA: char = '𑄒';
pub const LETTER_DDAA: char = '𑄓';
pub const LETTER_DDHAA: char = '𑄔';
pub const LETTER_NNAA: char = '𑄕';
pub const LETTER_TAA: char = '𑄖';
pub const LETTER_THAA: char = '𑄗';
pub const LETTER_DAA: char = '𑄘';
pub const LETTER_DHAA: char = '𑄙';
pub const LETTER_NAA: char = '𑄚';
pub const LETTER_PAA: char = '𑄛';
pub const LETTER_PHAA: char = '𑄜';
pub const LETTER_BAA: char = '𑄝';
pub const LETTER_BHAA: char = '𑄞';
pub const LETTER_MAA: char = '𑄟';
pub const LETTER_YYAA: char = '𑄠';
pub const LETTER_YAA: char = '𑄡';
pub const LETTER_RAA: char = '𑄢';
pub const LETTER_LAA: char = '𑄣';
pub const LETTER_WAA: char = '𑄤';
pub const LETTER_SAA: char = '𑄥';
pub const LETTER_HAA: char = '𑄦';
pub const VOWEL_SIGN_A: 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_E: char = '𑄬';
pub const VOWEL_SIGN_AI: char = '𑄭';
pub const VOWEL_SIGN_O: char = '𑄮';
pub const VOWEL_SIGN_AU: char = '𑄯';
pub const VOWEL_SIGN_OI: char = '𑄰';
pub const O_MARK: char = '𑄱';
pub const AU_MARK: char = '𑄲';
pub const VIRAMA: char = '𑄳';
pub const MAAYYAA: 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 SECTION_MARK: char = '𑅀';
pub const DANDA: char = '𑅁';
pub const DOUBLE_DANDA: char = '𑅂';
pub const QUESTION_MARK: char = '𑅃';
pub const LETTER_LHAA: char = '𑅄';
pub const VOWEL_SIGN_AA: char = '𑅅';
pub const VOWEL_SIGN_EI: char = '𑅆';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Chakma {
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterAa,
LetterI,
LetterU,
LetterE,
LetterKaa,
LetterKhaa,
LetterGaa,
LetterGhaa,
LetterNgaa,
LetterCaa,
LetterChaa,
LetterJaa,
LetterJhaa,
LetterNyaa,
LetterTtaa,
LetterTthaa,
LetterDdaa,
LetterDdhaa,
LetterNnaa,
LetterTaa,
LetterThaa,
LetterDaa,
LetterDhaa,
LetterNaa,
LetterPaa,
LetterPhaa,
LetterBaa,
LetterBhaa,
LetterMaa,
LetterYyaa,
LetterYaa,
LetterRaa,
LetterLaa,
LetterWaa,
LetterSaa,
LetterHaa,
VowelSignA,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
VowelSignOi,
OMark,
AuMark,
Virama,
Maayyaa,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
SectionMark,
Danda,
DoubleDanda,
QuestionMark,
LetterLhaa,
VowelSignAa,
VowelSignEi,
}
impl Into<char> for Chakma {
fn into(self) -> char {
use constants::*;
match self {
Chakma::SignCandrabindu => SIGN_CANDRABINDU,
Chakma::SignAnusvara => SIGN_ANUSVARA,
Chakma::SignVisarga => SIGN_VISARGA,
Chakma::LetterAa => LETTER_AA,
Chakma::LetterI => LETTER_I,
Chakma::LetterU => LETTER_U,
Chakma::LetterE => LETTER_E,
Chakma::LetterKaa => LETTER_KAA,
Chakma::LetterKhaa => LETTER_KHAA,
Chakma::LetterGaa => LETTER_GAA,
Chakma::LetterGhaa => LETTER_GHAA,
Chakma::LetterNgaa => LETTER_NGAA,
Chakma::LetterCaa => LETTER_CAA,
Chakma::LetterChaa => LETTER_CHAA,
Chakma::LetterJaa => LETTER_JAA,
Chakma::LetterJhaa => LETTER_JHAA,
Chakma::LetterNyaa => LETTER_NYAA,
Chakma::LetterTtaa => LETTER_TTAA,
Chakma::LetterTthaa => LETTER_TTHAA,
Chakma::LetterDdaa => LETTER_DDAA,
Chakma::LetterDdhaa => LETTER_DDHAA,
Chakma::LetterNnaa => LETTER_NNAA,
Chakma::LetterTaa => LETTER_TAA,
Chakma::LetterThaa => LETTER_THAA,
Chakma::LetterDaa => LETTER_DAA,
Chakma::LetterDhaa => LETTER_DHAA,
Chakma::LetterNaa => LETTER_NAA,
Chakma::LetterPaa => LETTER_PAA,
Chakma::LetterPhaa => LETTER_PHAA,
Chakma::LetterBaa => LETTER_BAA,
Chakma::LetterBhaa => LETTER_BHAA,
Chakma::LetterMaa => LETTER_MAA,
Chakma::LetterYyaa => LETTER_YYAA,
Chakma::LetterYaa => LETTER_YAA,
Chakma::LetterRaa => LETTER_RAA,
Chakma::LetterLaa => LETTER_LAA,
Chakma::LetterWaa => LETTER_WAA,
Chakma::LetterSaa => LETTER_SAA,
Chakma::LetterHaa => LETTER_HAA,
Chakma::VowelSignA => VOWEL_SIGN_A,
Chakma::VowelSignI => VOWEL_SIGN_I,
Chakma::VowelSignIi => VOWEL_SIGN_II,
Chakma::VowelSignU => VOWEL_SIGN_U,
Chakma::VowelSignUu => VOWEL_SIGN_UU,
Chakma::VowelSignE => VOWEL_SIGN_E,
Chakma::VowelSignAi => VOWEL_SIGN_AI,
Chakma::VowelSignO => VOWEL_SIGN_O,
Chakma::VowelSignAu => VOWEL_SIGN_AU,
Chakma::VowelSignOi => VOWEL_SIGN_OI,
Chakma::OMark => O_MARK,
Chakma::AuMark => AU_MARK,
Chakma::Virama => VIRAMA,
Chakma::Maayyaa => MAAYYAA,
Chakma::DigitZero => DIGIT_ZERO,
Chakma::DigitOne => DIGIT_ONE,
Chakma::DigitTwo => DIGIT_TWO,
Chakma::DigitThree => DIGIT_THREE,
Chakma::DigitFour => DIGIT_FOUR,
Chakma::DigitFive => DIGIT_FIVE,
Chakma::DigitSix => DIGIT_SIX,
Chakma::DigitSeven => DIGIT_SEVEN,
Chakma::DigitEight => DIGIT_EIGHT,
Chakma::DigitNine => DIGIT_NINE,
Chakma::SectionMark => SECTION_MARK,
Chakma::Danda => DANDA,
Chakma::DoubleDanda => DOUBLE_DANDA,
Chakma::QuestionMark => QUESTION_MARK,
Chakma::LetterLhaa => LETTER_LHAA,
Chakma::VowelSignAa => VOWEL_SIGN_AA,
Chakma::VowelSignEi => VOWEL_SIGN_EI,
}
}
}
impl std::convert::TryFrom<char> for Chakma {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
SIGN_CANDRABINDU => Ok(Chakma::SignCandrabindu),
SIGN_ANUSVARA => Ok(Chakma::SignAnusvara),
SIGN_VISARGA => Ok(Chakma::SignVisarga),
LETTER_AA => Ok(Chakma::LetterAa),
LETTER_I => Ok(Chakma::LetterI),
LETTER_U => Ok(Chakma::LetterU),
LETTER_E => Ok(Chakma::LetterE),
LETTER_KAA => Ok(Chakma::LetterKaa),
LETTER_KHAA => Ok(Chakma::LetterKhaa),
LETTER_GAA => Ok(Chakma::LetterGaa),
LETTER_GHAA => Ok(Chakma::LetterGhaa),
LETTER_NGAA => Ok(Chakma::LetterNgaa),
LETTER_CAA => Ok(Chakma::LetterCaa),
LETTER_CHAA => Ok(Chakma::LetterChaa),
LETTER_JAA => Ok(Chakma::LetterJaa),
LETTER_JHAA => Ok(Chakma::LetterJhaa),
LETTER_NYAA => Ok(Chakma::LetterNyaa),
LETTER_TTAA => Ok(Chakma::LetterTtaa),
LETTER_TTHAA => Ok(Chakma::LetterTthaa),
LETTER_DDAA => Ok(Chakma::LetterDdaa),
LETTER_DDHAA => Ok(Chakma::LetterDdhaa),
LETTER_NNAA => Ok(Chakma::LetterNnaa),
LETTER_TAA => Ok(Chakma::LetterTaa),
LETTER_THAA => Ok(Chakma::LetterThaa),
LETTER_DAA => Ok(Chakma::LetterDaa),
LETTER_DHAA => Ok(Chakma::LetterDhaa),
LETTER_NAA => Ok(Chakma::LetterNaa),
LETTER_PAA => Ok(Chakma::LetterPaa),
LETTER_PHAA => Ok(Chakma::LetterPhaa),
LETTER_BAA => Ok(Chakma::LetterBaa),
LETTER_BHAA => Ok(Chakma::LetterBhaa),
LETTER_MAA => Ok(Chakma::LetterMaa),
LETTER_YYAA => Ok(Chakma::LetterYyaa),
LETTER_YAA => Ok(Chakma::LetterYaa),
LETTER_RAA => Ok(Chakma::LetterRaa),
LETTER_LAA => Ok(Chakma::LetterLaa),
LETTER_WAA => Ok(Chakma::LetterWaa),
LETTER_SAA => Ok(Chakma::LetterSaa),
LETTER_HAA => Ok(Chakma::LetterHaa),
VOWEL_SIGN_A => Ok(Chakma::VowelSignA),
VOWEL_SIGN_I => Ok(Chakma::VowelSignI),
VOWEL_SIGN_II => Ok(Chakma::VowelSignIi),
VOWEL_SIGN_U => Ok(Chakma::VowelSignU),
VOWEL_SIGN_UU => Ok(Chakma::VowelSignUu),
VOWEL_SIGN_E => Ok(Chakma::VowelSignE),
VOWEL_SIGN_AI => Ok(Chakma::VowelSignAi),
VOWEL_SIGN_O => Ok(Chakma::VowelSignO),
VOWEL_SIGN_AU => Ok(Chakma::VowelSignAu),
VOWEL_SIGN_OI => Ok(Chakma::VowelSignOi),
O_MARK => Ok(Chakma::OMark),
AU_MARK => Ok(Chakma::AuMark),
VIRAMA => Ok(Chakma::Virama),
MAAYYAA => Ok(Chakma::Maayyaa),
DIGIT_ZERO => Ok(Chakma::DigitZero),
DIGIT_ONE => Ok(Chakma::DigitOne),
DIGIT_TWO => Ok(Chakma::DigitTwo),
DIGIT_THREE => Ok(Chakma::DigitThree),
DIGIT_FOUR => Ok(Chakma::DigitFour),
DIGIT_FIVE => Ok(Chakma::DigitFive),
DIGIT_SIX => Ok(Chakma::DigitSix),
DIGIT_SEVEN => Ok(Chakma::DigitSeven),
DIGIT_EIGHT => Ok(Chakma::DigitEight),
DIGIT_NINE => Ok(Chakma::DigitNine),
SECTION_MARK => Ok(Chakma::SectionMark),
DANDA => Ok(Chakma::Danda),
DOUBLE_DANDA => Ok(Chakma::DoubleDanda),
QUESTION_MARK => Ok(Chakma::QuestionMark),
LETTER_LHAA => Ok(Chakma::LetterLhaa),
VOWEL_SIGN_AA => Ok(Chakma::VowelSignAa),
VOWEL_SIGN_EI => Ok(Chakma::VowelSignEi),
_ => Err(()),
}
}
}
impl Into<u32> for Chakma {
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 Chakma {
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 Chakma {
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 Chakma {
pub fn new() -> Self {
Chakma::SignCandrabindu
}
pub fn name(&self) -> &str {
match self {
Chakma::SignCandrabindu => "chakma sign candrabindu",
Chakma::SignAnusvara => "chakma sign anusvara",
Chakma::SignVisarga => "chakma sign visarga",
Chakma::LetterAa => "chakma letter aa",
Chakma::LetterI => "chakma letter i",
Chakma::LetterU => "chakma letter u",
Chakma::LetterE => "chakma letter e",
Chakma::LetterKaa => "chakma letter kaa",
Chakma::LetterKhaa => "chakma letter khaa",
Chakma::LetterGaa => "chakma letter gaa",
Chakma::LetterGhaa => "chakma letter ghaa",
Chakma::LetterNgaa => "chakma letter ngaa",
Chakma::LetterCaa => "chakma letter caa",
Chakma::LetterChaa => "chakma letter chaa",
Chakma::LetterJaa => "chakma letter jaa",
Chakma::LetterJhaa => "chakma letter jhaa",
Chakma::LetterNyaa => "chakma letter nyaa",
Chakma::LetterTtaa => "chakma letter ttaa",
Chakma::LetterTthaa => "chakma letter tthaa",
Chakma::LetterDdaa => "chakma letter ddaa",
Chakma::LetterDdhaa => "chakma letter ddhaa",
Chakma::LetterNnaa => "chakma letter nnaa",
Chakma::LetterTaa => "chakma letter taa",
Chakma::LetterThaa => "chakma letter thaa",
Chakma::LetterDaa => "chakma letter daa",
Chakma::LetterDhaa => "chakma letter dhaa",
Chakma::LetterNaa => "chakma letter naa",
Chakma::LetterPaa => "chakma letter paa",
Chakma::LetterPhaa => "chakma letter phaa",
Chakma::LetterBaa => "chakma letter baa",
Chakma::LetterBhaa => "chakma letter bhaa",
Chakma::LetterMaa => "chakma letter maa",
Chakma::LetterYyaa => "chakma letter yyaa",
Chakma::LetterYaa => "chakma letter yaa",
Chakma::LetterRaa => "chakma letter raa",
Chakma::LetterLaa => "chakma letter laa",
Chakma::LetterWaa => "chakma letter waa",
Chakma::LetterSaa => "chakma letter saa",
Chakma::LetterHaa => "chakma letter haa",
Chakma::VowelSignA => "chakma vowel sign a",
Chakma::VowelSignI => "chakma vowel sign i",
Chakma::VowelSignIi => "chakma vowel sign ii",
Chakma::VowelSignU => "chakma vowel sign u",
Chakma::VowelSignUu => "chakma vowel sign uu",
Chakma::VowelSignE => "chakma vowel sign e",
Chakma::VowelSignAi => "chakma vowel sign ai",
Chakma::VowelSignO => "chakma vowel sign o",
Chakma::VowelSignAu => "chakma vowel sign au",
Chakma::VowelSignOi => "chakma vowel sign oi",
Chakma::OMark => "chakma o mark",
Chakma::AuMark => "chakma au mark",
Chakma::Virama => "chakma virama",
Chakma::Maayyaa => "chakma maayyaa",
Chakma::DigitZero => "chakma digit zero",
Chakma::DigitOne => "chakma digit one",
Chakma::DigitTwo => "chakma digit two",
Chakma::DigitThree => "chakma digit three",
Chakma::DigitFour => "chakma digit four",
Chakma::DigitFive => "chakma digit five",
Chakma::DigitSix => "chakma digit six",
Chakma::DigitSeven => "chakma digit seven",
Chakma::DigitEight => "chakma digit eight",
Chakma::DigitNine => "chakma digit nine",
Chakma::SectionMark => "chakma section mark",
Chakma::Danda => "chakma danda",
Chakma::DoubleDanda => "chakma double danda",
Chakma::QuestionMark => "chakma question mark",
Chakma::LetterLhaa => "chakma letter lhaa",
Chakma::VowelSignAa => "chakma vowel sign aa",
Chakma::VowelSignEi => "chakma vowel sign ei",
}
}
}