#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum GeneralPunctuation {
EnQuad,
EmQuad,
EnSpace,
EmSpace,
ThreeDashPerDashEmSpace,
FourDashPerDashEmSpace,
SixDashPerDashEmSpace,
FigureSpace,
PunctuationSpace,
ThinSpace,
HairSpace,
ZeroWidthSpace,
ZeroWidthNonDashJoiner,
ZeroWidthJoiner,
LeftDashToDashRightMark,
RightDashToDashLeftMark,
Hyphen,
NonDashBreakingHyphen,
FigureDash,
EnDash,
EmDash,
HorizontalBar,
DoubleVerticalLine,
DoubleLowLine,
LeftSingleQuotationMark,
RightSingleQuotationMark,
SingleLowDash9QuotationMark,
SingleHighDashReversedDash9QuotationMark,
LeftDoubleQuotationMark,
RightDoubleQuotationMark,
DoubleLowDash9QuotationMark,
DoubleHighDashReversedDash9QuotationMark,
Dagger,
DoubleDagger,
Bullet,
TriangularBullet,
OneDotLeader,
TwoDotLeader,
HorizontalEllipsis,
HyphenationPoint,
LineSeparator,
ParagraphSeparator,
LeftDashToDashRightEmbedding,
RightDashToDashLeftEmbedding,
PopDirectionalFormatting,
LeftDashToDashRightOverride,
RightDashToDashLeftOverride,
NarrowNoDashBreakSpace,
PerMilleSign,
PerTenThousandSign,
Prime,
DoublePrime,
TriplePrime,
ReversedPrime,
ReversedDoublePrime,
ReversedTriplePrime,
Caret,
SingleLeftDashPointingAngleQuotationMark,
SingleRightDashPointingAngleQuotationMark,
ReferenceMark,
DoubleExclamationMark,
Interrobang,
Overline,
Undertie,
CharacterTie,
CaretInsertionPoint,
Asterism,
HyphenBullet,
FractionSlash,
LeftSquareBracketWithQuill,
RightSquareBracketWithQuill,
DoubleQuestionMark,
QuestionExclamationMark,
ExclamationQuestionMark,
TironianSignEt,
ReversedPilcrowSign,
BlackLeftwardsBullet,
BlackRightwardsBullet,
LowAsterisk,
ReversedSemicolon,
CloseUp,
TwoAsterisksAlignedVertically,
CommercialMinusSign,
SwungDash,
InvertedUndertie,
FlowerPunctuationMark,
ThreeDotPunctuation,
QuadruplePrime,
FourDotPunctuation,
FiveDotPunctuation,
TwoDotPunctuation,
FourDotMark,
DottedCross,
Tricolon,
VerticalFourDots,
MediumMathematicalSpace,
WordJoiner,
FunctionApplication,
InvisibleTimes,
InvisibleSeparator,
InvisiblePlus,
LeftDashToDashRightIsolate,
RightDashToDashLeftIsolate,
FirstStrongIsolate,
PopDirectionalIsolate,
InhibitSymmetricSwapping,
ActivateSymmetricSwapping,
InhibitArabicFormShaping,
ActivateArabicFormShaping,
NationalDigitShapes,
}
impl Into<char> for GeneralPunctuation {
fn into(self) -> char {
match self {
GeneralPunctuation::EnQuad => ' ',
GeneralPunctuation::EmQuad => ' ',
GeneralPunctuation::EnSpace => ' ',
GeneralPunctuation::EmSpace => ' ',
GeneralPunctuation::ThreeDashPerDashEmSpace => ' ',
GeneralPunctuation::FourDashPerDashEmSpace => ' ',
GeneralPunctuation::SixDashPerDashEmSpace => ' ',
GeneralPunctuation::FigureSpace => ' ',
GeneralPunctuation::PunctuationSpace => ' ',
GeneralPunctuation::ThinSpace => ' ',
GeneralPunctuation::HairSpace => ' ',
GeneralPunctuation::ZeroWidthSpace => '',
GeneralPunctuation::ZeroWidthNonDashJoiner => '',
GeneralPunctuation::ZeroWidthJoiner => '',
GeneralPunctuation::LeftDashToDashRightMark => '',
GeneralPunctuation::RightDashToDashLeftMark => '',
GeneralPunctuation::Hyphen => '‐',
GeneralPunctuation::NonDashBreakingHyphen => '‑',
GeneralPunctuation::FigureDash => '‒',
GeneralPunctuation::EnDash => '–',
GeneralPunctuation::EmDash => '—',
GeneralPunctuation::HorizontalBar => '―',
GeneralPunctuation::DoubleVerticalLine => '‖',
GeneralPunctuation::DoubleLowLine => '‗',
GeneralPunctuation::LeftSingleQuotationMark => '‘',
GeneralPunctuation::RightSingleQuotationMark => '’',
GeneralPunctuation::SingleLowDash9QuotationMark => '‚',
GeneralPunctuation::SingleHighDashReversedDash9QuotationMark => '‛',
GeneralPunctuation::LeftDoubleQuotationMark => '“',
GeneralPunctuation::RightDoubleQuotationMark => '”',
GeneralPunctuation::DoubleLowDash9QuotationMark => '„',
GeneralPunctuation::DoubleHighDashReversedDash9QuotationMark => '‟',
GeneralPunctuation::Dagger => '†',
GeneralPunctuation::DoubleDagger => '‡',
GeneralPunctuation::Bullet => '•',
GeneralPunctuation::TriangularBullet => '‣',
GeneralPunctuation::OneDotLeader => '․',
GeneralPunctuation::TwoDotLeader => '‥',
GeneralPunctuation::HorizontalEllipsis => '…',
GeneralPunctuation::HyphenationPoint => '‧',
GeneralPunctuation::LineSeparator => '
',
GeneralPunctuation::ParagraphSeparator => '
',
GeneralPunctuation::LeftDashToDashRightEmbedding => '',
GeneralPunctuation::RightDashToDashLeftEmbedding => '',
GeneralPunctuation::PopDirectionalFormatting => '',
GeneralPunctuation::LeftDashToDashRightOverride => '',
GeneralPunctuation::RightDashToDashLeftOverride => '',
GeneralPunctuation::NarrowNoDashBreakSpace => ' ',
GeneralPunctuation::PerMilleSign => '‰',
GeneralPunctuation::PerTenThousandSign => '‱',
GeneralPunctuation::Prime => '′',
GeneralPunctuation::DoublePrime => '″',
GeneralPunctuation::TriplePrime => '‴',
GeneralPunctuation::ReversedPrime => '‵',
GeneralPunctuation::ReversedDoublePrime => '‶',
GeneralPunctuation::ReversedTriplePrime => '‷',
GeneralPunctuation::Caret => '‸',
GeneralPunctuation::SingleLeftDashPointingAngleQuotationMark => '‹',
GeneralPunctuation::SingleRightDashPointingAngleQuotationMark => '›',
GeneralPunctuation::ReferenceMark => '※',
GeneralPunctuation::DoubleExclamationMark => '‼',
GeneralPunctuation::Interrobang => '‽',
GeneralPunctuation::Overline => '‾',
GeneralPunctuation::Undertie => '‿',
GeneralPunctuation::CharacterTie => '⁀',
GeneralPunctuation::CaretInsertionPoint => '⁁',
GeneralPunctuation::Asterism => '⁂',
GeneralPunctuation::HyphenBullet => '⁃',
GeneralPunctuation::FractionSlash => '⁄',
GeneralPunctuation::LeftSquareBracketWithQuill => '⁅',
GeneralPunctuation::RightSquareBracketWithQuill => '⁆',
GeneralPunctuation::DoubleQuestionMark => '⁇',
GeneralPunctuation::QuestionExclamationMark => '⁈',
GeneralPunctuation::ExclamationQuestionMark => '⁉',
GeneralPunctuation::TironianSignEt => '⁊',
GeneralPunctuation::ReversedPilcrowSign => '⁋',
GeneralPunctuation::BlackLeftwardsBullet => '⁌',
GeneralPunctuation::BlackRightwardsBullet => '⁍',
GeneralPunctuation::LowAsterisk => '⁎',
GeneralPunctuation::ReversedSemicolon => '⁏',
GeneralPunctuation::CloseUp => '⁐',
GeneralPunctuation::TwoAsterisksAlignedVertically => '⁑',
GeneralPunctuation::CommercialMinusSign => '⁒',
GeneralPunctuation::SwungDash => '⁓',
GeneralPunctuation::InvertedUndertie => '⁔',
GeneralPunctuation::FlowerPunctuationMark => '⁕',
GeneralPunctuation::ThreeDotPunctuation => '⁖',
GeneralPunctuation::QuadruplePrime => '⁗',
GeneralPunctuation::FourDotPunctuation => '⁘',
GeneralPunctuation::FiveDotPunctuation => '⁙',
GeneralPunctuation::TwoDotPunctuation => '⁚',
GeneralPunctuation::FourDotMark => '⁛',
GeneralPunctuation::DottedCross => '⁜',
GeneralPunctuation::Tricolon => '⁝',
GeneralPunctuation::VerticalFourDots => '⁞',
GeneralPunctuation::MediumMathematicalSpace => ' ',
GeneralPunctuation::WordJoiner => '',
GeneralPunctuation::FunctionApplication => '',
GeneralPunctuation::InvisibleTimes => '',
GeneralPunctuation::InvisibleSeparator => '',
GeneralPunctuation::InvisiblePlus => '',
GeneralPunctuation::LeftDashToDashRightIsolate => '',
GeneralPunctuation::RightDashToDashLeftIsolate => '',
GeneralPunctuation::FirstStrongIsolate => '',
GeneralPunctuation::PopDirectionalIsolate => '',
GeneralPunctuation::InhibitSymmetricSwapping => '',
GeneralPunctuation::ActivateSymmetricSwapping => '',
GeneralPunctuation::InhibitArabicFormShaping => '',
GeneralPunctuation::ActivateArabicFormShaping => '',
GeneralPunctuation::NationalDigitShapes => '',
}
}
}
impl std::convert::TryFrom<char> for GeneralPunctuation {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
' ' => Ok(GeneralPunctuation::EnQuad),
' ' => Ok(GeneralPunctuation::EmQuad),
' ' => Ok(GeneralPunctuation::EnSpace),
' ' => Ok(GeneralPunctuation::EmSpace),
' ' => Ok(GeneralPunctuation::ThreeDashPerDashEmSpace),
' ' => Ok(GeneralPunctuation::FourDashPerDashEmSpace),
' ' => Ok(GeneralPunctuation::SixDashPerDashEmSpace),
' ' => Ok(GeneralPunctuation::FigureSpace),
' ' => Ok(GeneralPunctuation::PunctuationSpace),
' ' => Ok(GeneralPunctuation::ThinSpace),
' ' => Ok(GeneralPunctuation::HairSpace),
'' => Ok(GeneralPunctuation::ZeroWidthSpace),
'' => Ok(GeneralPunctuation::ZeroWidthNonDashJoiner),
'' => Ok(GeneralPunctuation::ZeroWidthJoiner),
'' => Ok(GeneralPunctuation::LeftDashToDashRightMark),
'' => Ok(GeneralPunctuation::RightDashToDashLeftMark),
'‐' => Ok(GeneralPunctuation::Hyphen),
'‑' => Ok(GeneralPunctuation::NonDashBreakingHyphen),
'‒' => Ok(GeneralPunctuation::FigureDash),
'–' => Ok(GeneralPunctuation::EnDash),
'—' => Ok(GeneralPunctuation::EmDash),
'―' => Ok(GeneralPunctuation::HorizontalBar),
'‖' => Ok(GeneralPunctuation::DoubleVerticalLine),
'‗' => Ok(GeneralPunctuation::DoubleLowLine),
'‘' => Ok(GeneralPunctuation::LeftSingleQuotationMark),
'’' => Ok(GeneralPunctuation::RightSingleQuotationMark),
'‚' => Ok(GeneralPunctuation::SingleLowDash9QuotationMark),
'‛' => Ok(GeneralPunctuation::SingleHighDashReversedDash9QuotationMark),
'“' => Ok(GeneralPunctuation::LeftDoubleQuotationMark),
'”' => Ok(GeneralPunctuation::RightDoubleQuotationMark),
'„' => Ok(GeneralPunctuation::DoubleLowDash9QuotationMark),
'‟' => Ok(GeneralPunctuation::DoubleHighDashReversedDash9QuotationMark),
'†' => Ok(GeneralPunctuation::Dagger),
'‡' => Ok(GeneralPunctuation::DoubleDagger),
'•' => Ok(GeneralPunctuation::Bullet),
'‣' => Ok(GeneralPunctuation::TriangularBullet),
'․' => Ok(GeneralPunctuation::OneDotLeader),
'‥' => Ok(GeneralPunctuation::TwoDotLeader),
'…' => Ok(GeneralPunctuation::HorizontalEllipsis),
'‧' => Ok(GeneralPunctuation::HyphenationPoint),
'
' => Ok(GeneralPunctuation::LineSeparator),
'
' => Ok(GeneralPunctuation::ParagraphSeparator),
'' => Ok(GeneralPunctuation::LeftDashToDashRightEmbedding),
'' => Ok(GeneralPunctuation::RightDashToDashLeftEmbedding),
'' => Ok(GeneralPunctuation::PopDirectionalFormatting),
'' => Ok(GeneralPunctuation::LeftDashToDashRightOverride),
'' => Ok(GeneralPunctuation::RightDashToDashLeftOverride),
' ' => Ok(GeneralPunctuation::NarrowNoDashBreakSpace),
'‰' => Ok(GeneralPunctuation::PerMilleSign),
'‱' => Ok(GeneralPunctuation::PerTenThousandSign),
'′' => Ok(GeneralPunctuation::Prime),
'″' => Ok(GeneralPunctuation::DoublePrime),
'‴' => Ok(GeneralPunctuation::TriplePrime),
'‵' => Ok(GeneralPunctuation::ReversedPrime),
'‶' => Ok(GeneralPunctuation::ReversedDoublePrime),
'‷' => Ok(GeneralPunctuation::ReversedTriplePrime),
'‸' => Ok(GeneralPunctuation::Caret),
'‹' => Ok(GeneralPunctuation::SingleLeftDashPointingAngleQuotationMark),
'›' => Ok(GeneralPunctuation::SingleRightDashPointingAngleQuotationMark),
'※' => Ok(GeneralPunctuation::ReferenceMark),
'‼' => Ok(GeneralPunctuation::DoubleExclamationMark),
'‽' => Ok(GeneralPunctuation::Interrobang),
'‾' => Ok(GeneralPunctuation::Overline),
'‿' => Ok(GeneralPunctuation::Undertie),
'⁀' => Ok(GeneralPunctuation::CharacterTie),
'⁁' => Ok(GeneralPunctuation::CaretInsertionPoint),
'⁂' => Ok(GeneralPunctuation::Asterism),
'⁃' => Ok(GeneralPunctuation::HyphenBullet),
'⁄' => Ok(GeneralPunctuation::FractionSlash),
'⁅' => Ok(GeneralPunctuation::LeftSquareBracketWithQuill),
'⁆' => Ok(GeneralPunctuation::RightSquareBracketWithQuill),
'⁇' => Ok(GeneralPunctuation::DoubleQuestionMark),
'⁈' => Ok(GeneralPunctuation::QuestionExclamationMark),
'⁉' => Ok(GeneralPunctuation::ExclamationQuestionMark),
'⁊' => Ok(GeneralPunctuation::TironianSignEt),
'⁋' => Ok(GeneralPunctuation::ReversedPilcrowSign),
'⁌' => Ok(GeneralPunctuation::BlackLeftwardsBullet),
'⁍' => Ok(GeneralPunctuation::BlackRightwardsBullet),
'⁎' => Ok(GeneralPunctuation::LowAsterisk),
'⁏' => Ok(GeneralPunctuation::ReversedSemicolon),
'⁐' => Ok(GeneralPunctuation::CloseUp),
'⁑' => Ok(GeneralPunctuation::TwoAsterisksAlignedVertically),
'⁒' => Ok(GeneralPunctuation::CommercialMinusSign),
'⁓' => Ok(GeneralPunctuation::SwungDash),
'⁔' => Ok(GeneralPunctuation::InvertedUndertie),
'⁕' => Ok(GeneralPunctuation::FlowerPunctuationMark),
'⁖' => Ok(GeneralPunctuation::ThreeDotPunctuation),
'⁗' => Ok(GeneralPunctuation::QuadruplePrime),
'⁘' => Ok(GeneralPunctuation::FourDotPunctuation),
'⁙' => Ok(GeneralPunctuation::FiveDotPunctuation),
'⁚' => Ok(GeneralPunctuation::TwoDotPunctuation),
'⁛' => Ok(GeneralPunctuation::FourDotMark),
'⁜' => Ok(GeneralPunctuation::DottedCross),
'⁝' => Ok(GeneralPunctuation::Tricolon),
'⁞' => Ok(GeneralPunctuation::VerticalFourDots),
' ' => Ok(GeneralPunctuation::MediumMathematicalSpace),
'' => Ok(GeneralPunctuation::WordJoiner),
'' => Ok(GeneralPunctuation::FunctionApplication),
'' => Ok(GeneralPunctuation::InvisibleTimes),
'' => Ok(GeneralPunctuation::InvisibleSeparator),
'' => Ok(GeneralPunctuation::InvisiblePlus),
'' => Ok(GeneralPunctuation::LeftDashToDashRightIsolate),
'' => Ok(GeneralPunctuation::RightDashToDashLeftIsolate),
'' => Ok(GeneralPunctuation::FirstStrongIsolate),
'' => Ok(GeneralPunctuation::PopDirectionalIsolate),
'' => Ok(GeneralPunctuation::InhibitSymmetricSwapping),
'' => Ok(GeneralPunctuation::ActivateSymmetricSwapping),
'' => Ok(GeneralPunctuation::InhibitArabicFormShaping),
'' => Ok(GeneralPunctuation::ActivateArabicFormShaping),
'' => Ok(GeneralPunctuation::NationalDigitShapes),
_ => Err(()),
}
}
}
impl Into<u32> for GeneralPunctuation {
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 GeneralPunctuation {
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 GeneralPunctuation {
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 GeneralPunctuation {
pub fn new() -> Self {
GeneralPunctuation::EnQuad
}
pub fn name(&self) -> String {
let s = std::format!("GeneralPunctuation{:#?}", self);
string_morph::to_sentence_case(&s)
}
}