unic_ucd_common/
control.rs

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//! *Control* Character Property, equal to `General_Category = Cc`.
12//!
13//! NOTE: This property is not defined by UCD, but is used commonly enough in Unicode algorithms and
14//! applications to provide an optimized implementation.
15
16char_property! {
17    /// Represents Unicode characters with `General_Category = Cc`.
18    ///
19    /// The value is `true` for characters that have a control (`Cc`) *General_Category*, `false`
20    /// otherwise.
21    pub struct Control(bool) {
22        abbr => "Control";
23        long => "Control";
24        human => "Control";
25
26        data_table_path => "../tables/control.rsv";
27    }
28
29    /// Return `true` for control characters, `false` otherwise.
30    pub fn is_control(char) -> bool;
31}
32
33#[cfg(test)]
34mod tests {
35    #[test]
36    fn test_values() {
37        use super::is_control;
38
39        // ASCII
40        assert_eq!(is_control('\u{0000}'), true);
41        assert_eq!(is_control('\u{0001}'), true);
42        assert_eq!(is_control('\u{0002}'), true);
43
44        assert_eq!(is_control('\u{0010}'), true);
45        assert_eq!(is_control('\u{0011}'), true);
46        assert_eq!(is_control('\u{0012}'), true);
47
48        assert_eq!(is_control('\u{0020}'), false);
49        assert_eq!(is_control('\u{0021}'), false);
50        assert_eq!(is_control('\u{0022}'), false);
51
52        assert_eq!(is_control('\u{0030}'), false);
53        assert_eq!(is_control('\u{0031}'), false);
54        assert_eq!(is_control('\u{0032}'), false);
55
56        assert_eq!(is_control('\u{0040}'), false);
57        assert_eq!(is_control('\u{0041}'), false);
58        assert_eq!(is_control('\u{0042}'), false);
59
60        assert_eq!(is_control('\u{0060}'), false);
61        assert_eq!(is_control('\u{0061}'), false);
62        assert_eq!(is_control('\u{0062}'), false);
63
64        assert_eq!(is_control('\u{007e}'), false);
65        assert_eq!(is_control('\u{007f}'), true);
66
67        // Other BMP
68        assert_eq!(is_control('\u{061b}'), false);
69        assert_eq!(is_control('\u{061c}'), false);
70        assert_eq!(is_control('\u{061d}'), false);
71
72        assert_eq!(is_control('\u{200d}'), false);
73        assert_eq!(is_control('\u{200e}'), false);
74        assert_eq!(is_control('\u{200f}'), false);
75        assert_eq!(is_control('\u{2010}'), false);
76
77        assert_eq!(is_control('\u{2029}'), false);
78        assert_eq!(is_control('\u{202a}'), false);
79        assert_eq!(is_control('\u{202e}'), false);
80        assert_eq!(is_control('\u{202f}'), false);
81
82        // Other Planes
83        assert_eq!(is_control('\u{10000}'), false);
84        assert_eq!(is_control('\u{10001}'), false);
85
86        assert_eq!(is_control('\u{20000}'), false);
87        assert_eq!(is_control('\u{30000}'), false);
88        assert_eq!(is_control('\u{40000}'), false);
89        assert_eq!(is_control('\u{50000}'), false);
90        assert_eq!(is_control('\u{60000}'), false);
91        assert_eq!(is_control('\u{70000}'), false);
92        assert_eq!(is_control('\u{80000}'), false);
93        assert_eq!(is_control('\u{90000}'), false);
94        assert_eq!(is_control('\u{a0000}'), false);
95        assert_eq!(is_control('\u{b0000}'), false);
96        assert_eq!(is_control('\u{c0000}'), false);
97        assert_eq!(is_control('\u{d0000}'), false);
98        assert_eq!(is_control('\u{e0000}'), false);
99
100        assert_eq!(is_control('\u{efffe}'), false);
101        assert_eq!(is_control('\u{effff}'), false);
102
103        // Priavte-Use Area
104        assert_eq!(is_control('\u{f0000}'), false);
105        assert_eq!(is_control('\u{f0001}'), false);
106        assert_eq!(is_control('\u{ffffe}'), false);
107        assert_eq!(is_control('\u{fffff}'), false);
108        assert_eq!(is_control('\u{100000}'), false);
109        assert_eq!(is_control('\u{100001}'), false);
110        assert_eq!(is_control('\u{10fffe}'), false);
111        assert_eq!(is_control('\u{10ffff}'), false);
112    }
113}