#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum CJKSymbolsandPunctuation {
IdeographicSpace,
IdeographicComma,
IdeographicFullStop,
DittoMark,
JapaneseIndustrialStandardSymbol,
IdeographicIterationMark,
IdeographicClosingMark,
IdeographicNumberZero,
LeftAngleBracket,
RightAngleBracket,
LeftDoubleAngleBracket,
RightDoubleAngleBracket,
LeftCornerBracket,
RightCornerBracket,
LeftWhiteCornerBracket,
RightWhiteCornerBracket,
LeftBlackLenticularBracket,
RightBlackLenticularBracket,
PostalMark,
GetaMark,
LeftTortoiseShellBracket,
RightTortoiseShellBracket,
LeftWhiteLenticularBracket,
RightWhiteLenticularBracket,
LeftWhiteTortoiseShellBracket,
RightWhiteTortoiseShellBracket,
LeftWhiteSquareBracket,
RightWhiteSquareBracket,
WaveDash,
ReversedDoublePrimeQuotationMark,
DoublePrimeQuotationMark,
LowDoublePrimeQuotationMark,
PostalMarkFace,
HangzhouNumeralOne,
HangzhouNumeralTwo,
HangzhouNumeralThree,
HangzhouNumeralFour,
HangzhouNumeralFive,
HangzhouNumeralSix,
HangzhouNumeralSeven,
HangzhouNumeralEight,
HangzhouNumeralNine,
IdeographicLevelToneMark,
IdeographicRisingToneMark,
IdeographicDepartingToneMark,
IdeographicEnteringToneMark,
HangulSingleDotToneMark,
HangulDoubleDotToneMark,
WavyDash,
VerticalKanaRepeatMark,
VerticalKanaRepeatWithVoicedSoundMark,
VerticalKanaRepeatMarkUpperHalf,
VerticalKanaRepeatWithVoicedSoundMarkUpperHalf,
VerticalKanaRepeatMarkLowerHalf,
CircledPostalMark,
IdeographicTelegraphLineFeedSeparatorSymbol,
HangzhouNumeralTen,
HangzhouNumeralTwenty,
HangzhouNumeralThirty,
VerticalIdeographicIterationMark,
MasuMark,
PartAlternationMark,
IdeographicVariationIndicator,
}
impl Into<char> for CJKSymbolsandPunctuation {
fn into(self) -> char {
match self {
CJKSymbolsandPunctuation::IdeographicSpace => ' ',
CJKSymbolsandPunctuation::IdeographicComma => '、',
CJKSymbolsandPunctuation::IdeographicFullStop => '。',
CJKSymbolsandPunctuation::DittoMark => '〃',
CJKSymbolsandPunctuation::JapaneseIndustrialStandardSymbol => '〄',
CJKSymbolsandPunctuation::IdeographicIterationMark => '々',
CJKSymbolsandPunctuation::IdeographicClosingMark => '〆',
CJKSymbolsandPunctuation::IdeographicNumberZero => '〇',
CJKSymbolsandPunctuation::LeftAngleBracket => '〈',
CJKSymbolsandPunctuation::RightAngleBracket => '〉',
CJKSymbolsandPunctuation::LeftDoubleAngleBracket => '《',
CJKSymbolsandPunctuation::RightDoubleAngleBracket => '》',
CJKSymbolsandPunctuation::LeftCornerBracket => '「',
CJKSymbolsandPunctuation::RightCornerBracket => '」',
CJKSymbolsandPunctuation::LeftWhiteCornerBracket => '『',
CJKSymbolsandPunctuation::RightWhiteCornerBracket => '』',
CJKSymbolsandPunctuation::LeftBlackLenticularBracket => '【',
CJKSymbolsandPunctuation::RightBlackLenticularBracket => '】',
CJKSymbolsandPunctuation::PostalMark => '〒',
CJKSymbolsandPunctuation::GetaMark => '〓',
CJKSymbolsandPunctuation::LeftTortoiseShellBracket => '〔',
CJKSymbolsandPunctuation::RightTortoiseShellBracket => '〕',
CJKSymbolsandPunctuation::LeftWhiteLenticularBracket => '〖',
CJKSymbolsandPunctuation::RightWhiteLenticularBracket => '〗',
CJKSymbolsandPunctuation::LeftWhiteTortoiseShellBracket => '〘',
CJKSymbolsandPunctuation::RightWhiteTortoiseShellBracket => '〙',
CJKSymbolsandPunctuation::LeftWhiteSquareBracket => '〚',
CJKSymbolsandPunctuation::RightWhiteSquareBracket => '〛',
CJKSymbolsandPunctuation::WaveDash => '〜',
CJKSymbolsandPunctuation::ReversedDoublePrimeQuotationMark => '〝',
CJKSymbolsandPunctuation::DoublePrimeQuotationMark => '〞',
CJKSymbolsandPunctuation::LowDoublePrimeQuotationMark => '〟',
CJKSymbolsandPunctuation::PostalMarkFace => '〠',
CJKSymbolsandPunctuation::HangzhouNumeralOne => '〡',
CJKSymbolsandPunctuation::HangzhouNumeralTwo => '〢',
CJKSymbolsandPunctuation::HangzhouNumeralThree => '〣',
CJKSymbolsandPunctuation::HangzhouNumeralFour => '〤',
CJKSymbolsandPunctuation::HangzhouNumeralFive => '〥',
CJKSymbolsandPunctuation::HangzhouNumeralSix => '〦',
CJKSymbolsandPunctuation::HangzhouNumeralSeven => '〧',
CJKSymbolsandPunctuation::HangzhouNumeralEight => '〨',
CJKSymbolsandPunctuation::HangzhouNumeralNine => '〩',
CJKSymbolsandPunctuation::IdeographicLevelToneMark => '〪',
CJKSymbolsandPunctuation::IdeographicRisingToneMark => '〫',
CJKSymbolsandPunctuation::IdeographicDepartingToneMark => '〬',
CJKSymbolsandPunctuation::IdeographicEnteringToneMark => '〭',
CJKSymbolsandPunctuation::HangulSingleDotToneMark => '〮',
CJKSymbolsandPunctuation::HangulDoubleDotToneMark => '〯',
CJKSymbolsandPunctuation::WavyDash => '〰',
CJKSymbolsandPunctuation::VerticalKanaRepeatMark => '〱',
CJKSymbolsandPunctuation::VerticalKanaRepeatWithVoicedSoundMark => '〲',
CJKSymbolsandPunctuation::VerticalKanaRepeatMarkUpperHalf => '〳',
CJKSymbolsandPunctuation::VerticalKanaRepeatWithVoicedSoundMarkUpperHalf => '〴',
CJKSymbolsandPunctuation::VerticalKanaRepeatMarkLowerHalf => '〵',
CJKSymbolsandPunctuation::CircledPostalMark => '〶',
CJKSymbolsandPunctuation::IdeographicTelegraphLineFeedSeparatorSymbol => '〷',
CJKSymbolsandPunctuation::HangzhouNumeralTen => '〸',
CJKSymbolsandPunctuation::HangzhouNumeralTwenty => '〹',
CJKSymbolsandPunctuation::HangzhouNumeralThirty => '〺',
CJKSymbolsandPunctuation::VerticalIdeographicIterationMark => '〻',
CJKSymbolsandPunctuation::MasuMark => '〼',
CJKSymbolsandPunctuation::PartAlternationMark => '〽',
CJKSymbolsandPunctuation::IdeographicVariationIndicator => '〾',
}
}
}
impl std::convert::TryFrom<char> for CJKSymbolsandPunctuation {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
' ' => Ok(CJKSymbolsandPunctuation::IdeographicSpace),
'、' => Ok(CJKSymbolsandPunctuation::IdeographicComma),
'。' => Ok(CJKSymbolsandPunctuation::IdeographicFullStop),
'〃' => Ok(CJKSymbolsandPunctuation::DittoMark),
'〄' => Ok(CJKSymbolsandPunctuation::JapaneseIndustrialStandardSymbol),
'々' => Ok(CJKSymbolsandPunctuation::IdeographicIterationMark),
'〆' => Ok(CJKSymbolsandPunctuation::IdeographicClosingMark),
'〇' => Ok(CJKSymbolsandPunctuation::IdeographicNumberZero),
'〈' => Ok(CJKSymbolsandPunctuation::LeftAngleBracket),
'〉' => Ok(CJKSymbolsandPunctuation::RightAngleBracket),
'《' => Ok(CJKSymbolsandPunctuation::LeftDoubleAngleBracket),
'》' => Ok(CJKSymbolsandPunctuation::RightDoubleAngleBracket),
'「' => Ok(CJKSymbolsandPunctuation::LeftCornerBracket),
'」' => Ok(CJKSymbolsandPunctuation::RightCornerBracket),
'『' => Ok(CJKSymbolsandPunctuation::LeftWhiteCornerBracket),
'』' => Ok(CJKSymbolsandPunctuation::RightWhiteCornerBracket),
'【' => Ok(CJKSymbolsandPunctuation::LeftBlackLenticularBracket),
'】' => Ok(CJKSymbolsandPunctuation::RightBlackLenticularBracket),
'〒' => Ok(CJKSymbolsandPunctuation::PostalMark),
'〓' => Ok(CJKSymbolsandPunctuation::GetaMark),
'〔' => Ok(CJKSymbolsandPunctuation::LeftTortoiseShellBracket),
'〕' => Ok(CJKSymbolsandPunctuation::RightTortoiseShellBracket),
'〖' => Ok(CJKSymbolsandPunctuation::LeftWhiteLenticularBracket),
'〗' => Ok(CJKSymbolsandPunctuation::RightWhiteLenticularBracket),
'〘' => Ok(CJKSymbolsandPunctuation::LeftWhiteTortoiseShellBracket),
'〙' => Ok(CJKSymbolsandPunctuation::RightWhiteTortoiseShellBracket),
'〚' => Ok(CJKSymbolsandPunctuation::LeftWhiteSquareBracket),
'〛' => Ok(CJKSymbolsandPunctuation::RightWhiteSquareBracket),
'〜' => Ok(CJKSymbolsandPunctuation::WaveDash),
'〝' => Ok(CJKSymbolsandPunctuation::ReversedDoublePrimeQuotationMark),
'〞' => Ok(CJKSymbolsandPunctuation::DoublePrimeQuotationMark),
'〟' => Ok(CJKSymbolsandPunctuation::LowDoublePrimeQuotationMark),
'〠' => Ok(CJKSymbolsandPunctuation::PostalMarkFace),
'〡' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralOne),
'〢' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralTwo),
'〣' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralThree),
'〤' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralFour),
'〥' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralFive),
'〦' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralSix),
'〧' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralSeven),
'〨' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralEight),
'〩' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralNine),
'〪' => Ok(CJKSymbolsandPunctuation::IdeographicLevelToneMark),
'〫' => Ok(CJKSymbolsandPunctuation::IdeographicRisingToneMark),
'〬' => Ok(CJKSymbolsandPunctuation::IdeographicDepartingToneMark),
'〭' => Ok(CJKSymbolsandPunctuation::IdeographicEnteringToneMark),
'〮' => Ok(CJKSymbolsandPunctuation::HangulSingleDotToneMark),
'〯' => Ok(CJKSymbolsandPunctuation::HangulDoubleDotToneMark),
'〰' => Ok(CJKSymbolsandPunctuation::WavyDash),
'〱' => Ok(CJKSymbolsandPunctuation::VerticalKanaRepeatMark),
'〲' => Ok(CJKSymbolsandPunctuation::VerticalKanaRepeatWithVoicedSoundMark),
'〳' => Ok(CJKSymbolsandPunctuation::VerticalKanaRepeatMarkUpperHalf),
'〴' => Ok(CJKSymbolsandPunctuation::VerticalKanaRepeatWithVoicedSoundMarkUpperHalf),
'〵' => Ok(CJKSymbolsandPunctuation::VerticalKanaRepeatMarkLowerHalf),
'〶' => Ok(CJKSymbolsandPunctuation::CircledPostalMark),
'〷' => Ok(CJKSymbolsandPunctuation::IdeographicTelegraphLineFeedSeparatorSymbol),
'〸' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralTen),
'〹' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralTwenty),
'〺' => Ok(CJKSymbolsandPunctuation::HangzhouNumeralThirty),
'〻' => Ok(CJKSymbolsandPunctuation::VerticalIdeographicIterationMark),
'〼' => Ok(CJKSymbolsandPunctuation::MasuMark),
'〽' => Ok(CJKSymbolsandPunctuation::PartAlternationMark),
'〾' => Ok(CJKSymbolsandPunctuation::IdeographicVariationIndicator),
_ => Err(()),
}
}
}
impl Into<u32> for CJKSymbolsandPunctuation {
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 CJKSymbolsandPunctuation {
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 CJKSymbolsandPunctuation {
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 CJKSymbolsandPunctuation {
pub fn new() -> Self {
CJKSymbolsandPunctuation::IdeographicSpace
}
pub fn name(&self) -> String {
let s = std::format!("CJKSymbolsandPunctuation{:#?}", self);
string_morph::to_sentence_case(&s)
}
}