]>
Commit | Line | Data |
---|---|---|
3c0e092e XL |
1 | // Copyright 2017 The UNIC Project Developers. |
2 | // | |
3 | // See the COPYRIGHT file at the top-level directory of this distribution. | |
4 | // | |
5 | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | |
6 | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | |
7 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | |
8 | // option. This file may not be copied, modified, or distributed | |
9 | // except according to those terms. | |
10 | ||
11 | //! Unicode `Emoji_Component` Character Property. | |
12 | ||
13 | char_property! { | |
14 | /// Represents values of the Unicode character property | |
15 | /// [`Emoji_Component`](https://www.unicode.org/reports/tr51/#Emoji_Properties). | |
16 | /// | |
17 | /// The value is `true` for characters that normally do not appear on emoji keyboards as | |
18 | /// separate choices, such as Keycap base characters, Regional_Indicators, …, `false` otherwise. | |
19 | pub struct EmojiComponent(bool) { | |
20 | abbr => "Emoji_Component"; | |
21 | long => "Emoji_Component"; | |
22 | human => "Emoji Component"; | |
23 | ||
24 | data_table_path => "../tables/emoji_component.rsv"; | |
25 | } | |
26 | ||
27 | /// The value is `true` for characters that normally do not appear on emoji keyboards as | |
28 | /// separate choices, such as Keycap base characters, Regional_Indicators, …, `false` otherwise. | |
29 | pub fn is_emoji_component(char) -> bool; | |
30 | } | |
31 | ||
32 | #[cfg(test)] | |
33 | mod tests { | |
34 | #[test] | |
35 | fn test_values() { | |
36 | use super::is_emoji_component; | |
37 | ||
38 | // ASCII | |
39 | assert_eq!(is_emoji_component('\u{0000}'), false); | |
40 | assert_eq!(is_emoji_component('\u{0021}'), false); | |
41 | ||
42 | assert_eq!(is_emoji_component('\u{0027}'), false); | |
43 | assert_eq!(is_emoji_component('\u{0028}'), false); | |
44 | assert_eq!(is_emoji_component('\u{0029}'), false); | |
45 | assert_eq!(is_emoji_component('\u{002a}'), true); | |
46 | ||
47 | assert_eq!(is_emoji_component('\u{003b}'), false); | |
48 | assert_eq!(is_emoji_component('\u{003c}'), false); | |
49 | assert_eq!(is_emoji_component('\u{003d}'), false); | |
50 | ||
51 | assert_eq!(is_emoji_component('\u{007a}'), false); | |
52 | assert_eq!(is_emoji_component('\u{007b}'), false); | |
53 | assert_eq!(is_emoji_component('\u{007c}'), false); | |
54 | assert_eq!(is_emoji_component('\u{007d}'), false); | |
55 | assert_eq!(is_emoji_component('\u{007e}'), false); | |
56 | ||
57 | // Other BMP | |
58 | assert_eq!(is_emoji_component('\u{061b}'), false); | |
59 | assert_eq!(is_emoji_component('\u{061c}'), false); | |
60 | assert_eq!(is_emoji_component('\u{061d}'), false); | |
61 | ||
62 | assert_eq!(is_emoji_component('\u{200d}'), false); | |
63 | assert_eq!(is_emoji_component('\u{200e}'), false); | |
64 | assert_eq!(is_emoji_component('\u{200f}'), false); | |
65 | assert_eq!(is_emoji_component('\u{2010}'), false); | |
66 | ||
67 | assert_eq!(is_emoji_component('\u{2029}'), false); | |
68 | assert_eq!(is_emoji_component('\u{202a}'), false); | |
69 | assert_eq!(is_emoji_component('\u{202e}'), false); | |
70 | assert_eq!(is_emoji_component('\u{202f}'), false); | |
71 | ||
72 | // Other Planes | |
73 | assert_eq!(is_emoji_component('\u{10000}'), false); | |
74 | assert_eq!(is_emoji_component('\u{10001}'), false); | |
75 | ||
76 | assert_eq!(is_emoji_component('\u{1f1e5}'), false); | |
77 | assert_eq!(is_emoji_component('\u{1f1e6}'), true); | |
78 | assert_eq!(is_emoji_component('\u{1f1ff}'), true); | |
79 | assert_eq!(is_emoji_component('\u{1f200}'), false); | |
80 | ||
81 | assert_eq!(is_emoji_component('\u{20000}'), false); | |
82 | assert_eq!(is_emoji_component('\u{30000}'), false); | |
83 | assert_eq!(is_emoji_component('\u{40000}'), false); | |
84 | assert_eq!(is_emoji_component('\u{50000}'), false); | |
85 | assert_eq!(is_emoji_component('\u{60000}'), false); | |
86 | assert_eq!(is_emoji_component('\u{70000}'), false); | |
87 | assert_eq!(is_emoji_component('\u{80000}'), false); | |
88 | assert_eq!(is_emoji_component('\u{90000}'), false); | |
89 | assert_eq!(is_emoji_component('\u{a0000}'), false); | |
90 | assert_eq!(is_emoji_component('\u{b0000}'), false); | |
91 | assert_eq!(is_emoji_component('\u{c0000}'), false); | |
92 | assert_eq!(is_emoji_component('\u{d0000}'), false); | |
93 | assert_eq!(is_emoji_component('\u{e0000}'), false); | |
94 | ||
95 | assert_eq!(is_emoji_component('\u{efffe}'), false); | |
96 | assert_eq!(is_emoji_component('\u{effff}'), false); | |
97 | ||
98 | // Priavte-Use Area | |
99 | assert_eq!(is_emoji_component('\u{f0000}'), false); | |
100 | assert_eq!(is_emoji_component('\u{f0001}'), false); | |
101 | assert_eq!(is_emoji_component('\u{ffffe}'), false); | |
102 | assert_eq!(is_emoji_component('\u{fffff}'), false); | |
103 | assert_eq!(is_emoji_component('\u{100000}'), false); | |
104 | assert_eq!(is_emoji_component('\u{100001}'), false); | |
105 | assert_eq!(is_emoji_component('\u{10fffe}'), false); | |
106 | assert_eq!(is_emoji_component('\u{10ffff}'), false); | |
107 | } | |
108 | } |