1char_property! {
12 pub struct IdStart(bool) {
14 abbr => "IDS";
15 long => "ID_Start";
16 human => "ID Start";
17
18 data_table_path => "../tables/id_start.rsv";
19 }
20
21 pub fn is_id_start(char) -> bool;
23}
24
25char_property! {
26 pub struct IdContinue(bool) {
28 abbr => "IDC";
29 long => "ID_Continue";
30 human => "ID Continue";
31
32 data_table_path => "../tables/id_continue.rsv";
33 }
34
35 pub fn is_id_continue(char) -> bool;
37}
38
39#[cfg(test)]
40mod tests {
41 #[test]
42 fn test_is_id_start() {
43 use super::is_id_start;
44
45 assert_eq!(is_id_start('\u{0000}'), false);
47 assert_eq!(is_id_start('\u{0020}'), false);
48 assert_eq!(is_id_start('\u{0021}'), false);
49
50 assert_eq!(is_id_start('\u{0027}'), false);
51 assert_eq!(is_id_start('\u{0028}'), false);
52 assert_eq!(is_id_start('\u{0029}'), false);
53 assert_eq!(is_id_start('\u{002a}'), false);
54
55 assert_eq!(is_id_start('\u{0030}'), false);
56 assert_eq!(is_id_start('\u{0039}'), false);
57 assert_eq!(is_id_start('\u{003a}'), false);
58 assert_eq!(is_id_start('\u{003b}'), false);
59 assert_eq!(is_id_start('\u{003c}'), false);
60 assert_eq!(is_id_start('\u{003d}'), false);
61
62 assert_eq!(is_id_start('\u{004a}'), true);
63 assert_eq!(is_id_start('\u{004b}'), true);
64 assert_eq!(is_id_start('\u{004c}'), true);
65 assert_eq!(is_id_start('\u{004d}'), true);
66 assert_eq!(is_id_start('\u{004e}'), true);
67
68 assert_eq!(is_id_start('\u{006a}'), true);
69 assert_eq!(is_id_start('\u{006b}'), true);
70 assert_eq!(is_id_start('\u{006c}'), true);
71 assert_eq!(is_id_start('\u{006d}'), true);
72 assert_eq!(is_id_start('\u{006e}'), true);
73
74 assert_eq!(is_id_start('\u{007a}'), true);
75 assert_eq!(is_id_start('\u{007b}'), false);
76 assert_eq!(is_id_start('\u{007c}'), false);
77 assert_eq!(is_id_start('\u{007d}'), false);
78 assert_eq!(is_id_start('\u{007e}'), false);
79
80 assert_eq!(is_id_start('\u{00c0}'), true);
81 assert_eq!(is_id_start('\u{00c1}'), true);
82 assert_eq!(is_id_start('\u{00c2}'), true);
83 assert_eq!(is_id_start('\u{00c3}'), true);
84 assert_eq!(is_id_start('\u{00c4}'), true);
85
86 assert_eq!(is_id_start('\u{061b}'), false);
88 assert_eq!(is_id_start('\u{061c}'), false);
89 assert_eq!(is_id_start('\u{061d}'), false);
90
91 assert_eq!(is_id_start('\u{200d}'), false);
92 assert_eq!(is_id_start('\u{200e}'), false);
93 assert_eq!(is_id_start('\u{200f}'), false);
94 assert_eq!(is_id_start('\u{2010}'), false);
95
96 assert_eq!(is_id_start('\u{2029}'), false);
97 assert_eq!(is_id_start('\u{202a}'), false);
98 assert_eq!(is_id_start('\u{202e}'), false);
99 assert_eq!(is_id_start('\u{202f}'), false);
100
101 assert_eq!(is_id_start('\u{10000}'), true);
103 assert_eq!(is_id_start('\u{10001}'), true);
104
105 assert_eq!(is_id_start('\u{20000}'), true);
106 assert_eq!(is_id_start('\u{30000}'), false);
107 assert_eq!(is_id_start('\u{40000}'), false);
108 assert_eq!(is_id_start('\u{50000}'), false);
109 assert_eq!(is_id_start('\u{60000}'), false);
110 assert_eq!(is_id_start('\u{70000}'), false);
111 assert_eq!(is_id_start('\u{80000}'), false);
112 assert_eq!(is_id_start('\u{90000}'), false);
113 assert_eq!(is_id_start('\u{a0000}'), false);
114 assert_eq!(is_id_start('\u{b0000}'), false);
115 assert_eq!(is_id_start('\u{c0000}'), false);
116 assert_eq!(is_id_start('\u{d0000}'), false);
117 assert_eq!(is_id_start('\u{e0000}'), false);
118
119 assert_eq!(is_id_start('\u{efffe}'), false);
120 assert_eq!(is_id_start('\u{effff}'), false);
121
122 assert_eq!(is_id_start('\u{f0000}'), false);
124 assert_eq!(is_id_start('\u{f0001}'), false);
125 assert_eq!(is_id_start('\u{ffffe}'), false);
126 assert_eq!(is_id_start('\u{fffff}'), false);
127 assert_eq!(is_id_start('\u{100000}'), false);
128 assert_eq!(is_id_start('\u{100001}'), false);
129 assert_eq!(is_id_start('\u{10fffe}'), false);
130 assert_eq!(is_id_start('\u{10ffff}'), false);
131 }
132
133 #[test]
134 fn test_is_id_continue() {
135 use super::is_id_continue;
136
137 assert_eq!(is_id_continue('\u{0000}'), false);
139 assert_eq!(is_id_continue('\u{0020}'), false);
140 assert_eq!(is_id_continue('\u{0021}'), false);
141
142 assert_eq!(is_id_continue('\u{0027}'), false);
143 assert_eq!(is_id_continue('\u{0028}'), false);
144 assert_eq!(is_id_continue('\u{0029}'), false);
145 assert_eq!(is_id_continue('\u{002a}'), false);
146
147 assert_eq!(is_id_continue('\u{0030}'), true);
148 assert_eq!(is_id_continue('\u{0039}'), true);
149 assert_eq!(is_id_continue('\u{003a}'), false);
150 assert_eq!(is_id_continue('\u{003b}'), false);
151 assert_eq!(is_id_continue('\u{003c}'), false);
152 assert_eq!(is_id_continue('\u{003d}'), false);
153
154 assert_eq!(is_id_continue('\u{004a}'), true);
155 assert_eq!(is_id_continue('\u{004b}'), true);
156 assert_eq!(is_id_continue('\u{004c}'), true);
157 assert_eq!(is_id_continue('\u{004d}'), true);
158 assert_eq!(is_id_continue('\u{004e}'), true);
159
160 assert_eq!(is_id_continue('\u{006a}'), true);
161 assert_eq!(is_id_continue('\u{006b}'), true);
162 assert_eq!(is_id_continue('\u{006c}'), true);
163 assert_eq!(is_id_continue('\u{006d}'), true);
164 assert_eq!(is_id_continue('\u{006e}'), true);
165
166 assert_eq!(is_id_continue('\u{007a}'), true);
167 assert_eq!(is_id_continue('\u{007b}'), false);
168 assert_eq!(is_id_continue('\u{007c}'), false);
169 assert_eq!(is_id_continue('\u{007d}'), false);
170 assert_eq!(is_id_continue('\u{007e}'), false);
171
172 assert_eq!(is_id_continue('\u{00c0}'), true);
173 assert_eq!(is_id_continue('\u{00c1}'), true);
174 assert_eq!(is_id_continue('\u{00c2}'), true);
175 assert_eq!(is_id_continue('\u{00c3}'), true);
176 assert_eq!(is_id_continue('\u{00c4}'), true);
177
178 assert_eq!(is_id_continue('\u{061b}'), false);
180 assert_eq!(is_id_continue('\u{061c}'), false);
181 assert_eq!(is_id_continue('\u{061d}'), false);
182
183 assert_eq!(is_id_continue('\u{200d}'), false);
184 assert_eq!(is_id_continue('\u{200e}'), false);
185 assert_eq!(is_id_continue('\u{200f}'), false);
186 assert_eq!(is_id_continue('\u{2010}'), false);
187
188 assert_eq!(is_id_continue('\u{2029}'), false);
189 assert_eq!(is_id_continue('\u{202a}'), false);
190 assert_eq!(is_id_continue('\u{202e}'), false);
191 assert_eq!(is_id_continue('\u{202f}'), false);
192
193 assert_eq!(is_id_continue('\u{10000}'), true);
195 assert_eq!(is_id_continue('\u{10001}'), true);
196
197 assert_eq!(is_id_continue('\u{20000}'), true);
198 assert_eq!(is_id_continue('\u{30000}'), false);
199 assert_eq!(is_id_continue('\u{40000}'), false);
200 assert_eq!(is_id_continue('\u{50000}'), false);
201 assert_eq!(is_id_continue('\u{60000}'), false);
202 assert_eq!(is_id_continue('\u{70000}'), false);
203 assert_eq!(is_id_continue('\u{80000}'), false);
204 assert_eq!(is_id_continue('\u{90000}'), false);
205 assert_eq!(is_id_continue('\u{a0000}'), false);
206 assert_eq!(is_id_continue('\u{b0000}'), false);
207 assert_eq!(is_id_continue('\u{c0000}'), false);
208 assert_eq!(is_id_continue('\u{d0000}'), false);
209 assert_eq!(is_id_continue('\u{e0000}'), false);
210
211 assert_eq!(is_id_continue('\u{efffe}'), false);
212 assert_eq!(is_id_continue('\u{effff}'), false);
213
214 assert_eq!(is_id_continue('\u{f0000}'), false);
216 assert_eq!(is_id_continue('\u{f0001}'), false);
217 assert_eq!(is_id_continue('\u{ffffe}'), false);
218 assert_eq!(is_id_continue('\u{fffff}'), false);
219 assert_eq!(is_id_continue('\u{100000}'), false);
220 assert_eq!(is_id_continue('\u{100001}'), false);
221 assert_eq!(is_id_continue('\u{10fffe}'), false);
222 assert_eq!(is_id_continue('\u{10ffff}'), false);
223 }
224}