1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! Look up the canonical combining class for a character.
//!
//! ### Example
//!
//! ```
//! use unicode_canonical_combining_class::{get_canonical_combining_class, CanonicalCombiningClass};
//!
//! assert_eq!(get_canonical_combining_class('ཱ'), CanonicalCombiningClass::CCC129);
//! ```

#![no_std]

mod canonical_combining_class;
mod tables;

pub use canonical_combining_class::{
    get_canonical_combining_class, get_canonical_combining_class_u32,
};
pub use tables::CanonicalCombiningClass;

/// The version of [Unicode](http://www.unicode.org/)
/// that this version of unicode-joining-type was generated from.
pub const UNICODE_VERSION: (u64, u64, u64) = (15, 0, 0);

#[cfg(test)]
mod test {
    use super::{
        get_canonical_combining_class, get_canonical_combining_class_u32, CanonicalCombiningClass,
    };

    #[test]
    fn test_get_canonical_combining_class() {
        assert_eq!(
            get_canonical_combining_class('\u{05B0}'),
            CanonicalCombiningClass::CCC10
        );
        assert_eq!(
            get_canonical_combining_class('\u{08F0}'),
            CanonicalCombiningClass::CCC27
        );
        assert_eq!(
            get_canonical_combining_class('\u{0670}'),
            CanonicalCombiningClass::CCC35
        );
        assert_eq!(
            get_canonical_combining_class('\u{0E39}'),
            CanonicalCombiningClass::CCC103
        );
        assert_eq!(
            get_canonical_combining_class('\u{0E48}'),
            CanonicalCombiningClass::CCC107
        );
        assert_eq!(
            get_canonical_combining_class('\u{1DCE}'),
            CanonicalCombiningClass::AttachedAbove
        );
        assert_eq!(
            get_canonical_combining_class('\u{0F39}'),
            CanonicalCombiningClass::AttachedAboveRight
        );
        assert_eq!(
            get_canonical_combining_class('\u{0359}'),
            CanonicalCombiningClass::Below
        );
        assert_eq!(
            get_canonical_combining_class('\u{1939}'),
            CanonicalCombiningClass::BelowRight
        );
        assert_eq!(
            get_canonical_combining_class('\u{ABED}'),
            CanonicalCombiningClass::Virama
        );
        assert_eq!(
            get_canonical_combining_class('\u{081A}'),
            CanonicalCombiningClass::NotReordered
        );
        assert_eq!(
            get_canonical_combining_class('\u{1259}'),
            CanonicalCombiningClass::NotReordered
        );
    }

    #[test]
    fn test_get_canonical_combining_class_u32() {
        assert_eq!(
            get_canonical_combining_class_u32(0x05B0),
            CanonicalCombiningClass::CCC10
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x08F0),
            CanonicalCombiningClass::CCC27
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x0670),
            CanonicalCombiningClass::CCC35
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x0E39),
            CanonicalCombiningClass::CCC103
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x0E48),
            CanonicalCombiningClass::CCC107
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x1DCE),
            CanonicalCombiningClass::AttachedAbove
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x0F39),
            CanonicalCombiningClass::AttachedAboveRight
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x0359),
            CanonicalCombiningClass::Below
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x1939),
            CanonicalCombiningClass::BelowRight
        );
        assert_eq!(
            get_canonical_combining_class_u32(0xABED),
            CanonicalCombiningClass::Virama
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x081A),
            CanonicalCombiningClass::NotReordered
        );
        assert_eq!(
            get_canonical_combining_class_u32(0x1259),
            CanonicalCombiningClass::NotReordered
        );
    }
}