mod constants {
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 LETTER_A: char = 'ߊ';
pub const LETTER_EE: char = 'ߋ';
pub const LETTER_I: char = 'ߌ';
pub const LETTER_E: char = 'ߍ';
pub const LETTER_U: char = 'ߎ';
pub const LETTER_OO: char = 'ߏ';
pub const LETTER_O: char = 'ߐ';
pub const LETTER_DAGBASINNA: char = 'ߑ';
pub const LETTER_N: char = 'ߒ';
pub const LETTER_BA: char = 'ߓ';
pub const LETTER_PA: char = 'ߔ';
pub const LETTER_TA: char = 'ߕ';
pub const LETTER_JA: char = 'ߖ';
pub const LETTER_CHA: char = 'ߗ';
pub const LETTER_DA: char = 'ߘ';
pub const LETTER_RA: char = 'ߙ';
pub const LETTER_RRA: char = 'ߚ';
pub const LETTER_SA: char = 'ߛ';
pub const LETTER_GBA: char = 'ߜ';
pub const LETTER_FA: char = 'ߝ';
pub const LETTER_KA: char = 'ߞ';
pub const LETTER_LA: char = 'ߟ';
pub const LETTER_NA_WOLOSO: char = 'ߠ';
pub const LETTER_MA: char = 'ߡ';
pub const LETTER_NYA: char = 'ߢ';
pub const LETTER_NA: char = 'ߣ';
pub const LETTER_HA: char = 'ߤ';
pub const LETTER_WA: char = 'ߥ';
pub const LETTER_YA: char = 'ߦ';
pub const LETTER_NYA_WOLOSO: char = 'ߧ';
pub const LETTER_JONA_JA: char = 'ߨ';
pub const LETTER_JONA_CHA: char = 'ߩ';
pub const LETTER_JONA_RA: char = 'ߪ';
pub const COMBINING_SHORT_HIGH_TONE: char = '߫';
pub const COMBINING_SHORT_LOW_TONE: char = '߬';
pub const COMBINING_SHORT_RISING_TONE: char = '߭';
pub const COMBINING_LONG_DESCENDING_TONE: char = '߮';
pub const COMBINING_LONG_HIGH_TONE: char = '߯';
pub const COMBINING_LONG_LOW_TONE: char = '߰';
pub const COMBINING_LONG_RISING_TONE: char = '߱';
pub const COMBINING_NASALIZATION_MARK: char = '߲';
pub const COMBINING_DOUBLE_DOT_ABOVE: char = '߳';
pub const HIGH_TONE_APOSTROPHE: char = 'ߴ';
pub const LOW_TONE_APOSTROPHE: char = 'ߵ';
pub const SYMBOL_OO_DENNEN: char = '߶';
pub const SYMBOL_GBAKURUNEN: char = '߷';
pub const COMMA: char = '߸';
pub const EXCLAMATION_MARK: char = '߹';
pub const LAJANYALAN: char = 'ߺ';
pub const DANTAYALAN: char = '߽';
pub const DOROME_SIGN: char = '߾';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum NKo {
NkoDigitZero,
NkoDigitOne,
NkoDigitTwo,
NkoDigitThree,
NkoDigitFour,
NkoDigitFive,
NkoDigitSix,
NkoDigitSeven,
NkoDigitEight,
NkoDigitNine,
NkoLetterA,
NkoLetterEe,
NkoLetterI,
NkoLetterE,
NkoLetterU,
NkoLetterOo,
NkoLetterO,
NkoLetterDagbasinna,
NkoLetterN,
NkoLetterBa,
NkoLetterPa,
NkoLetterTa,
NkoLetterJa,
NkoLetterCha,
NkoLetterDa,
NkoLetterRa,
NkoLetterRra,
NkoLetterSa,
NkoLetterGba,
NkoLetterFa,
NkoLetterKa,
NkoLetterLa,
NkoLetterNaWoloso,
NkoLetterMa,
NkoLetterNya,
NkoLetterNa,
NkoLetterHa,
NkoLetterWa,
NkoLetterYa,
NkoLetterNyaWoloso,
NkoLetterJonaJa,
NkoLetterJonaCha,
NkoLetterJonaRa,
NkoCombiningShortHighTone,
NkoCombiningShortLowTone,
NkoCombiningShortRisingTone,
NkoCombiningLongDescendingTone,
NkoCombiningLongHighTone,
NkoCombiningLongLowTone,
NkoCombiningLongRisingTone,
NkoCombiningNasalizationMark,
NkoCombiningDoubleDotAbove,
NkoHighToneApostrophe,
NkoLowToneApostrophe,
NkoSymbolOoDennen,
NkoSymbolGbakurunen,
NkoComma,
NkoExclamationMark,
NkoLajanyalan,
NkoDantayalan,
NkoDoromeSign,
}
impl Into<char> for NKo {
fn into(self) -> char {
use constants::*;
match self {
NKo::NkoDigitZero => DIGIT_ZERO,
NKo::NkoDigitOne => DIGIT_ONE,
NKo::NkoDigitTwo => DIGIT_TWO,
NKo::NkoDigitThree => DIGIT_THREE,
NKo::NkoDigitFour => DIGIT_FOUR,
NKo::NkoDigitFive => DIGIT_FIVE,
NKo::NkoDigitSix => DIGIT_SIX,
NKo::NkoDigitSeven => DIGIT_SEVEN,
NKo::NkoDigitEight => DIGIT_EIGHT,
NKo::NkoDigitNine => DIGIT_NINE,
NKo::NkoLetterA => LETTER_A,
NKo::NkoLetterEe => LETTER_EE,
NKo::NkoLetterI => LETTER_I,
NKo::NkoLetterE => LETTER_E,
NKo::NkoLetterU => LETTER_U,
NKo::NkoLetterOo => LETTER_OO,
NKo::NkoLetterO => LETTER_O,
NKo::NkoLetterDagbasinna => LETTER_DAGBASINNA,
NKo::NkoLetterN => LETTER_N,
NKo::NkoLetterBa => LETTER_BA,
NKo::NkoLetterPa => LETTER_PA,
NKo::NkoLetterTa => LETTER_TA,
NKo::NkoLetterJa => LETTER_JA,
NKo::NkoLetterCha => LETTER_CHA,
NKo::NkoLetterDa => LETTER_DA,
NKo::NkoLetterRa => LETTER_RA,
NKo::NkoLetterRra => LETTER_RRA,
NKo::NkoLetterSa => LETTER_SA,
NKo::NkoLetterGba => LETTER_GBA,
NKo::NkoLetterFa => LETTER_FA,
NKo::NkoLetterKa => LETTER_KA,
NKo::NkoLetterLa => LETTER_LA,
NKo::NkoLetterNaWoloso => LETTER_NA_WOLOSO,
NKo::NkoLetterMa => LETTER_MA,
NKo::NkoLetterNya => LETTER_NYA,
NKo::NkoLetterNa => LETTER_NA,
NKo::NkoLetterHa => LETTER_HA,
NKo::NkoLetterWa => LETTER_WA,
NKo::NkoLetterYa => LETTER_YA,
NKo::NkoLetterNyaWoloso => LETTER_NYA_WOLOSO,
NKo::NkoLetterJonaJa => LETTER_JONA_JA,
NKo::NkoLetterJonaCha => LETTER_JONA_CHA,
NKo::NkoLetterJonaRa => LETTER_JONA_RA,
NKo::NkoCombiningShortHighTone => COMBINING_SHORT_HIGH_TONE,
NKo::NkoCombiningShortLowTone => COMBINING_SHORT_LOW_TONE,
NKo::NkoCombiningShortRisingTone => COMBINING_SHORT_RISING_TONE,
NKo::NkoCombiningLongDescendingTone => COMBINING_LONG_DESCENDING_TONE,
NKo::NkoCombiningLongHighTone => COMBINING_LONG_HIGH_TONE,
NKo::NkoCombiningLongLowTone => COMBINING_LONG_LOW_TONE,
NKo::NkoCombiningLongRisingTone => COMBINING_LONG_RISING_TONE,
NKo::NkoCombiningNasalizationMark => COMBINING_NASALIZATION_MARK,
NKo::NkoCombiningDoubleDotAbove => COMBINING_DOUBLE_DOT_ABOVE,
NKo::NkoHighToneApostrophe => HIGH_TONE_APOSTROPHE,
NKo::NkoLowToneApostrophe => LOW_TONE_APOSTROPHE,
NKo::NkoSymbolOoDennen => SYMBOL_OO_DENNEN,
NKo::NkoSymbolGbakurunen => SYMBOL_GBAKURUNEN,
NKo::NkoComma => COMMA,
NKo::NkoExclamationMark => EXCLAMATION_MARK,
NKo::NkoLajanyalan => LAJANYALAN,
NKo::NkoDantayalan => DANTAYALAN,
NKo::NkoDoromeSign => DOROME_SIGN,
}
}
}
impl std::convert::TryFrom<char> for NKo {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
DIGIT_ZERO => Ok(NKo::NkoDigitZero),
DIGIT_ONE => Ok(NKo::NkoDigitOne),
DIGIT_TWO => Ok(NKo::NkoDigitTwo),
DIGIT_THREE => Ok(NKo::NkoDigitThree),
DIGIT_FOUR => Ok(NKo::NkoDigitFour),
DIGIT_FIVE => Ok(NKo::NkoDigitFive),
DIGIT_SIX => Ok(NKo::NkoDigitSix),
DIGIT_SEVEN => Ok(NKo::NkoDigitSeven),
DIGIT_EIGHT => Ok(NKo::NkoDigitEight),
DIGIT_NINE => Ok(NKo::NkoDigitNine),
LETTER_A => Ok(NKo::NkoLetterA),
LETTER_EE => Ok(NKo::NkoLetterEe),
LETTER_I => Ok(NKo::NkoLetterI),
LETTER_E => Ok(NKo::NkoLetterE),
LETTER_U => Ok(NKo::NkoLetterU),
LETTER_OO => Ok(NKo::NkoLetterOo),
LETTER_O => Ok(NKo::NkoLetterO),
LETTER_DAGBASINNA => Ok(NKo::NkoLetterDagbasinna),
LETTER_N => Ok(NKo::NkoLetterN),
LETTER_BA => Ok(NKo::NkoLetterBa),
LETTER_PA => Ok(NKo::NkoLetterPa),
LETTER_TA => Ok(NKo::NkoLetterTa),
LETTER_JA => Ok(NKo::NkoLetterJa),
LETTER_CHA => Ok(NKo::NkoLetterCha),
LETTER_DA => Ok(NKo::NkoLetterDa),
LETTER_RA => Ok(NKo::NkoLetterRa),
LETTER_RRA => Ok(NKo::NkoLetterRra),
LETTER_SA => Ok(NKo::NkoLetterSa),
LETTER_GBA => Ok(NKo::NkoLetterGba),
LETTER_FA => Ok(NKo::NkoLetterFa),
LETTER_KA => Ok(NKo::NkoLetterKa),
LETTER_LA => Ok(NKo::NkoLetterLa),
LETTER_NA_WOLOSO => Ok(NKo::NkoLetterNaWoloso),
LETTER_MA => Ok(NKo::NkoLetterMa),
LETTER_NYA => Ok(NKo::NkoLetterNya),
LETTER_NA => Ok(NKo::NkoLetterNa),
LETTER_HA => Ok(NKo::NkoLetterHa),
LETTER_WA => Ok(NKo::NkoLetterWa),
LETTER_YA => Ok(NKo::NkoLetterYa),
LETTER_NYA_WOLOSO => Ok(NKo::NkoLetterNyaWoloso),
LETTER_JONA_JA => Ok(NKo::NkoLetterJonaJa),
LETTER_JONA_CHA => Ok(NKo::NkoLetterJonaCha),
LETTER_JONA_RA => Ok(NKo::NkoLetterJonaRa),
COMBINING_SHORT_HIGH_TONE => Ok(NKo::NkoCombiningShortHighTone),
COMBINING_SHORT_LOW_TONE => Ok(NKo::NkoCombiningShortLowTone),
COMBINING_SHORT_RISING_TONE => Ok(NKo::NkoCombiningShortRisingTone),
COMBINING_LONG_DESCENDING_TONE => Ok(NKo::NkoCombiningLongDescendingTone),
COMBINING_LONG_HIGH_TONE => Ok(NKo::NkoCombiningLongHighTone),
COMBINING_LONG_LOW_TONE => Ok(NKo::NkoCombiningLongLowTone),
COMBINING_LONG_RISING_TONE => Ok(NKo::NkoCombiningLongRisingTone),
COMBINING_NASALIZATION_MARK => Ok(NKo::NkoCombiningNasalizationMark),
COMBINING_DOUBLE_DOT_ABOVE => Ok(NKo::NkoCombiningDoubleDotAbove),
HIGH_TONE_APOSTROPHE => Ok(NKo::NkoHighToneApostrophe),
LOW_TONE_APOSTROPHE => Ok(NKo::NkoLowToneApostrophe),
SYMBOL_OO_DENNEN => Ok(NKo::NkoSymbolOoDennen),
SYMBOL_GBAKURUNEN => Ok(NKo::NkoSymbolGbakurunen),
COMMA => Ok(NKo::NkoComma),
EXCLAMATION_MARK => Ok(NKo::NkoExclamationMark),
LAJANYALAN => Ok(NKo::NkoLajanyalan),
DANTAYALAN => Ok(NKo::NkoDantayalan),
DOROME_SIGN => Ok(NKo::NkoDoromeSign),
_ => Err(()),
}
}
}
impl Into<u32> for NKo {
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 NKo {
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 NKo {
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 NKo {
pub fn new() -> Self {
NKo::NkoDigitZero
}
pub fn name(&self) -> &str {
match self {
NKo::NkoDigitZero => "nko digit zero",
NKo::NkoDigitOne => "nko digit one",
NKo::NkoDigitTwo => "nko digit two",
NKo::NkoDigitThree => "nko digit three",
NKo::NkoDigitFour => "nko digit four",
NKo::NkoDigitFive => "nko digit five",
NKo::NkoDigitSix => "nko digit six",
NKo::NkoDigitSeven => "nko digit seven",
NKo::NkoDigitEight => "nko digit eight",
NKo::NkoDigitNine => "nko digit nine",
NKo::NkoLetterA => "nko letter a",
NKo::NkoLetterEe => "nko letter ee",
NKo::NkoLetterI => "nko letter i",
NKo::NkoLetterE => "nko letter e",
NKo::NkoLetterU => "nko letter u",
NKo::NkoLetterOo => "nko letter oo",
NKo::NkoLetterO => "nko letter o",
NKo::NkoLetterDagbasinna => "nko letter dagbasinna",
NKo::NkoLetterN => "nko letter n",
NKo::NkoLetterBa => "nko letter ba",
NKo::NkoLetterPa => "nko letter pa",
NKo::NkoLetterTa => "nko letter ta",
NKo::NkoLetterJa => "nko letter ja",
NKo::NkoLetterCha => "nko letter cha",
NKo::NkoLetterDa => "nko letter da",
NKo::NkoLetterRa => "nko letter ra",
NKo::NkoLetterRra => "nko letter rra",
NKo::NkoLetterSa => "nko letter sa",
NKo::NkoLetterGba => "nko letter gba",
NKo::NkoLetterFa => "nko letter fa",
NKo::NkoLetterKa => "nko letter ka",
NKo::NkoLetterLa => "nko letter la",
NKo::NkoLetterNaWoloso => "nko letter na woloso",
NKo::NkoLetterMa => "nko letter ma",
NKo::NkoLetterNya => "nko letter nya",
NKo::NkoLetterNa => "nko letter na",
NKo::NkoLetterHa => "nko letter ha",
NKo::NkoLetterWa => "nko letter wa",
NKo::NkoLetterYa => "nko letter ya",
NKo::NkoLetterNyaWoloso => "nko letter nya woloso",
NKo::NkoLetterJonaJa => "nko letter jona ja",
NKo::NkoLetterJonaCha => "nko letter jona cha",
NKo::NkoLetterJonaRa => "nko letter jona ra",
NKo::NkoCombiningShortHighTone => "nko combining short high tone",
NKo::NkoCombiningShortLowTone => "nko combining short low tone",
NKo::NkoCombiningShortRisingTone => "nko combining short rising tone",
NKo::NkoCombiningLongDescendingTone => "nko combining long descending tone",
NKo::NkoCombiningLongHighTone => "nko combining long high tone",
NKo::NkoCombiningLongLowTone => "nko combining long low tone",
NKo::NkoCombiningLongRisingTone => "nko combining long rising tone",
NKo::NkoCombiningNasalizationMark => "nko combining nasalization mark",
NKo::NkoCombiningDoubleDotAbove => "nko combining double dot above",
NKo::NkoHighToneApostrophe => "nko high tone apostrophe",
NKo::NkoLowToneApostrophe => "nko low tone apostrophe",
NKo::NkoSymbolOoDennen => "nko symbol oo dennen",
NKo::NkoSymbolGbakurunen => "nko symbol gbakurunen",
NKo::NkoComma => "nko comma",
NKo::NkoExclamationMark => "nko exclamation mark",
NKo::NkoLajanyalan => "nko lajanyalan",
NKo::NkoDantayalan => "nko dantayalan",
NKo::NkoDoromeSign => "nko dorome sign",
}
}
}