unicode_general_category/
lib.rs

1//! Look up the general category for a character.
2//!
3//! ### Example
4//!
5//! ```
6//! use unicode_general_category::{get_general_category, GeneralCategory};
7//!
8//! assert_eq!(get_general_category('A'), GeneralCategory::UppercaseLetter);
9//! ```
10
11#![no_std]
12
13mod category;
14mod tables;
15pub use category::get_general_category;
16pub use tables::GeneralCategory;
17
18/// The version of [Unicode](http://www.unicode.org/)
19/// that this version of unicode-general-category was generated from.
20pub const UNICODE_VERSION: (u64, u64, u64) = (16, 0, 0);
21
22impl GeneralCategory {
23    /// Returns the general category abbreviation.
24    /// See [Unicode General Category Values](https://www.unicode.org/reports/tr44/tr44-30.html#General_Category_Values)
25    /// for the list of all general categories.
26    pub fn abbreviation(&self) -> &'static str {
27        match self {
28            GeneralCategory::ClosePunctuation => "Pe",
29            GeneralCategory::ConnectorPunctuation => "Pc",
30            GeneralCategory::Control => "Cc",
31            GeneralCategory::CurrencySymbol => "Sc",
32            GeneralCategory::DashPunctuation => "Pd",
33            GeneralCategory::DecimalNumber => "Nd",
34            GeneralCategory::EnclosingMark => "Me",
35            GeneralCategory::FinalPunctuation => "Pf",
36            GeneralCategory::Format => "Cf",
37            GeneralCategory::InitialPunctuation => "Pi",
38            GeneralCategory::LetterNumber => "Nl",
39            GeneralCategory::LineSeparator => "Zl",
40            GeneralCategory::LowercaseLetter => "Ll",
41            GeneralCategory::MathSymbol => "Sm",
42            GeneralCategory::ModifierLetter => "Lm",
43            GeneralCategory::ModifierSymbol => "Sk",
44            GeneralCategory::NonspacingMark => "Mn",
45            GeneralCategory::OpenPunctuation => "Ps",
46            GeneralCategory::OtherLetter => "Lo",
47            GeneralCategory::OtherNumber => "No",
48            GeneralCategory::OtherPunctuation => "Po",
49            GeneralCategory::OtherSymbol => "So",
50            GeneralCategory::ParagraphSeparator => "Zp",
51            GeneralCategory::PrivateUse => "Co",
52            GeneralCategory::SpaceSeparator => "Zs",
53            GeneralCategory::SpacingMark => "Mc",
54            GeneralCategory::Surrogate => "Cs",
55            GeneralCategory::TitlecaseLetter => "Lt",
56            GeneralCategory::Unassigned => "Cn",
57            GeneralCategory::UppercaseLetter => "Lu",
58        }
59    }
60}
61
62#[cfg(test)]
63mod test {
64    use super::{get_general_category, GeneralCategory};
65
66    #[test]
67    fn test_get_category() {
68        assert_eq!(get_general_category('a'), GeneralCategory::LowercaseLetter);
69        assert_eq!(get_general_category('.'), GeneralCategory::OtherPunctuation);
70        assert_eq!(get_general_category('カ'), GeneralCategory::OtherLetter);
71        assert_eq!(get_general_category('🦳'), GeneralCategory::OtherSymbol);
72    }
73
74    #[test]
75    fn test_abbreviation() {
76        let cat = get_general_category('a');
77        assert_eq!(cat.abbreviation(), "Ll");
78    }
79}